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
暫時膚淺的總結上述三點,以後繼續深入
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章