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.3 创建子模块 dubbo-provider(服务提供者)

1.3.1 指定依赖库 pom.xml

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

    <dependencies>
        <dependency>
            <artifactId>dubbo-common</artifactId>
            <groupId>wang.kefeng</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <dependency><!-- containts Spring 4.3.10.RELEASE -->
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.0</version><!-- 2018-01-07 -->
            <exclusions>
                <exclusion>
                    <artifactId>netty</artifactId>
                    <groupId>org.jboss.netty</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
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.3.3 配置 Dubbo

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

<?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://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 当前应用名称,显示于注册中心 -->
    <dubbo:application name="dubbo-provider"/>

    <!-- 服务注册中心(可定义多条) -->
    <dubbo:registry address="zookeeper://localhost:2181?backup=localhost:2182,localhost:2183"/>

    <!-- 服务提供者协议(dubbo,rmi,http,redis/...)及其端口,最大连接数 -->
    <dubbo:protocol name="dubbo" port="20880" accepts="256"/>

    <!-- 服务接口及其实现、负载均衡策略为(random, roundrobin, leastactive)、容错策略、版本号(保证接口一致) -->
    <dubbo:service interface="wang.kefeng.HelloService" class="wang.kefeng.HelloServiceImpl" loadbalance="roundrobin" cluster="failover" version="1.0"/>

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

HelloServiceImpl.java

public class HelloServiceImpl implements HelloService {
    public String sayHello(String name) {
        return "Hello " + name;
    }
}
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.4 创建子模块 dubbo-consumer(服务消费者)

1.4.1 指定依赖库 pom.xml

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

<!-- 与 dubbo-provider 完全相同 -->
1.4.2 配置日志(非必须)

resources/log4j.properties

## 与 dubbo-provider 完全相同
1.4.3 配置 Dubbo

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

<?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://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!-- 当前应用名称,显示于注册中心 -->
    <dubbo:application name="dubbo-consumer"/>

    <!-- 服务注册中心(可定义多条),不存在时不报错 -->
    <dubbo:registry address="zookeeper://localhost:2181?backup=localhost:2182,localhost:2183" check="false"/>

    <!-- http://dubbo.io/books/dubbo-user-book/references/xml/dubbo-consumer.html -->
    <!-- 设置 dubbo:reference 的缺省配置: 负载均衡策略为(random, roundrobin, leastactive),启动时不检查 -->
    <dubbo:consumer loadbalance="roundrobin" check="false"/>

    <!-- 服务接口及其 beanId、版本号(保证接口一致) -->
    <dubbo:reference id="helloService" interface="wang.kefeng.HelloService" version="1.0"/>

</beans>
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.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.HelloService?accepts=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&timestamp=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.HelloService?accepts=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&timestamp=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.HelloService?application=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&timestamp=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.HelloService?application=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&timestamp=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 依赖(最新版本号查看 这里):

<dependency>
    <groupId>com.gitee.reger</groupId>
    <artifactId>spring-boot-starter-dubbo</artifactId>
    <version>1.0.10</version>
</dependency>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dubbo 是一种分布式服务框架,它可以帮助开发者快速构建分布式应用,提供了服务的注册,发现,调用等功能。下面是 Dubbo 消费者提供者的配置。 ## Dubbo 提供者的配置 Dubbo 提供者需要在服务启动的时候注册到注册中心,以供消费者发现和调用。Dubbo 提供者的配置,可以通过 XML 或者注解的方式进行配置。下面是 Dubbo 提供者的 XML 配置示例: ```xml <dubbo:application name="provider" /> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:service interface="com.example.service.UserService" ref="userService" /> ``` - `dubbo:application`: 配置 Dubbo 应用的名称,用于在注册中心进行标识。 - `dubbo:registry`: 配置注册中心的地址,这里使用了 ZooKeeper 作为注册中心,地址为 `zookeeper://127.0.0.1:2181`。 - `dubbo:protocol`: 配置 Dubbo 的协议和端口号,这里使用了 Dubbo 协议,端口号为 `20880`。 - `dubbo:service`: 配置服务的接口和实现类,`interface` 属性指定了服务的接口,`ref` 属性指定了服务的实现类。可以通过 `timeout`、`loadbalance` 等属性设置服务调用的超时时间和负载均衡策略等。 ## Dubbo 消费者的配置 Dubbo 消费者需要从注册中心获取提供者的地址,通过接口调用提供者的服务。Dubbo 消费者的配置,同样可以通过 XML 或者注解的方式进行配置。下面是 Dubbo 消费者的 XML 配置示例: ```xml <dubbo:application name="consumer" /> <dubbo:registry address="zookeeper://127.0.0.1:2181" /> <dubbo:reference id="userService" interface="com.example.service.UserService" /> ``` - `dubbo:application`: 配置 Dubbo 应用的名称,用于在注册中心进行标识。 - `dubbo:registry`: 配置注册中心的地址,这里使用了 ZooKeeper 作为注册中心,地址为 `zookeeper://127.0.0.1:2181`。 - `dubbo:reference`: 配置接口的引用,`id` 属性指定了引用的名称,`interface` 属性指定了要引用的接口。可以通过 `check`、`retries` 等属性设置服务的健康检查和重试次数等。 以上是 Dubbo 消费者提供者的基本配置,可以根据自己的需求进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值