SpringCloud項(xiàng)目集成Feign、Hystrix過(guò)程解析
這篇文章主要介紹了SpringCloud項(xiàng)目集成Feign、Hystrix過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
Feign的功能:這是個(gè)消費(fèi)者,根據(jù)服務(wù)注冊(cè)在Eureka的ID去找到該服務(wù),并調(diào)用接口
Hystrix的功能:熔斷器,假如A服務(wù)需要調(diào)用B服務(wù)的/cities接口獲取數(shù)據(jù),那就在A服務(wù)的controller里聲明@HystrixCommand,如果B服務(wù)的/cities接口掛了,就返回一個(gè)自定義的值
項(xiàng)目結(jié)構(gòu)
[root@node01 cloud]# tree weather/ weather/ ├── Application.java #主程序啟動(dòng)入口 ├── controller │ ├── CityController.java #控制路由,比如訪問(wèn)127.0.0.1:8080/cities, 這里調(diào)用cityClient方法 └── service └── CityClient.java #具體方法的實(shí)現(xiàn),這里就具體實(shí)現(xiàn)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能發(fā)現(xiàn)自己
import org.springframework.cloud.netflix.feign.EnableFeignClients; #引入feign
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients #聲明這個(gè)程序引入FeignClient
@EnableCircuitBreaker #聲明這個(gè)程序引入熔斷器
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") #控制路由,比如訪問(wèn)127.0.0.1:8080/cities
@HystrixCommand(fallbackMethod="defaultCities") #給另外一個(gè)服務(wù)設(shè)置hystrix熔斷器,并聲明fallbackMethod(回調(diào)方法)假如另外一個(gè)服務(wù)掛了,就調(diào)用defaultCities方法
public String listCity() {
// 通過(guò)Feign客戶端來(lái)查找
String body = cityClient.listCity(); #調(diào)用service里CityClient.java的cityClient方法,獲取城市數(shù)據(jù)
return body; #返回,訪問(wèn)127.0.0.1:8080/cities就能返回城市數(shù)據(jù)
}
public String defaultCities() {
return "City Data Server is down!";
}
}
service/CityClient.java(消費(fèi)者)
用Feign去另一個(gè)接口獲取數(shù)據(jù)
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服務(wù)注冊(cè)到eureka的ID,通過(guò)這個(gè)ID就能訪問(wèn)到msa-weather-city微服務(wù)
public interface CityClient {
@GetMapping("/cities") #調(diào)用msa-weather-city微服務(wù)里的/cities接口
String listCity(); #調(diào)用msa-weather-city微服務(wù)里的/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
測(cè)試,條件為另一個(gè)服務(wù)可用時(shí),我們是能調(diào)用的

測(cè)試.條件為另一個(gè)服務(wù)不可以時(shí),我們是不能調(diào)用的,所以fallback

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java 用Prometheus搭建實(shí)時(shí)監(jiān)控系統(tǒng)過(guò)程詳解
這篇文章主要介紹了用Prometheus搭建實(shí)時(shí)監(jiān)控系統(tǒng)過(guò)程詳解之上帝之火,普羅米修斯的崛起,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
java拼接字符串時(shí)去掉最后一個(gè)多余逗號(hào)的方法
這篇文章主要介紹了java拼接字符串時(shí)去掉最后一個(gè)多余逗號(hào)的方法,實(shí)例分析了java操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
MyBatis在Spring環(huán)境下的事務(wù)管理
MyBatis的設(shè)計(jì)思想很簡(jiǎn)單,可以看做是對(duì)JDBC的一次封裝,并提供強(qiáng)大的動(dòng)態(tài)SQL映射功能。這篇文章主要介紹了MyBatis在Spring環(huán)境下的事務(wù)管理 ,需要的朋友可以參考下2019-07-07
Java利用沙箱支付實(shí)現(xiàn)電腦掃碼支付教程
當(dāng)我們制作的項(xiàng)目需要實(shí)現(xiàn)電腦掃碼支付功能時(shí),我們往往會(huì)采用沙箱支付來(lái)模擬實(shí)現(xiàn)。本文將主要介紹如何在Java中利用沙箱支付實(shí)現(xiàn)這一功能,需要的可以參考一下2022-01-01
Java getRealPath("/")與getContextPath()區(qū)別詳細(xì)分析
這篇文章主要介紹了Java getRealPath("/")與getContextPath()區(qū)別詳細(xì)分析,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)
Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)...2006-12-12
JDK動(dòng)態(tài)代理之ProxyGenerator生成代理類的字節(jié)碼文件解析
這篇文章主要為大家詳細(xì)介紹了JDK動(dòng)態(tài)代理之ProxyGenerator生成代理類的字節(jié)碼文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
SpringBoot3利用AOP實(shí)現(xiàn)IP黑名單功能
在Web應(yīng)用開(kāi)發(fā)中,控制對(duì)特定IP地址的訪問(wèn)權(quán)限是一個(gè)常見(jiàn)的需求,通過(guò)實(shí)現(xiàn)IP黑白名單功能,我們可以允許某些IP地址訪問(wèn)應(yīng)用,同時(shí)拒絕其他IP地址的訪問(wèn),本文將詳細(xì)介紹SpringBoot3利用AOP實(shí)現(xiàn)IP黑名單功能,并附上相應(yīng)的代碼片段,需要的朋友可以參考下2024-09-09

