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

使用FeignClient調(diào)用遠程服務(wù)時整合本地的實現(xiàn)方法

 更新時間:2022年03月07日 16:13:35   作者:54powerman  
這篇文章主要介紹了使用FeignClient調(diào)用遠程服務(wù)時整合本地的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

FeignClient調(diào)用遠程服務(wù)時整合本地

包裝一個用戶服務(wù),一部分功能需要調(diào)用遠程服務(wù),而另一部分功能調(diào)用本地方法,如:

@FeignClient(value="USER-SERVICE")
public interface RemoteUserService{
? @GetMapping("getUserByUserId")
? public User getUserByUserId(String userId);
}
public interface LocalUserService{
? public String getUserId();
}
@Service
public class LocalUserServiceImpl implements LocalUserService{
? @Autowired
? private HttpServletRequest request;
? public String getUserId(){
? ? return (String)request.getSession().getAttribute("user-id");
? }
}

為了簡化篇幅,并沒有處理異常。

當(dāng)使用者使用這兩個用戶相關(guān)的服務(wù),就需要自動裝載兩個Service:

@Autowired
private LocalUserService localUserService;
@Autowired
private RemoteUserService remoteUserService;

能不能簡化一下呢?將兩個服務(wù)整合。

嘗試將本地方法加入Feign接口

@FeignClient(value="USER-SERVICE",fallback=UserServiceHystrix.class)
public interface UserService{
? @GetMapping("getUserByUserId")
? public User getUserByUserId(String userId);
? public String getUserId();
}
@Service
public class UserServiceHystrix implements UserService{
? @Autowired
? private HttpServletRequest request;
? public User getUserByUserId(String userId){
? ? return null;
? }
? public String getUserId(){
? ? return (String)request.getSession().getAttribute("user-id");
? }
}

Fail:

測試發(fā)現(xiàn),UserService 接口中定義本地方法 getUserId() 編譯器直接報錯了,要求必須有Mapping注解。

嘗試通過實現(xiàn)兩個接口

換一個思路,回到最初,在熔斷器中實現(xiàn)兩個接口:

@FeignClient(value="USER-SERVICE",fallback=UserServiceHystrix.class)
public interface UserService{
? @GetMapping("getUserByUserId")
? public User getUserByUserId(String userId);
}
public interface LocalUserService extends RemoteUserService{
? public String getUserId();
}
@Service
public class UserServiceHystrix implements LocalUserService,RemoteUserService{
? @Autowired
? private HttpServletRequest request;
? public User getUserByUserId(String userId){
? ? return null;
? }
? public String getUserId(){
? ? return (String)request.getSession().getAttribute("user-id");
? }
}

Fail:

測試發(fā)現(xiàn),本地方法正常,遠程方法根本無效,好像就是一個本地方法,直接走到了熔斷方法中。

IS -> HAS

讓 RemoteUserService is LocalUserService 既然不行,那么就試試讓 LocalUserService has RemoteUserService。

@FeignClient(value="USER-SERVICE",fallback=UserServiceHystrix.class)
public interface UserService{
? @GetMapping("getUserByUserId")
? public User getUserByUserId(String userId);
}
public interface LocalUserService extends RemoteUserService{
? public String getUserId();
}
@Service
public class UserServiceImpl implements LocalUserService,RemoteUserService{
? @Autowired
? private HttpServletRequest request;
? @Autowire
? private RemoteUserService remoteUserService;
? public User getUserByUserId(String userId){
? ? return remoteUserService.getUserByUserId(userId);
? }
? public String getUserId(){
? ? return (String)request.getSession().getAttribute("user-id");
? }
}

SUCCESS:

這樣是可以的。編碼時稍微麻煩了一點,使用時就清晰多了。

FeignClient服務(wù)之間調(diào)用

服務(wù)A需調(diào)用服務(wù)B的test方法

B服務(wù)不動

A:

最好新建一個server

@Component
@FeignClient(value = "tools")
public interface ServiceAFeignClient {
?? ?@RequestMapping(value = "/hi")
? ? String test();
}

tools為服務(wù)B配置中的spring.application.name,  hi為B中Controller的接口

然后A中代碼調(diào)用新建的server的接口即可,可能會出錯

com.netflix.client.ClientException: Load balancer does not have available server for client

A的application配置加

ribbon:
? eureka:
? ? enabled: true

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Feign調(diào)用傳輸文件異常的解決

    Feign調(diào)用傳輸文件異常的解決

    這篇文章主要介紹了Feign調(diào)用傳輸文件異常的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot異常處理器的使用與添加員工功能實現(xiàn)流程介紹

    SpringBoot異常處理器的使用與添加員工功能實現(xiàn)流程介紹

    設(shè)計完了登錄與退出功能還只完成了冰山一角,經(jīng)過測試發(fā)現(xiàn),我們以url的方式來訪問網(wǎng)站時可以直接跳過登陸頁面進入后臺頁面,這樣顯然是不合理的,下面我們通過異常攔截器+boot來做到訪問限制,以及實現(xiàn)新增員工功能,制作全局異常處理器
    2022-10-10
  • springboot集成測試?yán)锏膔edis

    springboot集成測試?yán)锏膔edis

    這篇文章主要介紹了springboot集成測試?yán)锏膔edis,本文給大家分享了源碼,添加依賴添加mock的方法,需要的朋友可以參考下
    2018-11-11
  • java數(shù)據(jù)結(jié)構(gòu)圖論霍夫曼樹及其編碼示例詳解

    java數(shù)據(jù)結(jié)構(gòu)圖論霍夫曼樹及其編碼示例詳解

    這篇文章主要為大家介紹了java數(shù)據(jù)結(jié)構(gòu)圖論霍夫曼樹及其編碼示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • SpringBoot之自定義Schema擴展方式

    SpringBoot之自定義Schema擴展方式

    這篇文章主要介紹了SpringBoot之自定義Schema擴展方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Maven的常用命令總結(jié)大全

    Maven的常用命令總結(jié)大全

    這篇文章主要給大家介紹了Maven常用命令總結(jié)的相關(guān)資料,maven最大的作用就是用于對項目中jar包依賴的統(tǒng)一管理,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Java如何實現(xiàn)簡單的RPC框架

    Java如何實現(xiàn)簡單的RPC框架

    這篇文章主要介紹了Java如何實現(xiàn)簡單的RPC框架,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • SpringCloudGateway使用Skywalking時日志打印traceId解析

    SpringCloudGateway使用Skywalking時日志打印traceId解析

    這篇文章主要為大家介紹了SpringCloudGateway使用Skywalking時日志打印traceId解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 詳解Mybatis動態(tài)sql

    詳解Mybatis動態(tài)sql

    MyBatis的動態(tài)SQL是基于OGNL表達式的,它可以幫助我們方便的在SQL語句中實現(xiàn)某些邏輯。本文給大家介紹Mybatis動態(tài)sql小結(jié),感興趣的朋友參考下
    2016-04-04
  • java保留小數(shù)的四種實現(xiàn)方法

    java保留小數(shù)的四種實現(xiàn)方法

    這篇文章主要為大家詳細介紹了java保留小數(shù)的四種實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評論