Spring Cloud Finchley.SR1 的學習與應用 7 - 服務容錯保護 Hystrix

Hystrix

分佈式系統中常常會出現某個基礎服務不可用形成整個系統不可用的狀況,這種現象被稱爲服務雪崩效應。爲了應對服務雪崩,一種常見的作法是手動服務降級。而 Hystrix 的出現,給咱們提供了另外一種選擇。java

服務雪崩效應

在微服務架構中, 咱們將系統拆分紅了不少服務單元, 各單元的應用間經過服務註冊 與訂閱的方式互相依賴。 因爲每一個單元都在不一樣的進程中運行,依賴經過遠程調用的方式 執行, 這樣就有可能由於網絡緣由或是依賴服務自身間題出現調用故障或延遲, 而這些問 題會直接致使調用方的對外服務也出現延遲, 若此時調用方的請求不斷增長, 最後就會因 等待出現故障的依賴方響應造成任務積壓, 最終致使自身服務的癱瘓。 舉個例子, 在一個電商網站中, 咱們可能會將系統拆分紅用戶、 訂單、 庫存、 積分、 評論等一系列服務單元。 用戶建立一個訂單的時候, 客戶端將調用訂單服務的建立訂單接 口,此時建立訂單接口又會向庫存服務來請求出貨(判斷是否有足夠庫存來出貨)。 此時若 庫存服務因自身處理邏輯等緣由形成響應緩慢, 會直接致使建立訂單服務的線程被掛起, 以等待庫存申請服務的響應, 在漫長的等待以後用戶會由於請求庫存失敗而獲得建立訂單 失敗的結果。 若是在高併發狀況之下,因這些掛起的線程在等待庫存服務的響應而未能釋 放, 使得後續到來的建立訂單請求被阻塞, 最終致使訂單服務也不可用。即雪崩效應。web

定義

服務雪崩效應是一種因 服務提供者 的不可用致使 服務調用者 的不可用,並將不可用 逐漸放大 的過程。spring

造成的緣由

服務雪崩產生的過程分爲如下三個階段來分析造成的緣由:express

  • 服務提供者不可用
  • 重試加大流量
  • 服務調用者不可用

服務雪崩的每一個階段均可能由不一樣的緣由形成,好比形成 服務不可用 的緣由有:apache

  • 硬件故障
  • 程序 Bug
  • 緩存擊穿
  • 用戶大量請求
  • 等等

而造成 重試加大流量 的緣由有:json

  • 用戶重試
  • 代碼邏輯重試
  • 等等

服務調用者不可用 產生的主要緣由有:後端

  • 同步等待形成的資源耗盡
  • 等等

應對策略

針對形成服務雪崩的不一樣緣由,可使用不一樣的應對策略:瀏覽器

  • 流量控制
  • 改進緩存模式
  • 服務自動擴容
  • 服務調用者降級服務
  • 等等

流量控制 的具體措施包括:緩存

  • 網關限流
  • 用戶交互限流
  • 關閉重試
  • 等等
    由於 Nginx 的高性能,目前一線互聯網公司大量採用 Nginx+Lua 的網關進行流量控制,由此而來的 OpenResty 也愈來愈熱門。
    用戶交互限流的具體措施有: 1. 採用加載動畫,提升用戶的忍耐等待時間。2. 提交按鈕添增強制等待時間機制。

改進緩存模式 的措施包括:服務器

  • 緩存預加載
  • 同步改成異步刷新

服務調用者降級服務 的措施包括:

  • 資源隔離
  • 對依賴服務進行分類
  • 不可用服務的調用快速失敗
    資源隔離主要是對調用服務的線程池進行隔離。

咱們根據具體業務,將依賴服務分爲: 強依賴和若依賴。強依賴服務不可用會致使當前業務停止,而弱依賴服務的不可用不會致使當前業務的停止。

不可用服務的調用快速失敗通常經過 超時機制, 熔斷器 和熔斷後的 降級方法 來實現。

使用 Hystrix 預防服務雪崩

服務降級(Fallback)

對於查詢操做,咱們能夠實現一個 fallback 方法,當請求後端服務出現異常的時候,可使用 fallback 方法返回的值。fallback 方法的返回值通常是設置的默認值或者來自緩存。

資源隔離

在 Hystrix 中,主要經過線程池來實現資源隔離。一般在使用的時候咱們會根據調用的遠程服務劃分出多個線程池。例如調用產品服務的 Command 放入 A 線程池,調用帳戶服務的 Command 放入 B 線程池。這樣作的主要優勢是運行環境被隔離開了。這樣就算調用服務的代碼存在 bug 或者因爲其餘緣由致使本身所在線程池被耗盡時,不會對系統的其餘服務形成影響。 經過實現對依賴服務的線程池隔離, 能夠帶來以下優點:

  • 應用自身獲得徹底保護, 不會受不可控的依賴服務影響。 即使給依賴服務分配的線 程池被填滿, 也不會影響應用自身的其他部分。
  • 能夠有效下降接入新服務的風險。 若是新服務接入後運行不穩定或存在問題, 徹底 不會影響應用其餘的請求。
  • 當依賴的服務從失效恢復正常後, 它的線程池會被清理而且可以立刻恢復健康的服 務, 相比之下, 容器級別的清理恢復速度要慢得多。
  • 當依賴的服務出現配置錯誤的時候, 線程池會快速反映出此問題(經過失敗次數、 延遲、超時、拒絕等指標的增長狀況)。 同時, 咱們能夠在不影響應用功能的狀況下 經過實時的動態屬性刷新(後續會經過Spring Cloud Config與Spring Cloud Bus的 聯合使用來介紹) 來處理它。
  • 當依賴的服務因實現機制調整等緣由形成其性能出現很大變化的時候, 線程池的監 控指標信息會反映出這樣的變化。 同時, 咱們也能夠經過實時動態刷新自身應用對 依賴服務的闕值進行調整以適應依賴方的改變。
  • 除了上面經過線程池隔離服務發揮的優勢以外, 每一個專有線程池都提供了內置的並 發實現, 能夠利用它爲同步的依賴服務構建異步訪問。
    總之, 經過對依賴服務實現線程池隔離, 可以讓咱們的應用更加健壯, 不會由於個別依 賴服務出現問題而引發非相關服務的異常。 同時, 也使得咱們的應用變得更加靈活, 能夠 在不中止服務的狀況下, 配合動態配置刷新實現性能配置上的調整。
    雖然線程池隔離的方案帶了如此多的好處,可是不少使用者可能會擔憂爲每個依賴服務都分配一個線程池是否會過多地增長系統的負載和開銷。對於這一點,使用者不用過於擔憂,由於這些顧慮也是大部分工程師們會考慮到的,Netflix 在設計 Hystrix 的時候,認爲線程池上的開銷相對於隔離所帶來的好處是沒法比擬的。同時,Netflix 也針對線程池的開銷作了相關的測試,以證實和打消 Hystrix 實現對性能影響的顧慮。

Hystrix 中除了使用線程池以外,還可使用信號量來控制單個依賴服務的併發度,信號量的開銷要遠比線程池的開銷小得多,可是它不能設置超時和實現異步訪問。因此,只有在依賴服務是足夠可靠的狀況下才使用信號量。在 HystrixCommand 和 HystrixObservableCommand 中 2 處支持信號量的使用:

  • 命令執行:若是隔離策略參數 execution.isolation.strategy 設置爲 SEMAPHORE,Hystrix 會使用信號量替代線程池來控制依賴服務的併發控制。
  • 降級邏輯:當 Hystrix 嘗試降級邏輯時候,它會在調用線程中使用信號量。

信號量的默認值爲 10,咱們也能夠經過動態刷新配置的方式來控制併發線程的數量。對於信號量大小的估算方法與線程池併發度的估算相似。僅訪問內存數據的請求通常耗時在 1ms 之內,性能能夠達到 5000rps,這樣級別的請求咱們能夠將信號量設置爲 1 或者 2,咱們能夠按此標準並根據實際請求耗時來設置信號量。

斷路器模式

在分佈式架構中,斷路器模式的做用也是相似的,當某個服務單元發生故障(相似用電器發生短路)以後,經過斷路器的故障監控(相似熔斷保險絲),直接切斷原來的主邏輯調用。可是,在 Hystrix 中的斷路器除了切斷主邏輯的功能以外,還有更復雜的邏輯,下面咱們來看看它更爲深層次的處理邏輯。 斷路器開關相互轉換的邏輯以下圖: Hystrix斷路器開關相互轉換的邏輯
當 Hystrix Command 請求後端服務失敗數量超過必定閾值,斷路器會切換到開路狀態 (Open)。這時全部請求會直接失敗而不會發送到後端服務。

這個閾值涉及到三個重要參數:快照時間窗、請求總數下限、錯誤百分比下限。這個參數的做用分別是: 快照時間窗:斷路器肯定是否打開須要統計一些請求和錯誤數據,而統計的時間範圍就是快照時間窗,默認爲最近的 10 秒。 請求總數下限:在快照時間窗內,必須知足請求總數下限纔有資格進行熔斷。默認爲 20,意味着在 10 秒內,若是該 Hystrix Command 的調用此時不足 20 次,即時全部的請求都超時或其餘緣由失敗,斷路器都不會打開。 錯誤百分比下限:當請求總數在快照時間窗內超過了下限,好比發生了 30 次調用,若是在這 30 次調用中,有 16 次發生了超時異常,也就是超過 50% 的錯誤百分比,在默認設定 50% 下限狀況下,這時候就會將斷路器打開。

斷路器保持在開路狀態一段時間後 (默認 5 秒),自動切換到半開路狀態 (HALF-OPEN)。這時會判斷下一次請求的返回狀況,若是請求成功,斷路器切回閉路狀態 (CLOSED),不然從新切換到開路狀態 (OPEN)。

使用詳解

使用 Feign Hystrix

由於熔斷只是做用在服務調用這一端,所以咱們根據上一篇的示例代碼只須要改動 server-businessb-woqu 項目相關代碼就能夠。

  • 配置文件
    在原來的 application.yml 配置的基礎上加入
feign:
  hystrix:
    enabled: true
  • 建立回調類
/**
 * @author orrin
 */
@Component(value = "additionHystrix")
public class AdditionHystrix implements Addition {
    private static final Logger LOGGER = LoggerFactory.getLogger(AdditionHystrix.class);

    @Override
    public Integer add(int x, int y) {
        LOGGER.error(" Addition is disabled ");
        return 0;
    }
}
  • 添加 fallback 屬性
    添加指定 fallback 類,在服務熔斷的時候返回 fallback 類中的內容
@FeignClient(serviceId = "business-a-woqu", fallback = AdditionHystrix.class)
public interface Addition {

    @GetMapping("/add")
    public Integer add(@RequestParam("x") int x, @RequestParam("y") int y);
}
  • 測試
    啓動consul server, server-businessb-woqu,進行訪問驗證
GET http://192.168.2.102:9002/area?length=1&width=2&heigh=3

HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 19 Nov 2018 07:39:24 GMT

0

Response code: 200; Time: 80ms; Content length: 1 bytes

其餘特性

Hystrix還有如下使用方式:

  • 異常傳播
  • 命令名稱、 分組以及線程池劃分
  • 請求緩存
  • 請求合併 這些屬於高階用法,這裏不作詳細說明。

Hystrix儀表盤

咱們提到斷路器是根據一段時間窗內的請求狀況來判斷並操做斷路器的打開和關閉狀態的。而這些請求狀況的指標信息都是 HystrixCommand 和 HystrixObservableCommand 實例在執行過程當中記錄的重要度量信息,它們除了 Hystrix 斷路器實現中使用以外,對於系統運維也有很是大的幫助。這些指標信息會以 「滾動時間窗」 與 「桶」 結合的方式進行彙總,並在內存中駐留一段時間,以供內部或外部進行查詢使用,Hystrix Dashboard 就是這些指標內容的消費者之一。
下面咱們基於以前的示例來結合 Hystrix Dashboard 實現 Hystrix 指標數據的可視化面板,這裏咱們將用到下以前實現的幾個應用,包括:

  • gateway-woqu:網關
  • server-businessa-woqu:服務提供者
  • server-businessb-woqu:服務消費者
  • consul-server:服務註冊中心

建立 Hystrix Dashboard

建立一個標準的 Spring Boot 工程,命名爲:hystrix-dashboard-woqu

  • POM 配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>common-server-woqu</artifactId>
        <groupId>com.orrin</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>hystrix-dashboard-woqu</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>

    </dependencies>


</project>
  • 啓動類
    在 Spring Boot 的啓動類上面引入註解@EnableHystrixDashboard,啓用 Hystrix Dashboard 功能。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

/**
 * @author orrin
 */
@EnableHystrixDashboard
@SpringBootApplication
public class HystrixDashboardApplication {
    public static void main(String[] args) {
        SpringApplication.run(HystrixDashboardApplication.class, args);
    }
}
  • 配置文件 配置文件 application.yml
spring:
  application:
    name: hystrix-dashboard-woqu
server:
  port: 7002

啓動應用,而後再瀏覽器中輸入 http://localhost:7002/hystrix 能夠看到以下界面: Hystrix Dashboard

經過 Hystrix Dashboard 主頁面的文字介紹,咱們能夠知道,Hystrix Dashboard 共支持三種不一樣的監控方式:

前二者都對集羣的監控,須要整合 Turbine 才能實現。這一部分咱們先實現對單體應用的監控,這裏的單體應用就用咱們以前使用 Feign 和 Hystrix 實現的服務消費者——server-businessb-woqu。

爲服務實例添加 endpoint

既然 Hystrix Dashboard 監控單實例節點須要經過訪問實例的/actuator/hystrix.stream接口來實現,天然咱們須要爲服務實例添加這個 endpoint。

  • POM 配置
    在服務實例pom.xml中的dependencies節點中新增spring-boot-starter-actuator監控模塊以開啓監控相關的端點,並確保已經引入斷路器的依賴spring-cloud-starter-netflix-hystrix
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
  • 啓動類
    爲啓動類添加@EnableCircuitBreaker或@EnableHystrix註解,開啓斷路器功能。
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.woqu")
@EnableHystrix
@ComponentScan(value = "com.woqu")
public class BusinessBApp {
    public static void main(String[] args) {
        SpringApplication.run(BusinessBApp.class, args);
    }

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}
  • 配置文件
    在配置文件 application.yml 中添加
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream

界面解讀

Hystrix Dashboard
以上圖來講明其中各元素的具體含義:

  • 實心圓:它有顏色和大小之分,分別表明實例的監控程度和流量大小。如上圖所示,它的健康度從綠色、黃色、橙色、紅色遞減。經過該實心圓的展現,咱們就能夠在大量的實例中快速的發現故障實例和高壓力實例。
  • 曲線:用來記錄 2 分鐘內流量的相對變化,咱們能夠經過它來觀察到流量的上升和降低趨勢。
  • 其餘一些數量指標以下圖所示
    Hystrix Dashboard

Hystrix 監控數據聚合 Turbine

經過 HTTP 收集聚合

建立一個標準的 Spring Boot 工程,命名爲:turbine-woqu。

  • POM 配置
    pom.xml 文件以下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>common-server-woqu</artifactId>
        <groupId>com.orrin</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>turbine-woqu</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-netflix-turbine</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.jolokia</groupId>
            <artifactId>jolokia-core</artifactId>
        </dependency>

    </dependencies>

</project>
  • 啓動類
package com.woqu.common.turbine;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

/**
 * @author orrin
 */
@EnableTurbine
@EnableDiscoveryClient
@SpringBootApplication
public class TurbineApplication {
    public static void main(String[] args) {
        SpringApplication.run(TurbineApplication.class, args);
    }
}
  • 配置文件
    在 application.yml 加入 Consul 和 Turbine 的相關配置
spring:
  application:
    name: common-server-turbine

  cloud:
    consul:
      host: woqu.consul
      port: 8500
      discovery:
        instance-id: ${spring.application.name}
        instance-group: ${spring.application.name}
        register: true
        service-name: ${spring.application.name}

applications: common-server-gateway,business-b-woqu,business-a-woqu
turbine:
  aggregator:
    cluster-config: ${applications}
  app-config: ${applications}
  #cluster-name-expression: new String("default")
  combine-host-port: true


management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: dev

server:
  port: 7003

參數說明

  • turbine.app-config參數指定了須要收集監控信息的服務名;
  • turbine.cluster-name-expression 參數指定了集羣名稱爲 default,當咱們服務數量很是多的時候,能夠啓動多個 Turbine 服務來構建不一樣的聚合集羣,而該參數能夠用來區分這些不一樣的聚合集羣,同時該參數值能夠在 Hystrix 儀表盤中用來定位不一樣的聚合集羣,只須要在 Hystrix Stream 的 URL 中經過 cluster 參數來指定;
  • turbine.combine-host-port參數設置爲true,可讓同一主機上的服務經過主機名與端口號的組合來進行區分,默認狀況下會以 host 來區分不一樣的服務,這會使得在本地調試的時候,本機上的不一樣服務聚合成一個服務來統計。

注意:new String("default")這個必定要用 String 來包一下,不然啓動的時候會拋出異常。

  • 測試 在完成了上面的內容構建以後,咱們來體驗一下 Turbine 對集羣的監控能力。分別啓動:
  1. consul-server
  2. gateway-woqu
  3. hystrix-dashboard-woqu
  4. turbine-woqu
  5. server-businessa-woqu
  6. server-businessb-woqu

在瀏覽器中訪問http://localhost:7002/hystrix,經過/clusters獲取能夠監控的集羣

GET http://127.0.0.1:7003/clusters

HTTP/1.1 200 
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 20 Nov 2018 05:47:18 GMT

[
  {
    "name": "business-b-woqu",
    "link": "http://127.0.0.1:7003/turbine.stream?cluster=business-b-woqu"
  },
  {
    "name": "common-server-gateway",
    "link": "http://127.0.0.1:7003/turbine.stream?cluster=common-server-gateway"
  },
  {
    "name": "business-a-woqu",
    "link": "http://127.0.0.1:7003/turbine.stream?cluster=business-a-woqu"
  }
]

Response code: 200; Time: 12ms; Content length: 304 bytes

在Hystrix Dashboard輸入http://127.0.0.1:7003/turbine.stream?cluster=business-b-woqu,請求GET http://192.168.2.102:9002/area?length=1&width=2&heigh=3,便可查看到監控效果
Hystrix Dashboard

經過MQ收集聚合

Spring Cloud 在封裝 Turbine 的時候,還實現了基於消息代理的收集實現。因此,咱們能夠將全部須要收集的監控信息都輸出到消息代理中,而後 Turbine 服務再從消息代理中異步的獲取這些監控信息,最後將這些監控信息聚合並輸出到 Hystrix Dashboard 中。

這裏咱們使用RabbitMQ來實現基於消息代理的 Turbine 聚合服務。

  • POM
    在pom.xml中加入如下依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-turbine-stream</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
  • 啓動類
@SpringBootApplication
@EnableTurbineStream
@EnableDiscoveryClient
public class TurbineStreamRabbitmqApplication {

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

    @Bean
    public ConfigurableCompositeMessageConverter integrationArgumentResolverMessageConverter(CompositeMessageConverterFactory factory) {
        return new ConfigurableCompositeMessageConverter(factory.getMessageConverterForAllRegistered().getConverters());
    }

}
  • 配置文件
spring:
  application:
    name: common-server-turbine-stream

  cloud:
    consul:
      host: woqu.consul
      port: 8500
      discovery:
        instance-id: ${spring.application.name}
        instance-group: ${spring.application.name}
        register: true
        service-name: ${spring.application.name}
    
    stream:
      rabbit:
        bindings:
          test:
            consumer:
              prefix: z

      bindings: 
        input: 
          group: default
  
  rabbitmq:
    addresses: rabbitmq.server
    port: 5672
    username: test
    password: password
    virtualHost: /test
    
applications: common-server-gateway,business-b-woqu,business-a-woqu
turbine:
  aggregator:
    cluster-config: ${applications}
  app-config: ${applications}
  #cluster-name-expression: new String("default")
  combine-host-port: true
  stream:
    port: 18888 # 這是turbine的端口即暴露監控數據的端口,跟server.port不一樣
  
management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: dev

server:
  port: 7004
  • 服務調用者
    在服務調用者server-businessb-woqu的pom.xml 里加入如下依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-hystrix-stream</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

再在啓動類上加上@EnableHystrix註解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.woqu")
@EnableHystrix
@ComponentScan(value = "com.woqu")
public class BusinessBApp {
    public static void main(String[] args) {
        SpringApplication.run(BusinessBApp.class, args);
    }

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}

添加配置文件

spring:
  rabbitmq:
    addresses: rabbitmq.server
    port: 5672
    username: test
    password: password
    virtualHost: /test
  cloud:
    stream:
      rabbit:
        bindings:
          test:
            consumer:
              prefix: z

      bindings: 
        input: 
          group: default
相關文章
相關標籤/搜索