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

遠(yuǎn)程調(diào)用@FeignClient注解屬性使用詳解

 更新時(shí)間:2022年10月20日 08:34:08   作者:austin流川楓  
這篇文章主要為大家介紹了遠(yuǎn)程調(diào)用@FeignClient注解屬性使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

Feign是聲明性的web服務(wù)客戶端。它使編寫web服務(wù)客戶端更加容易。通過Feign我們可以實(shí)現(xiàn)調(diào)用遠(yuǎn)程服務(wù)像調(diào)用本地一樣便捷。本篇文章主要詳細(xì)聊聊Feign下的一個(gè)核心注解@FeignClient相關(guān)屬性。

通過查閱@FeignClient源碼,可以看到它的注解包括以下屬性:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {
    @AliasFor("name")
    String value() default "";
    /** @deprecated */
    @Deprecated
    String serviceId() default "";
    String contextId() default "";
    @AliasFor("value")
    String name() default "";
    String qualifier() default "";
    String url() default "";
    boolean decode404() default false;
    Class<?>[] configuration() default {};
    Class<?> fallback() default void.class;
    Class<?> fallbackFactory() default void.class;
    String path() default "";
    boolean primary() default true;
}

name

定義當(dāng)前客戶端Client的名稱,等同于value屬性。

value

定義當(dāng)前客戶端Client的名稱,等同于name屬性。

serviceId

目前serviceId已經(jīng)廢棄了,直接使用name即可。

contextId

比如我們有個(gè)user服務(wù),但user服務(wù)中有很多個(gè)接口,我們不想將所有的調(diào)用接口都定義在一個(gè)類中,比如UserFeignClientA、UserFeignClentB,當(dāng)不同的Feignname一致的時(shí)候,這時(shí)候Bean的名稱就會沖突,解決方式可以通過指定不同的contextId來解決問題,舉個(gè)栗子:

UserFeignClientA

@FeignClient(name = "user.service", contextId = "userServiceA", url = "${user.service.url}", configuration = UserRemoteConfig.class)
public interface UserFeignClientA {
    /**
     * 獲取用戶默認(rèn)身份信息
     */
    @RequestMapping("/user/identity/default") 
    ResultData<UserVisaIdentity> getDefaultIdentity(@RequestParam("userId") String userId);
}

UserFeignClientB

@FeignClient(name = "user.service", contextId = "userServiceB" url = "${user.service.url}", configuration = UserRemoteConfig.class)
public interface UserFeignClientB {
    /**
     * 新增大客戶信息
     */
    @RequestMapping(value = {"/user/identity/saveIdentity"}, method = RequestMethod.POST)
    ResultData<UserVisaIdentity> saveIdentity(@RequestBody UserVisaIdentity userVisaIdentity);
}

url

url用于配置指定服務(wù)的地址,相當(dāng)于直接請求這個(gè)服務(wù)。

path

@FeignClient(name = "template-service", url = "${universal.service.url}", path = "template", configuration = {RemoteErrorDecoder.class})
public interface ITemplateFeignService {
    /**
     * 多條件查詢
     *
     * @param templateSearchDto 多條件查詢
     * @return 模板列表
     */
    @GetMapping("/search")
    ApiResult<PageResult<TemplateVo>> search(@Valid @SpringQueryMap TemplateSearchDto templateSearchDto);
}

path定義當(dāng)前FeignClient訪問接口時(shí)的統(tǒng)一前綴,比如接口地址是/user/get, 如果你定義了前綴是user, 那么具體方法上的路徑就只需要寫/get 即可。上面將假設(shè)universal.service.url地址為 http://universal.com ,那么調(diào)用search請求地址為:universal.com/template/se…

configuration

configuration是配置Feign配置類,在配置類中可以自定義FeignEncoderDecoder、LogLevel、Contract等。

fallback

fallback定義容錯(cuò)的處理類,也就是回退邏輯,fallback的類必須實(shí)現(xiàn)Feign Client的接口,無法知道熔斷的異常信息。比如:

@FeignClient(name = "account-service") 
 public interface AccountServiceClient { 
     @RequestMapping(method = RequestMethod.GET, value = "/accounts/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, fallback = AccountServiceClientFallback.class) 
     String getAccount(@PathVariable("accountName") String accountName); 
} 
@Component
public class AccountServiceClientFallback implements AccountServiceClient {
     private static final Logger LOGGER = LoggerFactory.getLogger(AccountServiceClientFallback.class); 
     @Override 
     public String getAccount(String accountName) { 
         LOGGER.error("Error during getAccount, accountName: {}", accountName); 
     } 
}

fallbackFactory

也是容錯(cuò)的處理,可以知道熔斷的異常信息??梢宰远xfallbackFactory

@Component
public class UserRemoteClientFallbackFactory implements FallbackFactory<UserRemoteClient> {
    private Logger logger = LoggerFactory.getLogger(UserRemoteClientFallbackFactory.class);
    @Override
    public UserRemoteClient create(Throwable cause) {
        return new UserRemoteClient() {
            @Override
            public User getUser(int id) {
                logger.error("UserRemoteClient.getUser異常", cause);
                return new User(0, "默認(rèn)");
            }
        };
    }
}
@FeignClient(value = "user-service", fallbackFactory = UserRemoteClientFallbackFactory.class)
public interface UserRemoteClient {
	@GetMapping("/user/get")
	public User getUser(@RequestParam("id") int id);
}

primary

primary對應(yīng)的是@Primary注解,默認(rèn)為true,官方這樣設(shè)置也是有原因的。當(dāng)我們的Feign實(shí)現(xiàn)了fallback后,也就意味著FeignClient有多個(gè)相同的BeanSpring容器中,當(dāng)我們在使用@Autowired進(jìn)行注入的時(shí)候,不知道注入哪個(gè),所以我們需要設(shè)置一個(gè)優(yōu)先級高的,@Primary注解就是干這件事情的。

qualifier

qualifier對應(yīng)的是@Qualifier注解,使用場景跟上面的primary關(guān)系很淡,一般場景直接@Autowired直接注入就可以了。

如果我們的Feign Clientfallback實(shí)現(xiàn),默認(rèn)@FeignClient注解的primary=true, 意味著我們使用@Autowired注入是沒有問題的,會優(yōu)先注入你的FeignClient

如果你把primary設(shè)置成false了,直接用@Autowired注入的地方就會報(bào)錯(cuò),不知道要注入哪個(gè)對象。

解決方案很明顯,你可以將primary設(shè)置成true即可,如果由于某些特殊原因,你必須得去掉primary=true的設(shè)置,這種情況下我們怎么進(jìn)行注入,我們可以配置一個(gè)qualifier,然后使用@Qualifier注解進(jìn)行注入,示列如下:

@FeignClient(name = "optimization-user", path="user", qualifier="userRemoteClient")
public interface UserRemoteClient {
	@GetMapping("/get")
	public User getUser(@RequestParam("id") int id);
}

Feign Client注入

@Autowired
@Qualifier("userRemoteClient")
private UserRemoteClient userRemoteClient;

好了,以上就是@FeignClient注解相關(guān)屬性說明。

以上就是遠(yuǎn)程調(diào)用@FeignClient注解屬性使用詳解的詳細(xì)內(nèi)容,更多關(guān)于@FeignClient 遠(yuǎn)程調(diào)用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中對象快速復(fù)制的幾種方式詳解

    Java中對象快速復(fù)制的幾種方式詳解

    這篇文章主要介紹了Java中對象快速復(fù)制的幾種方式詳解,對象的克隆是指創(chuàng)建一個(gè)新的對象,且新的對象的狀態(tài)與原始對象的狀態(tài)相同,當(dāng)對克隆的新對象進(jìn)行修改時(shí),不會影響原始對象的狀態(tài),需要的朋友可以參考下
    2023-08-08
  • springboot自定義redis-starter的實(shí)現(xiàn)

    springboot自定義redis-starter的實(shí)現(xiàn)

    這篇文章主要介紹了springboot自定義redis-starter的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • mybatis-plus主鍵生成策略

    mybatis-plus主鍵生成策略

    這篇文章主要介紹了mybatis-plus主鍵生成策略,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringMVC解析post請求參數(shù)詳解

    SpringMVC解析post請求參數(shù)詳解

    今天小編就為大家分享一篇解決SpringMVC接收不到ajaxPOST參數(shù)的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-08-08
  • SpringBoot發(fā)送各種復(fù)雜格式郵件的示例詳解

    SpringBoot發(fā)送各種復(fù)雜格式郵件的示例詳解

    本文主要介紹了如何使用JavaMailSender接口和MimeMessageHelper類,在SpringBoot實(shí)現(xiàn)發(fā)送帶有附件,嵌入資源,抄送和密送的復(fù)雜郵件,需要的可以了解下
    2024-11-11
  • springboot結(jié)合mybatis-plus快速生成項(xiàng)目模板的方法

    springboot結(jié)合mybatis-plus快速生成項(xiàng)目模板的方法

    Mybatis-Plus是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,接下來通過本文給大家分享springboot結(jié)合mybatis-plus快速生成項(xiàng)目模板的方法,感興趣的朋友一起看看吧
    2021-06-06
  • java線程池使用后到底要關(guān)閉嗎

    java線程池使用后到底要關(guān)閉嗎

    這篇文章主要給大家介紹了關(guān)于java線程池使用后到底要不要關(guān)閉的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Java中Lombok @Value注解導(dǎo)致的variable not been initialized問題

    Java中Lombok @Value注解導(dǎo)致的variable not been initialized問題

    本文主要介紹了Java中Lombok @Value注解導(dǎo)致的variable not been initialized問題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • springcloud如何使用Feign后臺內(nèi)部傳遞MultipartFile

    springcloud如何使用Feign后臺內(nèi)部傳遞MultipartFile

    這篇文章主要介紹了springcloud如何使用Feign后臺內(nèi)部傳遞MultipartFile,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • JAVA中常用的設(shè)計(jì)模式:單例模式,工廠模式,觀察者模式

    JAVA中常用的設(shè)計(jì)模式:單例模式,工廠模式,觀察者模式

    設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計(jì)模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。這些解決方案是眾多軟件開發(fā)人員經(jīng)過相當(dāng)長的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來的。
    2020-04-04

最新評論

乌拉特中旗| 平潭县| 舒兰市| 定日县| 鹰潭市| 新巴尔虎左旗| 营口市| 麻城市| 濉溪县| 文昌市| 阿拉善盟| 张掖市| 巴林左旗| 曲水县| 明水县| 阿勒泰市| 沁源县| 乌拉特前旗| 丰县| 上思县| 农安县| 若尔盖县| 嵩明县| 建水县| 郎溪县| 清涧县| 牡丹江市| 乌什县| 仁化县| 称多县| 安岳县| 凌海市| 梓潼县| 宁德市| 绩溪县| 江山市| 林州市| 兴安县| 丽江市| 且末县| 平武县|