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

SpringCloud Feign客戶端使用流程

 更新時(shí)間:2023年01月31日 14:44:12   作者:九洲帶魚  
在springcloud中,openfeign是取代了feign作為負(fù)載均衡組件的,feign最早是netflix提供的,他是一個(gè)輕量級(jí)的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負(fù)載均衡機(jī)制,因此feign可以作為一個(gè)負(fù)載均衡的遠(yuǎn)程服務(wù)調(diào)用框架使用

一.HTTP客戶端Feign

1.1RestTemplate方式調(diào)用存在的問題

以前我用使用RestTemplate發(fā)起遠(yuǎn)程調(diào)用的代碼:

String url = "http://userservice/user/" + order.getUserId();

User user = restTemplate.getForObject(url, User.class);

存在的問題:

①代碼可讀性差,編程體驗(yàn)體驗(yàn)不統(tǒng)一

②參數(shù)復(fù)雜的URL難以維護(hù)

1.2Feign的介紹

Feign是一個(gè)聲明式的http客戶端,官方地址:https://github.com/OpenFeign/feign

其作用就是幫助我們優(yōu)雅的實(shí)現(xiàn)http請(qǐng)求的發(fā)送,解決上面提到的問題。

1.3Feign的使用

①書接上文,在orderservice中引入依賴

  <!--feign客戶端依賴-->
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-openfeign</artifactId>
   </dependency>

②在啟動(dòng)類上添加注解開啟Feign的功能

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients #開啟Feign功能
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

③編寫Feign客戶端

新建一個(gè)接口,使用@FeignClient注解指定是哪個(gè)微服務(wù)。下面的與Controller寫法類似對(duì)應(yīng)

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

主要是基于SpringMVC的注解來(lái)聲明遠(yuǎn)程調(diào)用的信息,比如:

服務(wù)名稱:userservice

請(qǐng)求方式:GET

請(qǐng)求路徑:/user/{id}

請(qǐng)求參數(shù):Long id

返回值類型:User

④用Feign客戶端代替RestTemplate

在orderservice中,更改之前我們使用的RestTemplate

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private UserClient userClient;
    public Order queryOrderById(Long orderId) {
        // 1.查詢訂單
        Order order = orderMapper.findById(orderId);
        //2.用feign遠(yuǎn)程調(diào)用
        User user = userClient.findById(order.getUserId());
        //3.封裝user到Order里
        order.setUser(user);
        // 4.返回
        return order;
    }
}

⑤重啟orderservice,訪問,查看效果

⑥小結(jié)

Feign的使用步驟

引入依賴

添加@EnableFeignClients注解

編寫FeignClient接口

使用FeignClient中定義的方法代替RestTemplate

1.4自定義Feign的配置

Feign運(yùn)行自定義配置來(lái)覆蓋默認(rèn)配置,可以修改的配置如下:

配置Feign日志的兩種方式

①配置文件方式

全局生效:

feign:

client:

config:

default: # 這里用default就是全局配置,如果是寫服務(wù)名稱,則是針對(duì)某個(gè)微服務(wù)的配置 loggerLevel: FULL # 日志級(jí)別

局部生效:

feign:

client:

config:

userservice: # 寫服務(wù)名稱,則是針對(duì)某個(gè)微服務(wù)的配置

loggerLevel: FULL # 日志級(jí)別

②java代碼方式

首先需要聲明一個(gè)Bean

public class FeignClientConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC;
}
}

如果要使用全局配置,把他放到@EnableFeignClients這個(gè)注解中

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)

如果要使用局部配置,把他放到@FeignClient這個(gè)注解中

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class)

③小結(jié)

Feign的日志配置:

方式一是配置文件,feign.client.config.xxx.loggerLevel

如果xxx是default則代表全局

如果xxx是服務(wù)名稱,例如userservice則代表某服務(wù)

方式二是java代碼配置Logger.Level這個(gè)Bean

如果在@EnableFeignClients注解聲明則代表全局

如果在@FeignClient注解中聲明則代表某服務(wù)

1.5Feign性能優(yōu)化

Feign底層的客戶端實(shí)現(xiàn):

URLConnection:默認(rèn)實(shí)現(xiàn),不支持連接池

Apache HttpClient :支持連接池

OKHttp:支持連接池

因此優(yōu)化Feign的性能主要包括:

使用連接池代替默認(rèn)的URLConnection

日志級(jí)別,最好用basic或none

Feign的性能優(yōu)化-連接池配置

Feign添加HttpClient的支持:

①引入依賴

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

②配置連接池

feign:
  httpclient:
    enabled: true #支持httpclient
    max-connections: 200 #最大連接數(shù)
    max-connections-per-route: 50 #單個(gè)請(qǐng)求路徑最大連接數(shù)

③小結(jié)

Feign的優(yōu)化:

日志級(jí)別盡量用basic

使用HttpClient或OKHttp代替URLConnection

引入feign-httpClient依賴

配置文件開啟httpClient功能,設(shè)置連接池參數(shù)

1.6Feign的最佳實(shí)踐

將FeignClient抽取為獨(dú)立模塊,并且將與接口相關(guān)的POJO、默認(rèn)的Feign配置都放在這個(gè)模塊,提供給所有消費(fèi)者使用

①新建一個(gè)模塊,明明為feign(自定義)

②導(dǎo)入有關(guān)依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

③將pojo、配置類、Feign的接口復(fù)制到feign模塊里

④orderservice中導(dǎo)入feign模塊的依賴

<dependency>
    <groupId>cn.itcast.demo</groupId>
    <artifactId>feign</artifactId>
    <version>1.0</version>
</dependency>

⑤將orderservice中有關(guān)feign調(diào)用的包都改成模塊的

⑥重啟測(cè)試

當(dāng)定義的FeignClient不在SpringBootApplication的掃描包范圍時(shí),這些FeignClient無(wú)法使用。有兩種方式解決:

方式一:指定FeignClient所在包

@EnableFeignClients(basePackages = "cn.itcast.feign.clients")

方式二:指定FeignClient字節(jié)碼

@EnableFeignClients(clients = {UserClient.class})

到此這篇關(guān)于SpringCloud Feign客戶端使用流程的文章就介紹到這了,更多相關(guān)SpringCloud Feign內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea 如何查找類中的某個(gè)方法

    idea 如何查找類中的某個(gè)方法

    這篇文章主要介紹了idea 如何查找類中的某個(gè)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java超詳細(xì)講解三大特性之一的封裝

    Java超詳細(xì)講解三大特性之一的封裝

    封裝是一個(gè)非常廣泛的概念,小到一個(gè)屬性的封裝,大到一個(gè)框架或者一個(gè)項(xiàng)目的封裝,下面這篇文章主要給大家介紹了關(guān)于java中封裝的那點(diǎn)事,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 使用Java實(shí)現(xiàn)DNS域名解析的簡(jiǎn)單示例

    使用Java實(shí)現(xiàn)DNS域名解析的簡(jiǎn)單示例

    這篇文章主要介紹了使用Java實(shí)現(xiàn)DNS域名解析的簡(jiǎn)單示例,包括對(duì)一個(gè)動(dòng)態(tài)IP主機(jī)的域名解析例子,需要的朋友可以參考下
    2015-10-10
  • JAVA的反射機(jī)制你了解多少

    JAVA的反射機(jī)制你了解多少

    這篇文章主要為大家詳細(xì)介紹了JAVA的反射機(jī)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • @Autowired自動(dòng)裝配,@Bean注入@Primary,@Qualifier優(yōu)先級(jí)講解

    @Autowired自動(dòng)裝配,@Bean注入@Primary,@Qualifier優(yōu)先級(jí)講解

    這篇文章主要介紹了@Autowired自動(dòng)裝配,@Bean注入@Primary,@Qualifier優(yōu)先級(jí),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java字符流緩沖區(qū)詳解

    java字符流緩沖區(qū)詳解

    這篇文章主要為大家詳細(xì)介紹了java字符流緩沖區(qū)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • MyBatis實(shí)現(xiàn)CRUD的示例代碼

    MyBatis實(shí)現(xiàn)CRUD的示例代碼

    本文主要介紹了MyBatis實(shí)現(xiàn)CRUD的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • JAVA三種異常處理機(jī)制的具體使用

    JAVA三種異常處理機(jī)制的具體使用

    異常是程序在編譯或執(zhí)行的過(guò)程中可能出現(xiàn)的問題,本文主要介紹了JAVA三種異常處理機(jī)制的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 使用Jackson-json解析一個(gè)嵌套的json字符串

    使用Jackson-json解析一個(gè)嵌套的json字符串

    這篇文章主要介紹了使用Jackson-json解析一個(gè)嵌套的json字符串,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 超詳細(xì)講解異常的處理

    Java 超詳細(xì)講解異常的處理

    異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會(huì)根據(jù)身體情況選擇喝開水、吃藥、看病、等 異常處理方法。 java異常處理機(jī)制是我們java語(yǔ)言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力,程序出現(xiàn)的錯(cuò)誤,程序可以安全的退出,以保證程序正常的運(yùn)行等
    2022-04-04

最新評(píng)論

苍溪县| 咸阳市| 青州市| 绥江县| 祁连县| 富民县| 罗甸县| 安远县| 陆丰市| 沙雅县| 东源县| 菏泽市| 连州市| 常熟市| 张家口市| 惠安县| 顺平县| 翁牛特旗| 通辽市| 定日县| 宝应县| 呈贡县| 吕梁市| 惠来县| 出国| 明光市| 甘孜| 定陶县| 昭苏县| 故城县| 梨树县| 双桥区| 澄江县| 宁夏| 新昌县| 黔西县| 财经| 平顺县| 陵川县| 舟山市| 通化市|