您的位置:首页 > 编程语言 > Java开发

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

2017-12-15 14:40 726 查看
由于最近接手了一个老的项目,服务的治理采用的是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

暂时肤浅的总结上述三点,以后继续深入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springboot dubbo fein