最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之Springcloud Feign組件詳解

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

一、Feign是什么?

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

二、使用步驟

在這里插入圖片描述

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

···c

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

···

2.服務(wù)消費方的主程序啟動類添加注解,開啟@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ù)消費方 創(chuàng)建遠程調(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);
    }
}

補充

1.重試機制

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

2 遠程調(diào)用的時候出現(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ù)方式注意事項

如果你傳遞的參數(shù),比較復(fù)雜時,默認會采用POST的請求方式。

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

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

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

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進行負載均衡,并通過HTTP去訪問被調(diào)用方,所以Feign的重試,其實就是Ribbon的重試。另外,我們在實際工作中使用Feign,用到Hystrix,在這里就順便說一下Hystrix的原理。舉例說明下,假如在沒有Hystrix的情況下,用戶一個下單操作需要調(diào)用訂單、支付、物流三個服務(wù),如果其中物流Service因為種種問題不能提供服務(wù),即便另外兩個服務(wù)都好好的,整個下單操作也會因為物流Service而阻塞住,導(dǎo)致下單服務(wù)崩潰。而Hystrix為每個依賴的服務(wù)配置獨立的線程池并進行隔離,假設(shè)下單服務(wù)有90個線程,沒有Hystrix,則因為物流Service不能提供服務(wù),不停地重試直到90個線程全卡死。而有了Hystrix,三個依賴的服務(wù),每個30個線程,即便物流的30個全部阻塞了,也不影響另外兩個服務(wù)的線程。

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

相關(guān)文章

  • Java Springboot全局異常處理

    Java Springboot全局異常處理

    這篇文章主要給大家介紹了關(guān)于Springboot全局異常處理的資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • java線程的run()沒有返回值怎么辦?

    java線程的run()沒有返回值怎么辦?

    java線程的run()沒有返回值怎么辦?本文給出了java線程的run()返回值為空的解決辦法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java Socket 編程詳解

    Java Socket 編程詳解

    Java Socket 編程是指使用 Java 語言進行網(wǎng)絡(luò)通信的過程,包括建立連接、傳輸數(shù)據(jù)和關(guān)閉連接等操作,本文將詳細介紹Java Socket編程,需要的朋友可以參考下
    2023-05-05
  • Java中的Unsafe工具類使用詳解

    Java中的Unsafe工具類使用詳解

    這篇文章主要介紹了Java中的Unsafe工具類使用詳解,Unsafe是jdk提供的一個直接訪問操作系統(tǒng)資源的工具類(底層c++實現(xiàn)),它可以直接分配內(nèi)存,內(nèi)存復(fù)制,copy,提供cpu級別的CAS樂觀鎖等操作,需要的朋友可以參考下
    2023-12-12
  • IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項目實現(xiàn)動態(tài)登錄與注冊功能

    IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項目實現(xiàn)動態(tài)登錄與注冊功能

    這篇文章主要介紹了IDEA下創(chuàng)建SpringBoot+MyBatis+MySql項目實現(xiàn)動態(tài)登錄與注冊功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 解決@Transaction注解導(dǎo)致動態(tài)切換更改數(shù)據(jù)庫失效問題

    解決@Transaction注解導(dǎo)致動態(tài)切換更改數(shù)據(jù)庫失效問題

    這篇文章主要介紹了解決@Transaction注解導(dǎo)致動態(tài)切換更改數(shù)據(jù)庫失效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • kafka?消息隊列中點對點與發(fā)布訂閱的區(qū)別說明

    kafka?消息隊列中點對點與發(fā)布訂閱的區(qū)別說明

    這篇文章主要介紹了kafka?消息隊列中點對點與發(fā)布訂閱的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java中條件運算符的嵌套使用技巧總結(jié)

    Java中條件運算符的嵌套使用技巧總結(jié)

    在Java中,我們經(jīng)常需要使用條件運算符來進行多個條件的判斷和選擇,條件運算符可以簡化代碼,提高代碼的可讀性和執(zhí)行效率,本文將介紹條件運算符的嵌套使用技巧,幫助讀者更好地掌握條件運算符的應(yīng)用,需要的朋友可以參考下
    2023-11-11
  • springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式

    springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式

    這篇文章主要介紹了springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Spring中WebClient的創(chuàng)建和使用詳解

    Spring中WebClient的創(chuàng)建和使用詳解

    這篇文章主要介紹了Spring中WebClient的創(chuàng)建和使用詳解,在Spring5中,出現(xiàn)了Reactive響應(yīng)式編程思想,并且為網(wǎng)絡(luò)編程提供相關(guān)響應(yīng)式編程的支持,如提供了WebFlux,它是Spring提供的異步非阻塞的響應(yīng)式的網(wǎng)絡(luò)框架,需要的朋友可以參考下
    2023-11-11

最新評論

岳西县| 宣恩县| 读书| 淄博市| 古田县| 海兴县| 自治县| 广丰县| 镇坪县| 岱山县| 巫山县| 社会| 松江区| 武穴市| 石狮市| 南江县| 大关县| 从江县| 南木林县| 海宁市| 富锦市| 体育| 甘洛县| 威远县| 建宁县| 北辰区| 荔波县| 额济纳旗| 清水河县| 盐城市| 城市| 炎陵县| 七台河市| 平远县| 科技| 奉节县| 延边| 云和县| 福鼎市| 庆城县| 柞水县|