国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

客戶端遠(yuǎn)程調(diào)用Feign

gself / 3107人閱讀

摘要:多參請(qǐng)求使用使用使用構(gòu)建,不推薦注意這種方式不建議使用。主要是因?yàn)榭勺x性不好,而且如果參數(shù)為空的時(shí)候會(huì)有一些問題,例如會(huì)導(dǎo)致服務(wù)接收到的是,而不是。

# 客戶端遠(yuǎn)程調(diào)用

Feign 什么是Feign?
Feign是 Netflix 公司開源的聲明式HTTP客戶端

Github : Feign 源碼

為什么需要Feign?

原代碼可讀性不高

復(fù)雜的URL難以維護(hù)(https://user-center/s?wd={userId}&rsv_spt=1&rsv_iqid=0x93bff3cd000cf3da&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=4&rsv_sug1=4&rsv_sug7=100&rsv_t=10c2risCimsUZC0RBruMerdnQRN1gRxFI%2BywuD0L3LwGGNd2dR8XE6x%2FyFOjHnR0oEi0&rsv_sug2=0&inputT=1535&rsv_sug4=1535&rsv_sug=2

難以應(yīng)對(duì)需求的快速變化

編碼體驗(yàn)和我們寫JAVA差異較大

舉例重構(gòu)代碼
                //替換前 
        ResponseEntity userEntity = restTemplate.getForEntity(
                "http://user-center/users/{userId}",
                UserDTO.class, userId
        );
        UserDTO userDTO = new UserDTO();
        if (null != userEntity) {
            userDTO = userEntity.getBody();
            log.info("ShareService#findById userDTO: {}", userDTO);
        }

添加依賴

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

啟動(dòng)類添加注解 @EnableFeignClients

添加配置

實(shí)現(xiàn)對(duì)應(yīng)微服務(wù)的client

/**
 * IUserCenterFeignClient for 定義 user-center feign client
 *
 * @author Isaac.Zhang | 若初
 * @since 2019/7/15
 */
@FeignClient(name = "user-center")
public interface IUserCenterFeignClient {

    /**
     * Feign client 會(huì)將請(qǐng)求轉(zhuǎn)換為
     * http://user-center/users/{userId}
     *
     * @param userId 用戶id
     * @return 返回用戶對(duì)象
     */
    @GetMapping(path = "/users/{userId}")
    public UserDTO findById(@PathVariable Long userId);
}

替換后代碼

        //使用 FeignClient 來替換掉RestTemplate調(diào)用
        UserDTO userDTO = this.userCenterFeignClient.findById(userId);
Feign的組成

Feign的配置方式 Java Code
支持的配置項(xiàng)

自定義Feign日志級(jí)別

級(jí)別內(nèi)容

Demo

Tip : 有可能出現(xiàn)父子上下文重疊問題

在client添加配置

/**
 * IUserCenterFeignClient for 定義 user-center feign client
 *
 * @author Isaac.Zhang | 若初
 * @since 2019/7/15
 */
@FeignClient(name = "user-center",configuration = UserCenterFeignConfiguration.class)
public interface IUserCenterFeignClient {
   ...
}

編寫java配置文件

/**
 * UserCenterFeignConfiguration for 自定義user-center服務(wù)請(qǐng)求中,feign的配置信息
 * {@link @Configuration} 不能添加該注解,否則會(huì)和ribbon一樣,出現(xiàn)上下文重疊問題,造成配置全局共享
 * 如要添加該注解,需要將該類放在主程序啟動(dòng)掃描不到的包下
 *
 * @author Isaac.Zhang | 若初
 * @since 2019/7/15
 */
public class UserCenterFeignConfiguration {
    @Bean
    public Logger.Level level() {
        // 配置feign 日志級(jí)別,記錄請(qǐng)求和響應(yīng)的header、body以及元數(shù)據(jù)
        return Logger.Level.FULL;
    }
}

一定要在配置文件中添加該client 全路徑

logging:
  level:
   #com.sxzhongf: debug
    com.sxzhongf.sharedcenter.feignclients.IUserCenterFeignClient: debug

打印信息

2019-07-15 15:06:11.650 DEBUG 20286 --- [nio-8010-exec-1] c.s.s.f.IUserCenterFeignClient           : [IUserCenterFeignClient#findById] <--- HTTP/1.1 200 (402ms)
2019-07-15 15:06:11.651 DEBUG 20286 --- [nio-8010-exec-1] c.s.s.f.IUserCenterFeignClient           : [IUserCenterFeignClient#findById] content-type: application/json;charset=UTF-8
2019-07-15 15:06:11.651 DEBUG 20286 --- [nio-8010-exec-1] c.s.s.f.IUserCenterFeignClient           : [IUserCenterFeignClient#findById] date: Mon, 15 Jul 2019 07:06:11 GMT
2019-07-15 15:06:11.651 DEBUG 20286 --- [nio-8010-exec-1] c.s.s.f.IUserCenterFeignClient           : [IUserCenterFeignClient#findById] transfer-encoding: chunked
2019-07-15 15:06:11.652 DEBUG 20286 --- [nio-8010-exec-1] c.s.s.f.IUserCenterFeignClient           : [IUserCenterFeignClient#findById] 
2019-07-15 15:06:11.652 DEBUG 20286 --- [nio-8010-exec-1] c.s.s.f.IUserCenterFeignClient           : [IUserCenterFeignClient#findById] {"id":1,"wxId":"","wxNickname":"IsaacZhang","roles":"","avatarUrl":"aaa","createTime":"2019-07-11T06:08:18.000+0000","updateTime":"2019-07-11T06:08:18.000+0000","bonus":100}
2019-07-15 15:06:11.652 DEBUG 20286 --- [nio-8010-exec-1] c.s.s.f.IUserCenterFeignClient           : [IUserCenterFeignClient#findById] <--- END HTTP (173-byte body)
Configuration
支持的配置項(xiàng)

demo

使用配置文件來定義log level

#logging:
  #level:
   #com.sxzhongf: debug
    #com.sxzhongf.sharedcenter.feignclients.IUserCenterFeignClient: debug
feign:
  client:
    config:
      user-center: #單服務(wù)配置
        loggerLevel: full
---        
feign:
  client:
    config:
      default: #全局配置日志級(jí)別
        loggerLevel: full
Feign的繼承性

官方不建議使用

大多數(shù)公司使用?

架構(gòu)師需要根據(jù)自身業(yè)務(wù)情況來決定,是否需要將不同的微服務(wù)進(jìn)行業(yè)務(wù)耦合,還是使用冗余代碼的方式來解放業(yè)務(wù)耦合性。
Feign多參請(qǐng)求 Get

使用@SpringQueryMap

@FeignClient(name = "user-center")
public interface ITestUserCenterFeignClient {

    @GetMapping("/users/q")
    public UserDTO query(@SpringQueryMap UserDTO userDTO);
}

使用 @RequestParam

@FeignClient(name = "user-center")
public interface ITestUserCenterFeignClient {

    @RequestMapping(value = "/users/q",method = RequestMethod.GET)
    public UserDTO query(@RequestParam("id") Long id,@RequestParam("name") String name);
}

使用Map構(gòu)建,(不推薦)

@FeignClient(name = "user-center")
public interface ITestUserCenterFeignClient {

    @RequestMapping(value = "/users/q",method = RequestMethod.GET)
    public UserDTO query(@RequestParam Map conditions);
}
注意:這種方式不建議使用。主要是因?yàn)榭勺x性不好,而且如果參數(shù)為空的時(shí)候會(huì)有一些問題,例如map.put("username", null); 會(huì)導(dǎo)致user-center 服務(wù)接收到的username是"" ,而不是null。
Post

服務(wù)提供者方法

    @PostMapping("/create")
    public User createUser(@RequestBody User user){
        return null;
    }

服務(wù)調(diào)用者

@FeignClient(name = "user-center")
public interface ITestUserCenterFeignClient {

    @RequestMapping(value = "/users/q",method = RequestMethod.POST)
    public UserDTO query(@RequestBody UserDTO user);
}
Feign脫離服務(wù)注冊(cè)/Ribbon調(diào)用
@FeignClient(name = "xxxxx",url = "http://www.baidu.com")
public interface ITestBaiduFeignClient {

    @GetMapping("")
    public String getBaidu();
}
Feign 性能優(yōu)化 使用連接池 httpClient

加依賴

        
        
            io.github.openfeign
            feign-httpclient
        

加注解(不需要)

改配置

  httpclient:
    # 為feign啟用 apache httpclient 做請(qǐng)求,而不使用默認(rèn)的urlconection
    enabled: true
    # feign 最大連接數(shù)
    max-connections: 200
    # feign 單個(gè)路徑請(qǐng)求的最大連接數(shù)
    max-connections-per-route: 50
okHttp

加依賴

        
        
            io.github.openfeign
            feign-okhttp
        

加注解(不需要)

改配置

  httpclient:
    # 為feign啟用 apache httpclient 做請(qǐng)求,而不使用默認(rèn)的urlconection
    #enabled: true
    # feign 最大連接數(shù)
    max-connections: 200
    # feign 單個(gè)路徑請(qǐng)求的最大連接數(shù)
    max-connections-per-route: 50
  okhttp:
    enabled: true
合理使用Feign日志
生產(chǎn)環(huán)境使用Logger.Level.BASIC
RestTemplate RestTemplate VS. Feign

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75465.html

相關(guān)文章

  • SpringCloud(第 012 篇)微服務(wù)接入 Feign 負(fù)載均衡通過 FeignClient

    摘要:添加電影微服務(wù)啟動(dòng)類電影微服務(wù)接入進(jìn)行客戶端負(fù)載均衡,通過調(diào)用遠(yuǎn)程微服務(wù)。注解表示該電影微服務(wù)已經(jīng)接入模塊。 SpringCloud(第 012 篇)電影微服務(wù)接入 Feign 進(jìn)行客戶端負(fù)載均衡,通過 FeignClient 調(diào)用遠(yuǎn)程 Http 微服務(wù) - 一、大致介紹 1、本章節(jié)主要介紹在 SpringCloud 生態(tài)圈中,使用一個(gè)類似于 Java HTTP 客戶端的工具 Feig...

    Cobub 評(píng)論0 收藏0
  • spring cloud feign實(shí)現(xiàn)遠(yuǎn)程調(diào)用服務(wù)傳輸文件

    摘要:實(shí)踐案例包括兩個(gè)項(xiàng)目,服務(wù)提供者項(xiàng)目名,調(diào)用服務(wù)項(xiàng)目名,主要給出兩個(gè)服務(wù)之間的調(diào)用過程,文件上傳功能不提供項(xiàng)目框架依賴一文件上傳服務(wù)控制層文件上傳控制文件上傳文件上傳開始文件上傳結(jié)束,耗時(shí)文件上傳失敗業(yè)務(wù)層上傳文件判 實(shí)踐案例包括兩個(gè)項(xiàng)目,服務(wù)提供者項(xiàng)目名:upload-service,調(diào)用服務(wù)項(xiàng)目名:upload-client,主要給出兩個(gè)服務(wù)之間的調(diào)用過程,文件上傳功能不提供 項(xiàng)目...

    lmxdawn 評(píng)論0 收藏0
  • springCloud學(xué)習(xí)3(Netflix Hystrix彈性戶端

    摘要:在艙壁模式中可以隔離每個(gè)遠(yuǎn)程資源,并分配各自的線程池,使之互不影響。 springcloud 總集:https://www.tapme.top/blog/detail/2019-02-28-11-33 本次用到全部代碼見文章最下方。 一、為什么要有客戶端彈性模式 ??所有的系統(tǒng)都會(huì)遇到故障,分布式系統(tǒng)單點(diǎn)故障概率更高。如何構(gòu)建應(yīng)用程序來應(yīng)對(duì)故障,是每個(gè)軟件開發(fā)人員工作的關(guān)鍵部分。但是通...

    yagami 評(píng)論0 收藏0
  • 8、服務(wù)發(fā)現(xiàn)&服務(wù)消費(fèi)者Feign

    摘要:公眾號(hào)樂園的中提供了兩個(gè)組件實(shí)現(xiàn)軟負(fù)載均衡調(diào)用,分別是和。是基于和的客戶端負(fù)載工具,它是基于實(shí)現(xiàn)的,它可以在客戶端配置服務(wù)端列表,然后輪詢請(qǐng)求以實(shí)現(xiàn)均衡負(fù)載。 公眾號(hào):java樂園 spring cloud的Netflix中提供了兩個(gè)組件實(shí)現(xiàn)軟負(fù)載均衡調(diào)用,分別是Ribbon和Feign。上一篇和大家一起學(xué)習(xí)了Ribbon。Ribbon :Spring Cloud Ribbon是基于H...

    lpjustdoit 評(píng)論0 收藏0
  • SpringCloud學(xué)習(xí)(2)

    摘要:此為的結(jié)構(gòu)圖上篇已注冊(cè)了,的服務(wù),接下來用,實(shí)現(xiàn)負(fù)載均衡和的簡(jiǎn)單客戶端,讓消費(fèi)者調(diào)用服務(wù)。是發(fā)布的云中間層服務(wù)開源項(xiàng)目,其主要功能是提供客戶側(cè)軟件負(fù)載均衡算法,將的中間層服務(wù)連接在一起。對(duì)選定的負(fù)載均衡策略機(jī)上重試機(jī)制。 ??????????上篇已經(jīng)搭建好基礎(chǔ)demo,接下來繼續(xù)構(gòu)建項(xiàng)目并對(duì)spring cloud組件介紹描述。 showImg(https://segmentfault...

    wenzi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

gself

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<