zoukankan      html  css  js  c++  java
  • Dubbo学习笔记

    1 dubbo的 作用
    以下内容摘自dubbo官网:
      dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现;

    2 查看官网大坑


      (二)dubbo管理控制台的搭建

    git clone https://github.com/apache/incubator-dubbo-ops


    cd incubator-dubbo-ops && mvn package

    用法,分为三个 admin, register/ monitor
    dubbo admin

    Dubbo admin is a spring boot application, you can start it with fat jar or in IDE directly.

    进入 dubbo-admin,执行 mvn install
    -----------------------------
    maven 下载打包时需要配置 仓库MAVEN_HOME,Path=xxxxxj,这样的话就会用配置的阿里云镜像,下载会很快
    碰到了不能编译,需要配置java环境变量
    编译后启动报错了,因为没改zookeeper的配置ip,重新安装打包,运行target下的 java -jar dubbo-xxxxxx.jar,账号参考配置里的 root/root 或者 guest/xxxx,端口查看配置 时 7001


    dubbo monitor and dubbo registry
    You can get a release of dubbo monitor in two steps:


    Step 1:
    git clone https://github.com/apache/incubator-dubbo-ops
    Step 2:
    cd incubator-dubbo-ops && mvn package
    Then you will find:

    dubbo-monitor-simple-2.0.0-assembly.tar.gz in incubator-dubbo-opsdubbo-monitor-simple arget directory. Unzip it you will find the shell scripts for starting or stopping monitor.
    dubbo-registry-simple-2.0.0-assembly.tar.gz in incubator-dubbo-opsdubbo-registry-simple arget directory. Unzip it you will find the shell scripts for starting or stopping registry.

     

    2 然后时健康检测项目,打包,改zookeeperip,解压生成的 target下的 xxx.gz,进入 assembly.bin,运行start.bat即可

    F:programmedubbo-admin-masterdubbo-monitor-simple argetdubbo-monitor-simple-2.0.0assembly.bin

     

    bat启动文件 

    f:
    cd F:programmedubbo-admin-masterdubbo-admin arget
    java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

    f:
    cd F:programmedubbo-admin-masterdubbo-monitor-simple argetdubbo-monitor-simple-2.0.0assembly.bin
    start.bat

    4 自动生成 serializable 方法的配置再idea中

    4 真实的 测试dubbo的例子

    /**
     * 订单服务相关接口
     */
    public interface OrderService {
        
        /**
         * 初始化订单
         * @param userId
         */
        List<User> initOrder(String userId);
    
    }
    
    
    public interface UserService {
    
        /**
         * 获取用户信息
         * @param userId
         * @return
         */
        List<User> getUserList(String userId);
        List<User> getUserAddressList(String userId);
    }
    
    
    user-service-provider
         <dependency>
                <groupId>com.darling.dubboDemo</groupId>
                <artifactId>pub-interfence</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
                <!-- 引入dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.6.2</version>
            </dependency>
            <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>2.12.0</version>
            </dependency>
    
    
    
    package com.provider.userserviceprovider.service;
    
    import com.pubinter.pubinterface.dao.UserService;
    import com.pubinter.pubinterface.pojo.User;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class UserServiceImpl implements UserService {
    
    
        public List<User> getUserAddressList(String userId) {
            List<User> list = new ArrayList();
            list.add(new User(3,"韦德",36,"迈阿密"));
            list.add(new User(23,"詹姆斯",34,"洛杉矶"));
            list.add(new User(24,"科比",39,"洛杉矶"));
            return list;
        }
    
        @Override
        public List<User> getUserList(String userId) {
            return null;
        }
    }
    
    
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
           xmlns="http://www.springframework.org/schema/beans"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    
        <!-- 当前服务的名称 -->
        <dubbo:application name="user-service-provider"/>
    
        <!-- 注册中心的地址 这里注册中心用的是zookeeper -->
        <dubbo:registry protocol="zookeeper" address="148.70.4.44:2181"/>
    
        <!-- 指定通信规则(通信协议?通信端口) -->
        <dubbo:protocol name="dubbo" port="20883"></dubbo:protocol>
    
        <!-- 需要暴露的服务 -->
        <dubbo:service interface="com.pubinter.pubinterface.dao.UserService" ref="userService" version="1.0.0"/>
    
        <!-- 需要暴露的服务的实现类 -->
        <bean id="userService" class="com.provider.userserviceprovider.service.UserServiceImpl"/>
    
        <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
        <dubbo:monitor protocol="registry"></dubbo:monitor>
    
        <!--
            timeout:超时时间配置
            retries:重试次数配置(超时报错后重试连接的次数,不含第一次调用,如果目标服务有多个重试的时候会自动切换别的服务)
         -->
        <dubbo:provider timeout="2000" retries="6"></dubbo:provider>
    </beans>
    
    
    public class TestProviderDemo {
    
        public static void main(String[] args) throws IOException {
            // 加载配置文件
            ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("provider.xml");
            // 容器启动
            applicationContext.start();
            // 使程序阻塞(由于是单元测试,如果程序跑完了我们再dubbo控制台看不到效果)
            System.in.read();
        }
    }
    
    
    不启用spring boot 主类,因为没必要,只启动了这个一个配置文件
    order-service-consumer
    
          <!-- 引入公共接口层的依赖 -->
            <dependency>
                <groupId>com.darling.dubboDemo</groupId>
                <artifactId>pub-interfence</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!-- 引入dubbo -->
            <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.6.2</version>
            </dependency>
            <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端端 -->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>2.12.0</version>
            </dependency>
    
    
        /**
     *   @author 董琳琳
     *   @date 2018/9/14 11:50
     *   @description   订单服务的实现类
     */
    @Service
    public class OrderServiceImpl implements OrderService {
    
        @Autowired
        UserService userService;
    
        /**
         * 初始化订单并调用用户服务的接口
         * @param userId
         * @return
         */
        @Override
        public List<User> initOrder(String userId) {
            return userService.getUserAddressList(userId);
        }
    }
    
    
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
            http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
            http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
        <!-- 开启springmvc的包扫描 -->
        <context:component-scan base-package="com.order.orderserviceconsumer"></context:component-scan>
        <!-- 当前服务的名称 -->
        <dubbo:application name="order-service-consumer"/>
    
        <!-- 注册中心的地址 这里注册中心用的是zookeeper -->
        <dubbo:registry protocol="zookeeper" address="148.70.4.44:2181"/>
    
        <!-- 声明需要调用的远程服务的接口;生成远程服务代理 -->
        <dubbo:reference id="userService" check="false" interface="com.pubinter.pubinterface.dao.UserService" version="*"/>
    
        <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
        <dubbo:monitor protocol="registry"></dubbo:monitor>
    </beans>
    
    user必须实现serializable接口
    
    
    必须要加扫描路径,不然会出错,找不到类
        <context:component-scan base-package="com.darling.order"></context:component-scan>
    
    /**
     *   @author 董琳琳
     *   @date 2018/9/14 15:57
     *   @description 测试服务调用者是否成功从注册中心订阅服务
     */
    public class TestConsumerDemo {
        public static void main(String[] args) throws IOException {
            ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");
            OrderService service = applicationContext.getBean(OrderService.class);
            List<User> list = service.initOrder("1");
            for (User user:list) {
                System.out.println(user.toString());
            }
            System.in.read();
        }
    }
    
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private static final long serialVersionUID = -2844400681715908324L;
        private int age;
        private String name;
        private String address;
        private int number;
        User(){};
        public User(int age,String name,int number,String address){
            this.address=address;
            this.age=age;
            this.number=number;
            this.name=name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public int getNumber() {
            return number;
        }
    
        public void setNumber(int number) {
            this.number = number;
        }
    }

      大概流程是,public 接口,有两个,一个user 类,需要实现serializable接口和 set get方法,第二个项目provider引入公共的刚才的想pub,进行生产者配置,第三个消费者配置,兜售ideal 项目的module方式,

    最终的效果是

    5 dubbo 2.5版本 telnet命令

     

    默认是 22222,可用通过 dubbo.properties修改为
    dubbo.application.qos.port=33333
    或启动时修改
    -Ddubbo.application.qos.port=33333
    安全方面 ,谁都可以访问,可以关闭,这样远程的就不可访问
    dubbo.application.qos.accept.foreign.ip=false

    举例
    telnet localhost 22222
    接口方式访问

    curl "localhost:22222/ls?arg1=xxx&arg2=xxxx"

    常用命令:
    ls 可查看producer和consumer两个角色信息
    online 上线所有的服务,可以正则
    online xxx.com 上线某种服务
    需要下线后重新上线时采用的场景

    下线命令
    offline 和 online 用法一样
    help 查看帮助,这个很简单 telnet 功能,默认系统配置

    -Ddubbo.application.qos.enable=true
    -Ddubbo.application.qos.port=33333
    -Ddubbo.application.qos.accept.foreign.ip=false

    1 docker 使用Dockerfile 构建镜像
    例子 只两行
    FROM nginx
    RUN echo 'abc' > /usr/nginx/index.html

    from指定从nginx作为基础版本
    run 是执行 linux命令


    内容两行

    执行一条命令 构建
    docker build -他nginx:my .

    在当前路径构建,点是当前路径,后面的是名字


    执行一条命令运行
    docker -d -p 11:80

    浏览器打开 xxx:11 结果是自己写的命令输入的内容,所以自己的 镜像构建成功了

    docker 的命令15个太多了

    2 使用maven 插件打包发布程序为新 镜像分三步,1 是 加maven依赖 配置,
    包括了 imagename镜像名 ,包括了 仓库名,镜像名,标签用冒号,2 entrypoint 表示执行的命令
    baseimage 就是 from 基于java的 都是
    同时引入了 resource.resource.include 表示引入了 拷贝xxx.jar
    第二步是 构建,第三步是 运行,就可以查看到了 镜像和容器

     3 然后更加专业的写法,baseimage和  enpoint 都不在pom里,而在 Dockerfile文件里,在 pom只指定一个目录就行了,这样是生产环境专业的写法

     4   最终 自己建立的docker 镜像 会推送到  docker hub中,或者是个人仓库中,

    可以用maven也可以用push命令,push命令还没有用过,下面例子是maven:

    如果是 hub中心则 在maven的server 中配置 id,hub的 用户名,hub的密码

    也可以私有镜像,但需要 baseImage中设置 localhost:5000 xxxxxxxxx

  • 相关阅读:
    精《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #4 如何使用Git
    《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #3 如何编写内核模块
    《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #2 如何编译Linux内核
    《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #1 如何获取Linux内核
    [失败]SystemTap和火焰图(Flame Graph)
    yum安装nagois
    yum安装cacti
    笔记本制作centos qcow2格式文件
    【失败】CentOS 6.5安装VNCserver 并开启远程桌面
    Linux 性能分析的前 60 秒
  • 原文地址:https://www.cnblogs.com/genestart/p/11220099.html
Copyright © 2011-2022 走看看