欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java之Springcloud Feign組件詳解

 更新時(shí)間:2021年08月10日 11:14:24   作者:深情以改  
這篇文章主要介紹了Java之Springcloud Feign組件詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

一、Feign是什么?

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

二、使用步驟

在這里插入圖片描述

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

···c

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

···

2.服務(wù)消費(fè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();
    }
}

在這里插入圖片描述

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.更改代碼后測試

@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: 重試 會產(chǎn)生接口的冪等性問題:																																																																																																	
			1:查詢的接口 天生是冪等的																																																					
			2: 增刪改的處理	非冪等的																																																																																																									
配置 說明
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds 斷路器的超時(shí)時(shí)間需要大于ribbon的超時(shí)時(shí)間,不然不會觸發(fā)重試。
hello-service.ribbon.ConnectTimeout 請求連接的超時(shí)時(shí)間
hello-service.ribbon.ReadTimeout 請求處理的超時(shí)時(shí)間
hello-service.ribbon.OkToRetryOnAllOperations 是否對所有操作請求都進(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)會采用POST的請求方式。

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

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

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

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

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

在這里插入圖片描述

總結(jié)

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

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

相關(guān)文章

  • Java純代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包

    Java純代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包

    這篇文章主要為大家詳細(xì)介紹了Java如何代碼實(shí)現(xiàn)導(dǎo)出文件為壓縮包,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Spring?Boot獲取resources目錄下的文件三種方式詳解

    Spring?Boot獲取resources目錄下的文件三種方式詳解

    在Spring?Boot項(xiàng)目中,經(jīng)常需要獲取resources目錄下的文件,這些文件可以包括配置文件、模板文件、靜態(tài)資源等,這篇文章主要介紹了Spring?Boot獲取resources目錄下的文件的三種方式,需要的朋友可以參考下
    2023-06-06
  • spring?boot?實(shí)現(xiàn)一個(gè)?禁止重復(fù)請求的方法

    spring?boot?實(shí)現(xiàn)一個(gè)?禁止重復(fù)請求的方法

    這篇文章主要介紹了spring?boot?實(shí)現(xiàn)一個(gè)?禁止重復(fù)請求,當(dāng)重復(fù)請求該方法時(shí),會返回"Duplicate?request",避免重復(fù)執(zhí)行相同的操作,需要的朋友可以參考下
    2024-03-03
  • Spring?Data?JPA框架快速入門之自定義Repository接口

    Spring?Data?JPA框架快速入門之自定義Repository接口

    Spring?Data?JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套?JPA?應(yīng)?框架,可使開發(fā)者?極簡的代碼即可實(shí)現(xiàn)對數(shù)據(jù)庫的訪問和操作,本篇我們來了解Spring?Data?JPA框架的自定義Repository接口
    2022-04-04
  • SpringBoot淺析安全管理之Spring Security配置

    SpringBoot淺析安全管理之Spring Security配置

    安全管理是軟件系統(tǒng)必不可少的的功能。根據(jù)經(jīng)典的“墨菲定律”——凡是可能,總會發(fā)生。如果系統(tǒng)存在安全隱患,最終必然會出現(xiàn)問題,這篇文章主要介紹了SpringBoot安全管理Spring Security基本配置
    2022-08-08
  • Java常用字符串方法小結(jié)

    Java常用字符串方法小結(jié)

    字符串變量是Java與C語言的一大不同之處。Java之中的 String 類和 Stringbuffer 類提供了大量的對字符串操作的方法。String 類適合處理較小的字符串,而Stringbuffer類適合處理大量字符串
    2017-04-04
  • Spring Boot 整合 Apache Dubbo的示例代碼

    Spring Boot 整合 Apache Dubbo的示例代碼

    Apache Dubbo是一款高性能、輕量級的開源 Java RPC 框架,這篇文章主要介紹了Spring Boot 整合 Apache Dubbo的方法,本文通過示例說明給大家講解的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • 基于Jackson實(shí)現(xiàn)API接口數(shù)據(jù)脫敏的示例詳解

    基于Jackson實(shí)現(xiàn)API接口數(shù)據(jù)脫敏的示例詳解

    用戶的一些敏感數(shù)據(jù),例如手機(jī)號、郵箱、身份證等信息,在數(shù)據(jù)庫以明文存儲,但在接口返回?cái)?shù)據(jù)給瀏覽器(或三方客戶端)時(shí),希望對這些敏感數(shù)據(jù)進(jìn)行脫敏,所以本文就給大家介紹以惡如何利用Jackson實(shí)現(xiàn)API接口數(shù)據(jù)脫敏,需要的朋友可以參考下
    2023-08-08
  • CompletableFuture?異步編排示例詳解

    CompletableFuture?異步編排示例詳解

    這篇文章主要為大家介紹了CompletableFuture?異步編排示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • java算法入門之有效的括號刪除有序數(shù)組中的重復(fù)項(xiàng)實(shí)現(xiàn)strStr

    java算法入門之有效的括號刪除有序數(shù)組中的重復(fù)項(xiàng)實(shí)現(xiàn)strStr

    大家好,我是哪吒,一個(gè)熱愛編碼的Java工程師,本著"欲速則不達(dá),欲達(dá)則欲速"的學(xué)習(xí)態(tài)度,在程序猿這條不歸路上不斷成長,所謂成長,不過是用時(shí)間慢慢擦亮你的眼睛,少時(shí)看重的,年長后卻視若鴻毛,少時(shí)看輕的,年長后卻視若泰山,成長之路,亦是漸漸放下執(zhí)念,內(nèi)心歸于平靜的旅程
    2021-08-08

最新評論