上篇文章 Dubbo 原理与部署 讲述了 Dubbo 注册中心(ZooKeeper)的搭建,但其中的服务提供者和消费者需要开发者实现,本文详述两者的实现方法。各方部署完毕后,一个基本的微服务架构就完成了。传统上是以 Spring 实现,现在也有 starter 帮助以 SpringBoot 的方式实现。
**作者:**王克锋
出处:https://kefeng.wang/2017/12/12/dubbo-development/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。
创建 Maven 工程(不依赖于任何 Maven 框架),创建后删除 src 目录。
新增服务接口 HelloService.java,服务的提供方和消费方必须使用相同的该接口。
public interface HelloService {
String sayHello(String name);
}
指定刚创建的 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
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
resources/spring.xml,包括应用名称、注册中心(ZooKeeper)的地址、服务提供者协议及其选项、服务提供者的服务及其参数,注意 beans 节点参数 xmlns:dubbo/xsi:schemaLocation 中 dubbo 相关内容。
HelloServiceImpl.java
public class HelloServiceImpl implements HelloService {
public String sayHello(String name) {
return "Hello " + name;
}
}
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
}
}
}
指定刚创建的 dubbo-common,还有ZooKeeper客户端、dubbo(内含 Spring)
resources/log4j.properties
## 与 dubbo-provider 完全相同
resources/spring.xml,包括应用名称、注册中心(ZooKeeper)的地址、服务消费者选项、服务消费者引用的服务的接口,注意 beans 节点参数 xmlns:dubbo/xsi:schemaLocation 中 dubbo 相关内容。
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);
}
}
}
开启了三个节点:localhost:{2181,2182,2183}
运行 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.
运行 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
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