springboot dubbo的整合以及与springcloud fein的对比

由于最近接手了一个老的项目,服务的治理采用的是dubbo的方式,趁着中午空闲的时间,将springboot和dubbo做了一个整合,整合的过程中发现dubbo的方式和fein的方式有些相似,所以也在这里一起拿出来记录一下。首先说一下整合,基本的架构就是ZK+dubbo服务提供,ZK+dubbo服务消费,ZK的安装就不在这里说了,先看一下dubbo服务提供端的pom文件:
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.3.6.RELEASE</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>io.dubbo.springboot</groupId>
			<artifactId>spring-boot-starter-dubbo</artifactId>
			<version>1.0.0</version>
		</dependency>
	</dependencies>
spring-boot-starter-dubbo这个jar是一个开源的项目对dubbo做了整合,有兴趣的同学可以在这里看源码,这个项目有1800多个star,阿里官方在GitHub也有dubbo和springcloud的整合,不过只有300多个star,我用的是前边的jar。配置文件如下:
#应用名称
spring.dubbo.application.name=provider
#注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#协议名称
spring.dubbo.protocol.name=dubbo
#协议端口
spring.dubbo.protocol.port=20880
#服务类包目录
spring.dubbo.scan=com.springcloud.learn.dubbo
服务的实现类,需要添加一个额外的Service标识服务,继承的接口内容也很简单就是一个方法
@Service(version = "1.0.0")
public class ServiceDubboImpl implements ServiceDubbo {
    @Override
    public String returnFlag() {
        return "来自dubbo的服务返回的数据!";
    }
}
至此springboot+dubbo的服务端提供的内容到此为止了,启动的时候可以看到以下日志,说明服务已经注册在zk上了
2017-12-15 12:47:00.475  WARN 9548 --- [ver worker #1-1] c.a.d.remoting.transport.AbstractServer  :  [DUBBO] All clients has discontected from /10.75.134.178:20880. You can graceful shutdown now., dubbo version: 2.5.3, current host: 127.0.0.1
2017-12-15 12:47:00.479  INFO 9548 --- [:20880-thread-4] c.a.d.rpc.protocol.dubbo.DubboProtocol   :  [DUBBO] disconected from /10.75.134.178:55541,url:dubbo://10.75.134.178:20880/com.springcloud.learn.dubbo.service.ServiceDubbo?anyhost=true&application=provider&channel.readonly.sent=true&codec=dubbo&dubbo=2.5.3&heartbeat=60000&interface=com.springcloud.learn.dubbo.service.ServiceDubbo&methods=returnFlag&pid=9548&revision=1.0.0&side=provider×tamp=1513312058396&version=1.0.0, dubbo version: 2.5.3, current host: 127.0.0.1
dubbo的服务消费端,需要添加相同的jar包,配置文件的内容,有少许差别,如下:
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.springcloud.learn.dubbo
这里有一点需要注意的是,spring.dubbo.scan需要扫描的包和服务提供端要保持一致,这就要求在消费端定义对应的接口的时候也要保持一致,这块最好的方式是将dubbo需要提供的服务以jar包的方式引入到消费端的服务中去,这一点和fein的方式是有很大不同的,fein没有对包名做这么强的限制。调用使用的Java类如下:
@RestController
public class DubboController {

    @Reference(version = "1.0.0")
    ServiceDubbo serviceDubbo;

    @RequestMapping(value = "/use", method = RequestMethod.GET)
    public String dc() {
        return serviceDubbo.returnFlag();
    }
}
在使用服务的时候需要添加@Reference(version = "1.0.0")注解,这样就可以在消费端启动消费了。
下边重点说一下和fein的方式的对比。
第一、从表面上看,zk+dubbo的方式,类似于springcloud consul + fein的方式,但是比eruka+fein的方式要复杂一些,毕竟还要单独安装zk,zk和consul都需要安装,fein和dubbo都是接口的方式调用
第二、fein对服务提供的包名没有严格限制
第三、dubbo基于RPC,而fein基于ribbon,ribbon基于http
暂时肤浅的总结上述三点,以后继续深入
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章