進行服務改造,使用dubbo做爲soa解決方案。現有的服務使用dubbo,而之前的服務有直接用http或者spring cloud調用的,要保證改造完成的服務與未改造的服務均可以正常的調用。一樣不想留下太多的技術債務,去掉無效依賴。java
提供dubbo自定義傳輸協議dubbo,同時提供dubbo的restapi協議。spring
服務提供者api
<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-apitomcat
<dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.1.1</version> <scope>provided</scope> </dependency>
springboot啓動配置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與@Producesapp
@Path("user") @Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML}) public interface UserService { @GET @Path("get") void get(); }
注意:Service必定要加上protocol= {"dubbo","rest"},當提供多協議的時候,dubbo不會默認提供ide
全部的提供。spring-boot
@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 能夠看到方法被調用。
這個技術方案解決了舊系統架構和舊微服務架構向新微服務架構過分的兼容。很大程度上保證了系統的穩定性,