1. 程式人生 > >技術與dubbo之dubbo多協議(解決了舊系統架構和舊微服務架構向新微服務架構過度)

技術與dubbo之dubbo多協議(解決了舊系統架構和舊微服務架構向新微服務架構過度)

前言

進行服務改造,使用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

  1. consumes是資料接收方式
  2. 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 可以看到方法被呼叫。

結語

這個技術方案解決了舊系統架構和舊微服務架構向新微服務架構過度的相容。很大程度上保證了系統的穩