日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例

瀏覽:161日期:2023-07-19 18:43:30
Feign的使用

Feign也是網(wǎng)飛開發(fā)的,SpringCloud 使用 Feign 非常簡單,我下邊演示一下:首先 服務(wù)消費者這邊肯定需要一個對應(yīng)的依賴:

compile('org.springframework.cloud:spring-cloud-starter-openfeign')

需要啟用Feign的話,也得在啟動類上面加個注解 @EnableFeignClients然后,創(chuàng)建一個 Feign 的接口,像這樣子

package com.skypyb.sc.feign;import com.skypyb.sc.entity.User;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@FeignClient('sc-demo-microservice-user')public interface UserFeignClient { @RequestMapping(value = '/user/{id}',method = RequestMethod.GET) public User getUser(@PathVariable('id') Long id);}

@FeignClient 注解里邊的默認屬性,也就是name屬性是一個客戶端的名字,如果使用了Eureka的話,會給他自動解析為 Eureka Server 服務(wù)注冊表中的服務(wù)。要是配了Ribbon,也會使用默認的負載均衡策略來執(zhí)行請求。Feign默認使用SpringMVC的注解聲明請求,當然也可以用Feign自帶的注解。不過沒啥必要,還需要配置東西。 我上邊這個例子寫完了,實際使用的話只需要注入該類然后調(diào)用對應(yīng)的方法就完事了。非常簡便。

package com.skypyb.sc.controller;import com.skypyb.sc.entity.User;import com.skypyb.sc.feign.UserFeignClient;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.discovery.DiscoveryClient;import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import java.util.List;@RestController@RequestMapping('/movie')public class MovieController { private Logger logger = LoggerFactory.getLogger(MovieController.class); @Autowired private UserFeignClient userFeignClient; @GetMapping('/user/{id}') public User getUser(@PathVariable('id') Long id) { return userFeignClient.getUser(id); }}

不過有幾個點需要注意在使用@FeignClient 聲明的Feign偽裝類中:使用 @PathVariable 注解,必須加上參數(shù)!GET請求無法使用對象作為入?yún)ⅲ?要不有多少參數(shù)寫多少參數(shù)(每個都要加@RequestParam(“參數(shù)名”) 注解),要不就用接受一個Map對象,也得加@RequestParamPOST請求可以接收對象,需要加上@RequestBody注解 Feign論使用的話,其實已經(jīng)差不多了。但是還有一些相關(guān)的操作也比較重要。 Feign 的請求都是使用的默認配置,我們其實可以實現(xiàn)自己的配置供 Feign 使用以實現(xiàn)編碼、解碼、日志記錄、驗證 等等等等。比如我可以這么定義一個配置類:

package com.skypyb.sc.config;import feign.Logger;import feign.auth.BasicAuthRequestInterceptor;import org.springframework.context.annotation.Bean;public class FeignConfiguration { @Bean public Logger.Level feignLog() { return Logger.Level.FULL; } /** * 使用指定的用戶名和密碼驗證所有請求 * @return */ @Bean public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){ return new BasicAuthRequestInterceptor('user','614'); }}

該類配置了對應(yīng)的日志記錄器,和一個簡單的效驗,以應(yīng)對請求的驗證。在對應(yīng)的Feign偽裝類中,上邊的@FeignClient注解改一下,就可以使用自己寫的配置:

@FeignClient(name = 'sc-demo-microservice-user', configuration = FeignConfiguration.class)

之所以在 @FeignClient 注解中指定配置,是因為我的配置類是沒有加 @Configuration 注解的,我想要實現(xiàn)細粒度的控制。 推薦這樣做。如果加了@Configuration 注解,則 Spring 會將其自動解析自動應(yīng)用到全局,這樣子就不方便為每個請求進行細粒度調(diào)整。

Alibaba的使用

首先肯定是要上pom.xml配置起來。加上對應(yīng)的依賴。

<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

接著寫個Feign接口

package com.skypyb.provider.feign;import com.skypyb.provider.fallback.HelloServiceFallback;import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;/** * Feign客戶端 * 指定調(diào)用 sc-demo-alibaba-provider 的服務(wù) */@FeignClient(value = 'sc-demo-alibaba-provider',fallback = HelloServiceFallback.class)public interface NacosHelloFeign { @RequestMapping(value = '/provider/hello/{msg}') String hello(@PathVariable('msg') String msg);}

調(diào)用的話就是這樣子調(diào)用:

package com.skypyb.provider.controller;import com.skypyb.provider.feign.NacosHelloFeign;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import javax.annotation.Resource;@RequestMapping('/consumer')@RestControllerpublic class NacosConsumerController { @Autowired private LoadBalancerClient loadBalancerClient; @Autowired private RestTemplate restTemplate; @Resource private NacosHelloFeign nacosHelloFeign; @GetMapping(value = '/hello/{msg}') public String hello(@PathVariable('msg') String msg) { //使用 LoadBalanceClient 和 RestTemplate 結(jié)合的方式來訪問 ServiceInstance serviceInstance = loadBalancerClient.choose('sc-demo-alibaba-provider'); String url = String.format('http://%s:%s/provider/hello/%s', serviceInstance.getHost(), serviceInstance.getPort(), msg); return restTemplate.getForObject(url, String.class); } @GetMapping(value = '/hello/feign/{msg}') public String helloFeign(@PathVariable('msg') String msg) { return nacosHelloFeign.hello(msg); }}

哎,觀察我的NacosHelloFeign類,這里可以看到,我這用了一個fallback回退,這個回退指定的就是Sentinel 的實現(xiàn),其實寫起來和特么的Hystrix一模一樣。不得不說SpringCloud這一點是真的做得好。

package com.skypyb.provider.fallback;import com.skypyb.provider.feign.NacosHelloFeign;import org.springframework.stereotype.Component;/** * 熔斷類 * 要是 Feign 的接口調(diào)用失敗(或者被快速失敗)就會走這個類的方法進行處理 */@Componentpublic class HelloServiceFallback implements NacosHelloFeign { @Override public String hello(String msg) { return '觸發(fā)熔斷機制~'; }}

哎,觀察我的NacosHelloFeign類,這里可以看到,我這用了一個fallback回退,這個回退指定的就是Sentinel 的實現(xiàn),其實寫起來和特么的Hystrix一模一樣。不得不說SpringCloud這一點是真的做得好。

package com.skypyb.provider.fallback;import com.skypyb.provider.feign.NacosHelloFeign;import org.springframework.stereotype.Component;/** * 熔斷類 * 要是 Feign 的接口調(diào)用失敗(或者被快速失敗)就會走這個類的方法進行處理 */@Componentpublic class HelloServiceFallback implements NacosHelloFeign { @Override public String hello(String msg) { return '觸發(fā)熔斷機制~'; }}

當然,配置肯定是得配置的,他也不會直接就給你用了。Sentinel 雖說是適配了 Feign 組件。但默認是關(guān)閉的。需要在配置文件中配置打開它,在配置文件增加以下代碼:

feign: sentinel: enabled: true

其實到現(xiàn)在,整個Feign的使用+熔斷限流機制就已經(jīng)配完了。不過Sentinel 比起Hystrix真正優(yōu)越的地方還沒來呢。那就是: 控制臺。這個控制臺功能豐富、UI好看,比Hystrix那是高到不知道哪里去了。要是用控制臺,又不得不下載代碼、打包、編譯、運行。 所幸,我們有神器docker。我在docker hub 上找了個鏡像,直接用就可以了,鏡像地址:https://hub.docker.com/r/bladex/sentinel-dashboard直接執(zhí)以下命令,將sentinel控制臺起開綁到8858端口

docker pull bladex/sentinel-dashboarddocker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard

然后自己的yml文件也得改一下,畢竟都上控制臺了,也得把自己這個服務(wù)給注冊進去。全部的yml文件如下所示:

spring: application: name: sc-demo-alibaba-consumer cloud: nacos: discovery: server-addr: 192.168.1.14:8848 #注冊進 nacos sentinel: transport: port: 18081 #這個端口的意思是自己這個服務(wù)開個端口和 sentinel 控制臺交互 dashboard: 192.168.1.14:8858 # sentinel 控制臺的端口server: port: 8081feign: sentinel: enabled: truemanagement: endpoints: web: exposure: include: '*'

可以看到配置里有一個 sentinel.transport.port屬性,這個屬性的意思是在自己本體這個服務(wù)里邊,在開個新的端口專門用來和 Sentinel 控制臺交互Sentinel 控制臺自身也有,默認端口則是8719 到這里就差不多了,所有東西打開,然后就可以訪問 http://ip:8858 進入Sentinel 控制臺,默認賬號密碼都是sentinel有一點還需要注意,那就是為了確保客戶端有訪問量,Sentinel 會在客戶端首次調(diào)用的時候進行初始化,開始向控制臺發(fā)送心跳包。意思就是說你一個服務(wù)注冊進我這來,首先還是看不到的。你得先經(jīng)過別人的請求,我才會去監(jiān)控你,所以在服務(wù)剛啟動的時候進入Sentinel 控制臺找不到自己的服務(wù)是很正常的,只要啟動時沒有報錯就不會有問題。

以上就是Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例的詳細內(nèi)容,更多關(guān)于Spring Cloud Alibaba 使用Feign+Sentinel 完成熔斷的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美成人aaa| 99久久婷婷这里只有精品| 亚洲在线观看| 中文字幕系列一区| 成人黄色av| 中文字幕成在线观看| 久久影院午夜精品| 欧美成a人片免费观看久久五月天| 日本在线观看不卡视频| 中文字幕免费一区二区| 偷拍亚洲精品| 777久久精品| 免费在线欧美黄色| 国产一区2区在线观看| 高清av一区| 四虎影视精品| 欧美在线资源| 涩涩涩久久久成人精品| 国产欧美日韩免费观看| 久久久久伊人| 久久天堂精品| 亚洲免费影院| 婷婷成人av| 九九99久久精品在免费线bt| 日韩大片在线观看| 午夜日韩福利| 日韩免费精品| 美日韩一区二区三区| 97人人精品| 亚洲国产成人精品女人| 丝袜美腿高跟呻吟高潮一区| 日本在线一区二区三区| 国产精品一区二区精品| 国产在线视频欧美一区| 999久久久国产精品| 久久国产精品毛片| 久久激情五月激情| 国产一区2区| 亚州av乱码久久精品蜜桃| 亚洲精品激情| 久久一区精品| 日韩午夜黄色| 国产精品主播| 日本欧美不卡| 久久www成人_看片免费不卡| 国产精品久久乐| 99久久99久久精品国产片果冰| 一区二区三区网站| 久久久久久久久成人| av一区二区高清| 日韩国产精品久久久久久亚洲| 色综合五月天| 中文精品视频| 老司机精品视频在线播放| 婷婷色综合网| 欧美激情 亚洲a∨综合| 午夜国产精品视频免费体验区| 911亚洲精品| 午夜国产一区二区| 久久精品国产在热久久| 日韩视频免费| 国内精品美女在线观看| 鲁大师成人一区二区三区| 粉嫩av一区二区三区四区五区| 亚洲深爱激情| 久久精品一区二区国产| 男女男精品视频网| 成人在线免费观看91| 蜜桃久久久久久久| 国产精品蜜芽在线观看| 日本不卡视频在线观看 | 国产精品视频一区二区三区综合 | 国精品产品一区| 亚洲一级大片| 高清日韩中文字幕| 日韩av一区二| 婷婷精品进入| 久久精品国产99国产| 亚洲视频国产| 欧美日韩高清| 日韩国产激情| 免费在线亚洲| 欧美一级网站| 日韩一区二区久久| 美女一区网站| 国产精品欧美一区二区三区不卡| 国产精品呻吟| 亚洲天堂资源| 美女精品久久| 久久国产婷婷国产香蕉| 中文字幕日本一区二区| 尤物在线精品| 福利一区在线| 麻豆国产一区| 青青草91久久久久久久久| 麻豆久久精品| av一区二区高清| 日韩电影免费网站| 国产一区日韩| 国产精品99久久免费观看| 亚洲香蕉久久| 国产偷自视频区视频一区二区| 色黄视频在线观看| 麻豆精品国产91久久久久久| 欧美一区二区三区久久精品| 免费不卡在线视频| 国产综合精品一区| а√天堂中文在线资源8| 国产精品777777在线播放 | 日韩手机在线| 中文字幕av亚洲精品一部二部 | 人人精品久久| 免费看日韩精品| 蜜臀a∨国产成人精品| 日韩精品1区2区3区| 国产一区二区高清| 99久久婷婷| 一区二区三区视频免费观看| 麻豆中文一区二区| 国产精品videossex久久发布| 久久国产精品色av免费看| 日本视频中文字幕一区二区三区| 亚洲一区av| 色狠狠一区二区三区| 日韩影片在线观看| 日韩二区在线观看| 国产精品中文字幕亚洲欧美| 欧美日韩中文| 国产欧美一区二区精品久久久 | 亚洲小说春色综合另类电影| 99国产精品视频免费观看一公开| 狠狠操综合网| 最新亚洲一区| 噜噜噜久久亚洲精品国产品小说| 久久av一区| 日本成人在线不卡视频| 久久精品99国产国产精| 精品视频网站| 色天使综合视频| 午夜久久久久| 天堂俺去俺来也www久久婷婷| 亚洲aa在线| 国产日韩欧美在线播放不卡| 精品国产乱码| 精品捆绑调教一区二区三区 | 日本成人中文字幕在线视频| 国产一级成人av| 精品一区二区三区的国产在线观看 | 国产精品女主播一区二区三区| 爽爽淫人综合网网站| 亚洲精品在线a| 欧美天堂一区| 国产精品分类| 欧美13videosex性极品| 狠狠久久婷婷| 日韩精品电影一区亚洲| 国产一区二区精品久| 91久久国产| 日韩手机在线| 国产夫妻在线| 免费中文字幕日韩欧美| 国产欧美激情| 精品亚洲美女网站| 影音先锋久久精品| 国产一区二区三区亚洲| 亚洲少妇一区| 欧美aa在线视频| 久久亚洲成人| 日韩成人午夜精品| av高清一区| 亚洲在线久久| 国产成人免费精品| 久久网站免费观看| 欧美亚洲综合视频| 久久久精品日韩| 日韩中文一区二区| 福利一区和二区| 亚洲一区国产| 精品一区二区三区视频在线播放| 免费观看不卡av| 久久精品超碰| 91精品1区| 国产欧美丝祙| 在线视频亚洲| 国内精品麻豆美女在线播放视频| 宅男噜噜噜66国产日韩在线观看| 欧美激情福利| 中文一区一区三区免费在线观 | 亚洲三级在线| 精品国产乱码久久久久久1区2匹| 国产精品嫩草99av在线| 精品久久网站| 快she精品国产999| 精品日韩一区| 亚洲精品成人一区| 亚洲高清av| 精品日韩一区| 日韩精品一页| 欧美网站在线| 97精品国产福利一区二区三区|