真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringCloud中Feign與Hystrix整合的示例分析

這篇文章給大家分享的是有關(guān)Spring Cloud中Feign與Hystrix整合的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供廣靈企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、成都網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為廣靈眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。

Feign與Hystrix整合

        Feign對Hystrix提供了支持,為“服務(wù)調(diào)用者”加入以下Feign依賴:

        
            org.springframework.cloud
            spring-cloud-starter-feign
        

        在application.yml中打開Feign的Hystrix開關(guān),請見以下配置:

feign:
  hystrix:
    enabled: true

        在應(yīng)用啟動類里面,加入開Feign的開關(guān),本小節(jié)的“服務(wù)調(diào)用者”應(yīng)用啟動類,所使用的注解如下:

@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
@ServletComponentScan
@EnableFeignClients

        新建Feign接口,調(diào)用“服務(wù)提供者(spring-hystrix-provider)”的“/hello”服務(wù),請見代碼清單6-24。

        代碼清單6-24:

        codes\06\6.4\spring-hystrix-invoker\src\main\java\org\crazyit\cloud\feign\HelloClient.java

@FeignClient(name = "spring-hystrix-provider", fallback = HelloClientFallback.class)
public interface HelloClient {

    @RequestMapping(method = RequestMethod.GET, value = "/hello")
    public String hello();

    @Component
    static class HelloClientFallback implements HelloClient {

        public String hello() {
            System.out.println("hello 方法的回退");
            return "error hello";
        }
    }
}

        與普通的Feign客戶端無異,僅僅設(shè)置了處理回退的類,回退類實現(xiàn)了客戶端接口。為了能測試效果,修改服務(wù)器端的“/hello”服務(wù),讓其有800毫秒的延時。根據(jù)前面章節(jié)可知,默認(rèn)情況下,Hystrix的超時時間為1秒,因此,還需要修改配置超時配置。代碼清單6-25,在application.yml中修改命令配置。

        代碼清單6-25:codes\06\6.4\spring-hystrix-invoker\src\main\resources\application.yml

hystrix:
  command:
    HelloClient#hello():
      execution:
        isolation:
          thread: 
            timeoutInMilliseconds: 500
      circuitBreaker:
        requestVolumeThreshold: 3

        注意,如果是針對全局配置,則使用與下面類似的配置片斷:

hystrix.command.default.circuitBreaker.requestVolumeThreshold // 默認(rèn)時間段內(nèi)發(fā)生的請求數(shù)
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds // 超時時間

        如果針對某個客戶端,如使用下面的配置片斷:

hystrix.command.CommandKey.circuitBreaker.requestVolumeThreshold

        Feign與Hystrix整合使用時,會自動幫我們生成CommandKey,格式為:“Feign客戶端接口名#方法名()”。例如本例中的客戶端為HelloClient,方法為hello,生成的CommandKey為“HelloClient#hello()”。而默認(rèn)情況下,生成的GroupKey為@FeignClient注解的name屬性。

        以上的配置中,我們針對了hello方法,設(shè)置了超時時間為500毫秒,而“/hello”服務(wù)超時時間為800毫秒,換言之,hello方法總會超時。另外,如果請求超過3次并且失敗率超過50%,斷路器將被打開。編寫控制器,調(diào)用hello服務(wù),并查看斷路器的情況,請見代碼清單6-26。

        代碼清單6-26:HelloController.java

@RestController
public class HelloController {

    @Autowired
    HelloClient helloClient;

    @RequestMapping(value = "/feign/hello", method = RequestMethod.GET)
    public String feignHello() {
        // hello方法會超時
        String helloResult = helloClient.hello();
        // 獲取斷路器
        HystrixCircuitBreaker breaker = HystrixCircuitBreaker.Factory
                .getInstance(HystrixCommandKey.Factory
                        .asKey("HelloClient#hello()"));        
        System.out.println("斷路器狀態(tài):" + breaker.isOpen());
        return helloResult;
    }
}

        控制器的方法中,獲取了hello方法的斷路器,并輸出其狀態(tài)。接下來,編寫一個測試客戶端,多線程訪問:http://localhost:9000/feign/hello/{index},也就是控制器的feignHello方法,客戶端請見代碼清單6-27。

        代碼清單6-27:

        06\6.4\spring-hystrix-invoker\src\main\java\org\crazyit\cloud\feign\TestFeignClient.java

public class TestFeignClient {
    
    public static void main(String[] args) throws Exception {
        // 創(chuàng)建默認(rèn)的HttpClient
        final CloseableHttpClient httpclient = HttpClients.createDefault();        
        // 調(diào)用多次服務(wù)并輸出結(jié)果
        for(int i = 0; i < 6; i++) {
            // 建立線程訪問接口
            Thread t = new Thread() {
                public void run() {
                    try {
                        String url = "http://localhost:9000/feign/hello";
                        // 調(diào)用 GET 方法請求服務(wù)
                        HttpGet httpget = new HttpGet(url);
                        // 獲取響應(yīng)
                        HttpResponse response = httpclient.execute(httpget);
                        // 根據(jù) 響應(yīng)解析出字符串
                        System.out.println(EntityUtils.toString(response.getEntity()));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            t.start();
        }
        // 等待完成
        Thread.sleep(15000);
    }
}

        完成后,依次啟動Eureka服務(wù)器、服務(wù)提供者、服務(wù)調(diào)用者,運行代碼清單6-27,可看到“服務(wù)計用者”的控制臺輸出如下:

斷路器狀態(tài):false
斷路器狀態(tài):false
斷路器狀態(tài):false
斷路器狀態(tài):false
斷路器狀態(tài):true
斷路器狀態(tài):true

        根據(jù)輸出可知,斷路器已經(jīng)被打開。

感謝各位的閱讀!關(guān)于“Spring Cloud中Feign與Hystrix整合的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


分享名稱:SpringCloud中Feign與Hystrix整合的示例分析
網(wǎng)頁路徑:http://weahome.cn/article/jegpjg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部