技術與dubbo之dubbo多協議(解決了舊系統架構和舊微服務架構向新微服務架構過度)
阿新 • • 發佈:2019-04-25
前言
進行服務改造,使用dubbo作為soa解決方案。現有的服務使用dubbo,而以前的服務有直接用http或者spring cloud呼叫的,要保證改造完成的服務與未改造的服務都可以正常的呼叫。同樣不想留下太多的技術債務,去掉無效依賴。
解決方案
提供dubbo自定義傳輸協議dubbo,同時提供dubbo的restapi協議。
步驟
pom
服務提供者
<dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-rpc-rest</artifactId> <version>2.6.5</version> </dependency> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> </dependency>
api子模組
作用域設為provided,因為dubbo-rpc-rest依賴裡面已經內建了javax.ws.rs-api 作用域設為provided,因為dubbo-rpc-rest依賴裡面已經內建了javax.ws.rs-api 作用域設為provided,因為dubbo-rpc-rest依賴裡面已經內建了javax.ws.rs-api
<dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.1.1</version> <scope>provided</scope> </dependency>
springboot啟動配置
spring:
application:
name: xxxxxxxx
dubbo:
server: true
registry: zookeeper://127.0.0.1:2181
consumer:
timeout: 60000
protocols:
- name: dubbo
- name: rest
port: 8888
server: tomcat
contextpath: server
server類操作
一定要注意@Consumes與@Produces
- consumes是資料接收方式
- produces是資料返回方式
@Path("user")
@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})
public interface UserService {
@GET
@Path("get")
void get();
}
注意:Service一定要加上protocol= {"dubbo","rest"},當提供多協議的時候,dubbo不會預設提供
所有的提供。
@Service(interfaceClass = UserService.class , protocol= {"dubbo","rest"})
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
public void get(){
}
}
執行,直接在瀏覽器裡面http://127.0.0.1:8888/server/users/get 可以看到方法被呼叫。
結語
這個技術方案解決了舊系統架構和舊微服務架構向新微服務架構過度的相容。很大程度上保證了系統的穩