• Dubbo 提供者与消费者的实现


    上篇文章 Dubbo 原理与部署 讲述了 Dubbo 注册中心(ZooKeeper)的搭建,但其中的服务提供者和消费者需要开发者实现,本文详述两者的实现方法。各方部署完毕后,一个基本的微服务架构就完成了。传统上是以 Spring 实现,现在也有 starter 帮助以 SpringBoot 的方式实现。

    **作者:**王克锋
    出处:https://kefeng.wang/2017/12/12/dubbo-development/
    版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

    1.不基于框架的开发

    1.1 创建父模块 dubbo-demo

    创建 Maven 工程(不依赖于任何 Maven 框架),创建后删除 src 目录。

    1.2 创建子模块 dubbo-common(公共接口)

    新增服务接口 HelloService.java,服务的提供方和消费方必须使用相同的该接口。

    public interface HelloService {
        String sayHello(String name);
    }
    
    • 1
    • 2
    • 3

    1.3 创建子模块 dubbo-provider(服务提供者)

    1.3.1 指定依赖库 pom.xml

    指定刚创建的 dubbo-common,还有ZooKeeper客户端、dubbo(内含 Spring)

        
            
                dubbo-common
                wang.kefeng
                1.0-SNAPSHOT
            
            
                com.101tec
                zkclient
                0.10
            
            
                com.alibaba
                dubbo
                2.6.0
                
                    
                        netty
                        org.jboss.netty
                    
                
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    1.3.2 配置日志(非必须)

    resources/log4j.properties

    log4j.rootLogger=INFO, STDOUT
    log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
    log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
    log4j.appender.STDOUT.layout.ConversionPattern=%d{HH:mm:ss.SSS}  %p  [%F:%L] - %m%n
    
    • 1
    • 2
    • 3
    • 4

    1.3.3 配置 Dubbo

    resources/spring.xml,包括应用名称、注册中心(ZooKeeper)的地址、服务提供者协议及其选项、服务提供者的服务及其参数,注意 beans 节点参数 xmlns:dubbo/xsi:schemaLocation 中 dubbo 相关内容。

    
    
    
        
        
    
        
        
    
        
        
    
        
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    1.3.4 新增服务的实现类(实现 dubbo-common 中接口)

    HelloServiceImpl.java

    public class HelloServiceImpl implements HelloService {
        public String sayHello(String name) {
            return "Hello " + name;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.3.5 启动服务提供者

    DubboProvider.java

    public class DubboProvider {
        public static void main(String[] args) throws IOException {
            try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml")) {
                context.start();
                System.out.println("***** [dubbo-provider] is ready.");
                System.in.read(); // press any key to exit
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.4 创建子模块 dubbo-consumer(服务消费者)

    1.4.1 指定依赖库 pom.xml

    指定刚创建的 dubbo-common,还有ZooKeeper客户端、dubbo(内含 Spring)

    
    
    • 1

    1.4.2 配置日志(非必须)

    resources/log4j.properties

    ## 与 dubbo-provider 完全相同
    
    • 1

    1.4.3 配置 Dubbo

    resources/spring.xml,包括应用名称、注册中心(ZooKeeper)的地址、服务消费者选项、服务消费者引用的服务的接口,注意 beans 节点参数 xmlns:dubbo/xsi:schemaLocation 中 dubbo 相关内容。

    
    
    
        
        
    
        
        
    
        
        
        
    
        
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    1.4.4 启动服务提供者

    DubboConsumer.java

    public class DubboConsumer {
        public static void main(String[] args) {
            try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml")) {
                HelloService helloService = context.getBean("helloService", HelloService.class);
                String result = helloService.sayHello("kefeng.wang");
                System.out.println("***** [dubbo-consumer] done: " + result);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.5 启动

    1.5.1 启动服务注册中心(ZooKeeper)

    开启了三个节点:localhost:{2181,2182,2183}

    1.5.2 启动服务提供者

    运行 dubbo-provider 下的 DubboProvider.java,从日志可看到服务 HelloService 注册到注册中心。

    12:57:38.024 INFO [AbstractRegistry.java:272] - [DUBBO] Register: dubbo://192.168.1.101:20880/wang.kefeng.HelloServiceaccepts=256&anyhost=true&application=dubbo-provider&class=wang.kefeng.HelloServiceImpl&cluster=failover&dubbo=2.6.0&generic=false&interface=wang.kefeng.HelloService&loadbalance=roundrobin&methods=sayHello&pid=10000&revision=1.0&side=provider×tamp=1516510657150&version=1.0, dubbo version: 2.6.0, current host: 127.0.0.1

    12:57:38.320 INFO [AbstractRegistry.java:295] - [DUBBO] Subscribe: provider://192.168.1.101:20880/wang.kefeng.HelloServiceaccepts=256&anyhost=true&application=dubbo-provider&category=configurators&check=false&class=wang.kefeng.HelloServiceImpl&cluster=failover&dubbo=2.6.0&generic=false&interface=wang.kefeng.HelloService&loadbalance=roundrobin&methods=sayHello&pid=10000&revision=1.0&side=provider×tamp=1516510657150&version=1.0, dubbo version: 2.6.0, current host: 127.0.0.1

    * [dubbo-provider] is ready.

    1.5.3 启动服务消费者

    运行 dubbo-consumer 下的 DubboConsumer.java

    12:58:39.977 INFO [AbstractRegistry.java:272] - [DUBBO] Register: consumer://192.168.1.101/wang.kefeng.HelloServiceapplication=dubbo-consumer&category=consumers&check=false&default.check=false&default.loadbalance=roundrobin&dubbo=2.6.0&interface=wang.kefeng.HelloService&methods=sayHello&pid=10116&revision=1.0&side=consumer×tamp=1516510719415&version=1.0, dubbo version: 2.6.0, current host: 192.168.1.101

    12:58:40.320 INFO [AbstractRegistry.java:295] - [DUBBO] Subscribe: consumer://192.168.1.101/wang.kefeng.HelloServiceapplication=dubbo-consumer&category=providers,configurators,routers&default.check=false&default.loadbalance=roundrobin&dubbo=2.6.0&interface=wang.kefeng.HelloService&methods=sayHello&pid=10116&revision=1.0&side=consumer×tamp=1516510719415&version=1.0, dubbo version: 2.6.0, current host: 192.168.1.101

    * [dubbo-consumer] done: Hello kefeng.wang

    2.基于 SpringBoot 开发

    spring-boot-start-dubbo,以 spring boot 的方式接入 dubbo,使得 dubbo 更容易地使用。与原生 dubbo 一样,推荐使用 zookeeper 作为注册中心。

    官网: https://gitee.com/reger/spring-boot-starter-dubbo
    文档很全面,内容包括示例、SpringBoot形式的配置参数项(包括注册中心、监控中心、服务提供者、服务消费者、应用等),文档很完整,这里不再重复。

    Maven 依赖(最新版本号查看 这里):

    
        com.gitee.reger
        spring-boot-starter-dubbo
        1.0.10
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    初识Java(二)
    腾讯待办是不是停了?能准时提醒待办事项的APP
    pytest测试框架+allure
    SpringBoot访问静态资源报404——记录一次调试过程与解决方案
    Android——Gradle插件项目根目录settings.gradle和build.gradle
    [创业-33]:股权、期权、期股的区别
    MySQL表结构设计规范
    orm查询优化
    【学习草稿】bert文本分类
    绝了,没有程序员追不到的女友?
  • 原文地址:https://blog.csdn.net/m0_67401270/article/details/126327776