一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java之Springcloud Feign組件詳解

Java之Springcloud Feign組件詳解

2021-11-12 14:23深情以改 Java教程

這篇文章主要介紹了Java之Springcloud Feign組件詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

一、Feign是什么?

OpenFeign是Spring Cloud提供的一個(gè)聲明式的偽Hltp客戶(hù)端,它使得調(diào)用遠(yuǎn)程服務(wù)就像調(diào)用本地服務(wù)一樣簡(jiǎn)單,只需要?jiǎng)?chuàng)建一個(gè)接口并添加一個(gè)注解即可,Nacos很好的兼容了OpenFeign,OpenFeign默認(rèn)集成了Ribbon,
所以在Nacos下使用OpenFeign默認(rèn)就實(shí)現(xiàn)了負(fù)載均衡的效果。

二、使用步驟

Java之Springcloud Feign組件詳解

1.消費(fèi)方導(dǎo)入依賴(lài)

???c

org.springframework.cloud
spring-cloud-starter-openfeign

???

2.服務(wù)消費(fèi)方的主程序啟動(dòng)類(lèi)添加注解,開(kāi)啟@EnableFeignClients

@SpringBootApplication
@MapperScan("com.csqf.mapper")
@Import({
        Swagger2Config.class,
        ControllerExceptionAdvice.class,
})
@EnableFeignClients
public class springcloud_share_6002 {
    public static void main(String[] args) {
        SpringApplication.run(springcloud_share_6002.class,args);
    }

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

Java之Springcloud Feign組件詳解

3.服務(wù)消費(fèi)方 創(chuàng)建遠(yuǎn)程調(diào)用接口

@Service
@FeignClient("user-6001")
public interface UserFeignService {

    @GetMapping("/api/user/{id}")
    public R getUserNameById(@PathVariable("id") Integer id);
}

代碼如下(示例):

4.更改代碼后測(cè)試

@RestController
@RequestMapping("/api/share")
public class ShareContoller {
    @Autowired
    private ShareServiceImpl shareService;
//    @Autowired
//    private RestTemplate restTemplate;
//    @Autowired
//    private DiscoveryClient discoveryClient;
    @Autowired
    private UserFeignService userFeignService;

    @GetMapping("/{id}")
    public R getShareById(@PathVariable("id") Integer id) {
        Share share = shareService.getShareById(id);
        R r = userFeignService.getUserNameById(share.getUserId());
        String s = r.getData().toString();
        ShareDto shareDto = new ShareDto();
        BeanUtils.copyProperties(share,shareDto);
        shareDto.setUserName(s);
        return new R(ResponseEnum.SUCCESS,shareDto);
    }
}

補(bǔ)充

1.重試機(jī)制

	1:如果所有的重試完成 還是失敗 要拋出  feign.RetryableException 異常																																																																																																					
	2: 重試 會(huì)產(chǎn)生接口的冪等性問(wèn)題:																																																																																																	
			1:查詢(xún)的接口 天生是冪等的																																																					
			2: 增刪改的處理	非冪等的																																																																																																									
配置 說(shuō)明
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds 斷路器的超時(shí)時(shí)間需要大于ribbon的超時(shí)時(shí)間,不然不會(huì)觸發(fā)重試。
hello-service.ribbon.ConnectTimeout 請(qǐng)求連接的超時(shí)時(shí)間
hello-service.ribbon.ReadTimeout 請(qǐng)求處理的超時(shí)時(shí)間
hello-service.ribbon.OkToRetryOnAllOperations 是否對(duì)所有操作請(qǐng)求都進(jìn)行重試
hello-service.ribbon.MaxAutoRetriesNextServer 重試負(fù)載均衡其他的實(shí)例最大重試次數(shù),不包括首次server

2 遠(yuǎn)程調(diào)用的時(shí)候出現(xiàn)異常的處理(ControllerExceptionAdvice)

    @ExceptionHandler(RetryableException.class)
    @ResponseBody
    public R doException(RetryableException ex){
        ex.printStackTrace();
        //  System.out.println("拋出未知異常");
        return new R(ResponseEnum.FEIGN_RETRY,null);
    }											

3.Feign的傳遞參數(shù)方式注意事項(xiàng)

如果你傳遞的參數(shù),比較復(fù)雜時(shí),默認(rèn)會(huì)采用POST的請(qǐng)求方式。

  • 傳遞單個(gè)參數(shù)時(shí),推薦使用@PathVariable,如果傳遞的單個(gè)參數(shù)比較多,這里也可以采用@RequestParam,不要省略value屬性
  • 傳遞對(duì)象信息時(shí),統(tǒng)一采用json的方式,添加@RequestBody。Client接口必須采用@RequestMapping

Java之Springcloud Feign組件詳解

Java之Springcloud Feign組件詳解

Java之Springcloud Feign組件詳解

spring cloud項(xiàng)目使用feign的時(shí)候都會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,就是get方式無(wú)法解析對(duì)象參數(shù)。其實(shí)feign是支持對(duì)象傳遞的,但是得是Map形式,而且不能為空,與spring在機(jī)制上不兼容,因此無(wú)法使用。

spring cloud在2.1.x版本中提供了@SpringQueryMap注解,可以傳遞對(duì)象參數(shù),框架自動(dòng)解析。

調(diào)用方feign接口只能是 被調(diào)用方接口
public R f1(User user) 或 public R f1(@RequestBoby User user) 參數(shù) @RequstBoby 對(duì)象
public R f1(@SpringQueryMap User user) 參數(shù) 對(duì)象

Java之Springcloud Feign組件詳解

總結(jié)

FEIGN 集成ribbon 和 resttemplate,簡(jiǎn)化 服務(wù)之間的調(diào)用
Feign是通過(guò)內(nèi)置的Ribbon進(jìn)行負(fù)載均衡,并通過(guò)HTTP去訪問(wèn)被調(diào)用方,所以Feign的重試,其實(shí)就是Ribbon的重試。另外,我們?cè)趯?shí)際工作中使用Feign,用到Hystrix,在這里就順便說(shuō)一下Hystrix的原理。舉例說(shuō)明下,假如在沒(méi)有Hystrix的情況下,用戶(hù)一個(gè)下單操作需要調(diào)用訂單、支付、物流三個(gè)服務(wù),如果其中物流Service因?yàn)榉N種問(wèn)題不能提供服務(wù),即便另外兩個(gè)服務(wù)都好好的,整個(gè)下單操作也會(huì)因?yàn)槲锪鱏ervice而阻塞住,導(dǎo)致下單服務(wù)崩潰。而Hystrix為每個(gè)依賴(lài)的服務(wù)配置獨(dú)立的線程池并進(jìn)行隔離,假設(shè)下單服務(wù)有90個(gè)線程,沒(méi)有Hystrix,則因?yàn)槲锪鱏ervice不能提供服務(wù),不停地重試直到90個(gè)線程全卡死。而有了Hystrix,三個(gè)依賴(lài)的服務(wù),每個(gè)30個(gè)線程,即便物流的30個(gè)全部阻塞了,也不影響另外兩個(gè)服務(wù)的線程。

到此這篇關(guān)于Java之Springcloud Feign組件詳解的文章就介紹到這了,更多相關(guān)Java之Springcloud Feign內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/weixin_56219549/article/details/119512946

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫(xiě)文件寫(xiě)不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開(kāi)發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒(méi)有升過(guò)級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來(lái)介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
主站蜘蛛池模板: 青草国内精品视频在线观看 | aaa一级最新毛片 | 久久草福利自拍视频在线观看 | 91精品国产91热久久久久福利 | 亚洲一卡2卡三卡4卡5卡组 | 黑人巨大vs北条麻妃在线 | 高清国产欧美一v精品 | 男人天堂网www | 国产区久久 | 亚洲国产欧美目韩成人综合 | 亚洲高清在线天堂精品 | 日本天堂网 | h卡通第一页| 日本黄a| 精品美女国产互换人妻 | 国产日韩欧美综合一区二区三区 | 操大姨子逼| 爽新片xxxxxxx | 第一国内永久免费福利视频 | 超高清欧美同性videos | 99久久精品国产免看国产一区 | 特黄视频免费看 | 日韩永久在线观看免费视频 | 日韩在线视频二区 | 亚洲爱视频 | 美女用手扒开粉嫩的屁股 | 全黄一级裸片视频免费 | 欧美精品1区2区 | xxxx泡妞中国| 婷婷99视频精品全部在线观看 | 九九久久精品 | 欧美男男gaygayxxx| 午夜视频一区二区三区 | 福利片福利一区二区三区 | 亚洲春色综合另类网蜜桃 | 午夜理论片日本中文在线 | 亚洲国产综合精品 | 7788理论片在线观看 | 国产福利不卡视频 | 久久囯产精品777蜜桃传媒 | 免费观看在线永久免费xx视频 |