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

前言

進行服務改造,使用dubbo做爲soa解決方案。現有的服務使用dubbo,而之前的服務有直接用http或者spring cloud調用的,要保證改造完成的服務與未改造的服務均可以正常的調用。一樣不想留下太多的技術債務,去掉無效依賴。java

解決方案

提供dubbo自定義傳輸協議dubbo,同時提供dubbo的restapi協議。spring

步驟

pom

服務提供者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

  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不會默認提供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 能夠看到方法被調用。

結語

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

相關文章
相關標籤/搜索