springcloud-alibaba整合dubbo


記一次springcloud-alibaba框架下整合spring-cloud-starter-dubbo

現狀: 現在微服務之間的相互調用使用feign

接口都需要注解@FeignClient,例:@FeignClient(contextId = "sysRoleMenuService", value = FeignConstants.UserClient, fallbackFactory = SysRoleMenuServiceFallBack.class)

在原框架基礎上集成dubbo

一、提供api接口

public interface TestService {
    String test(String name);
}

二、服務提供者

1.引入相關的pom配置

<!-- Dubbo Spring Cloud Starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

 

2.dubbo相關配置

dubbo:
  scan:
    base-packages: com.cloud.rapid.user.service.api.dubbo
  protocol:    #Dubbo 服務暴露的協議配置,其中子屬性 name 為協議名稱,port 為協議端口( -1 表示自增端口,從 20880 開始)
    name: dubbo
    port: -1  #dubbo協議缺省端口為20880,rmi協議缺省端口為1099,http和hessian協議缺省端口為80;如果沒有配置port,則自動采用默認端口,如果配置為-1,則會分配一個沒有被占用的端口。Dubbo 2.4.0+,分配的端口在協議缺省端口的基礎上增長,確保端口段可控
  registry:
    #dubbo服務注冊端口,注冊中心服務器地址,如果地址沒有端口缺省為9090,同一集群內的多個地址用逗號分隔,如:ip:port,ip:port
    #其中前綴spring-cloud說明:掛載到 Spring Cloud注冊中心
    address: spring-cloud://119.3.107.157:8848
    # address: spring-cloud://localhost
    #check: false  #關閉注冊中心是否啟動的相關檢查,false表示不檢查注冊中心是否啟動,就不會報錯
#  cloud:
#    subscribed-services: dubbo-product
  provider:
    timeout: 10000

 

3.啟動類加上@EnableDubbo注解

@EnableShardingJdbc
@EnableDiscoveryClient
@SpringBootApplication
@EnableDubbo
public class RapidUserServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(RapidUserServiceApplication.class, args);
    }
}

4.實現api接口

package com.cloud.rapid.user.service.impl.dubbo;

import com.cloud.rapid.user.service.api.dubbo.TestService;
import org.apache.dubbo.config.annotation.Service;
import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;

// 注意該serveice為dubbo的注解,不是framework的,引入應該為import org.apache.dubbo.config.annotation.Service;
@Service
public class TestServiceImpl implements TestService {
    @Override
    public String test(String name) {
        return "hello " + name;
    }
}

三、服務消費者

1.引入相關的pom配置

<!-- Dubbo Spring Cloud Starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

 

2.dubbo相關配置

dubbo:
  consumer:
    timeout: 5000
    check: false  #關閉訂閱服務是否啟動的檢查【檢查時,沒有服務提供者會報錯】
  protocol:    #Dubbo 服務暴露的協議配置,其中子屬性 name 為協議名稱,port 為協議端口( -1 表示自增端口,從 20880 開始)
    name: dubbo
    port: -1  #dubbo協議缺省端口為20880,rmi協議缺省端口為1099,http和hessian協議缺省端口為80;如果沒有配置port,則自動采用默認端口,如果配置為-1,則會分配一個沒有被占用的端口。Dubbo 2.4.0+,分配的端口在協議缺省端口的基礎上增長,確保端口段可控
  registry:
    #其中前綴spring-cloud說明:掛載到 Spring Cloud注冊中心
    address: spring-cloud://119.3.107.157:8848
    # address: spring-cloud://localhost  #dubbo服務注冊端口,注冊中心服務器地址,如果地址沒有端口缺省為9090,同一集群內的多個地址用逗號分隔,如:ip:port,ip:port
  cloud:
    subscribed-services: rapid-user-service

 

3.調用api接口,實現dubbo

package com.cloud.rapid.company.web.controller.dubbo;

import com.cloud.rapid.common.security.annotation.Inner;
import com.cloud.rapid.user.service.api.dubbo.TestService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {

    @Reference
    private TestService testService;

    @Inner
    @PostMapping("/cjq")
    public String test() {
        String str = testService.test("cjq");
        log.info("str:{}", str);
        return str;
    }
}

四、備注

1.dubbo中在消費方和服務方都配置超時時間timeout的情況,會以消費方(controller)的設置的timeout時間為准。

2.dubbo和feign的區別: 

相同點:Dubbo 與 Feign 都依賴注冊中心、負載均衡。

不同點:

1、協議

Dubbo:

支持多傳輸協議(Dubbo、Rmi、http、redis等等),可以根據業務場景選擇最佳的方式。非常靈活。
默認的Dubbo協議:利用Netty,TCP傳輸,單一、異步、長連接,適合數據量小、高並發和服務提供者遠遠少於消費者的場景。
Feign:

基於Http傳輸協議,短連接,不適合高並發的訪問。

2、負載均衡

Dubbo:

支持4種算法(隨機、輪詢、活躍度、Hash一致性),而且算法里面引入權重的概念。
配置的形式不僅支持代碼配置,還支持Dubbo控制台靈活動態配置。
負載均衡的算法可以精准到某個服務接口的某個方法。
Feign:

只支持N種策略:輪詢、隨機、ResponseTime加權。
負載均衡算法是Client級別的。
3、容錯策略

Dubbo:

支持多種容錯策略:failover、failfast、brodecast、forking等,也引入了retry次數、timeout等配置參數。

Feign:

利用熔斷機制來實現容錯的,處理的方式不一樣。

比較項 Feign(RESTful) Dubbo
通訊協議 HTTP 默認Dubbo協議
性能 略低 較高
靈活度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM