您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringCloud項目集成Feign、Hystrix過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
Feign的功能:這是個消費者,根據服務注冊在Eureka的ID去找到該服務,并調用接口
Hystrix的功能:熔斷器,假如A服務需要調用B服務的/cities接口獲取數據,那就在A服務的controller里聲明@HystrixCommand,如果B服務的/cities接口掛了,就返回一個自定義的值
項目結構
[root@node01 cloud]# tree weather/ weather/ ├── Application.java #主程序啟動入口 ├── controller │ ├── CityController.java #控制路由,比如訪問127.0.0.1:8080/cities, 這里調用cityClient方法 └── service └── CityClient.java #具體方法的實現,這里就具體實現cityClient方法(interface)
Application.java
package com.waylau.spring.cloud.weather; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; #引入熔斷器 import org.springframework.cloud.client.discovery.EnableDiscoveryClient; #讓eureka能發現自己 import org.springframework.cloud.netflix.feign.EnableFeignClients; #引入feign @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients #聲明這個程序引入FeignClient @EnableCircuitBreaker #聲明這個程序引入熔斷器 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
controller/CityController.java
package com.waylau.spring.cloud.weather.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import com.waylau.spring.cloud.weather.service.CityClient; #引用service/CityClient.java @RestController public class CityController { @Autowired private CityClient cityClient; @GetMapping("/cities") #控制路由,比如訪問127.0.0.1:8080/cities @HystrixCommand(fallbackMethod="defaultCities") #給另外一個服務設置hystrix熔斷器,并聲明fallbackMethod(回調方法)假如另外一個服務掛了,就調用defaultCities方法 public String listCity() { // 通過Feign客戶端來查找 String body = cityClient.listCity(); #調用service里CityClient.java的cityClient方法,獲取城市數據 return body; #返回,訪問127.0.0.1:8080/cities就能返回城市數據 } public String defaultCities() { return "City Data Server is down!"; } }
service/CityClient.java(消費者)
用Feign去另一個接口獲取數據
package com.waylau.spring.cloud.weather.service; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient("msa-weather-city") #msa-weather-city是msa-weather-city服務注冊到eureka的ID,通過這個ID就能訪問到msa-weather-city微服務 public interface CityClient { @GetMapping("/cities") #調用msa-weather-city微服務里的/cities接口 String listCity(); #調用msa-weather-city微服務里的/cities接口里的listCity()方法 }
application.properties
spring.application.name: micro-weather-eureka-client-feign-hystrix eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/ feign.client.config.feignName.connectTimeout: 5000 feign.client.config.feignName.readTimeout: 5000
測試,條件為另一個服務可用時,我們是能調用的
測試.條件為另一個服務不可以時,我們是不能調用的,所以fallback
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。