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

SpringCloud Feign客戶端使用流程

 更新時(shí)間:2023年01月31日 14:44:12   作者:九洲帶魚(yú)  
在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)用存在的問(wèn)題

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

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

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

存在的問(wèn)題:

①代碼可讀性差,編程體驗(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ā)送,解決上面提到的問(wèn)題。

1.3Feign的使用

①書(shū)接上文,在orderservice中引入依賴

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

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

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

③編寫(xiě)Feign客戶端

新建一個(gè)接口,使用@FeignClient注解指定是哪個(gè)微服務(wù)。下面的與Controller寫(xiě)法類似對(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,訪問(wèn),查看效果

⑥小結(jié)

Feign的使用步驟

引入依賴

添加@EnableFeignClients注解

編寫(xiě)FeignClient接口

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

1.4自定義Feign的配置

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

配置Feign日志的兩種方式

①配置文件方式

全局生效:

feign:

client:

config:

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

局部生效:

feign:

client:

config:

userservice: # 寫(xiě)服務(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依賴

配置文件開(kāi)啟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)文章

  • Java 8 引入lambda表達(dá)式的原因解析

    Java 8 引入lambda表達(dá)式的原因解析

    這篇文章主要介紹了Java 8 引入lambda表達(dá)式的原因解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 詳解Spring Boot 使用Java代碼創(chuàng)建Bean并注冊(cè)到Spring中

    詳解Spring Boot 使用Java代碼創(chuàng)建Bean并注冊(cè)到Spring中

    本篇介紹了Spring Boot 使用Java代碼創(chuàng)建Bean并注冊(cè)到Spring中,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Spring Cloud  Hystrix實(shí)現(xiàn)服務(wù)容錯(cuò)的方法

    Spring Cloud  Hystrix實(shí)現(xiàn)服務(wù)容錯(cuò)的方法

    Hystrix是SpringCloud中重要的熔斷保護(hù)組件,由Netflix開(kāi)源,主要提供延遲和容錯(cuò)管理,以保障分布式系統(tǒng)的高可用性和魯棒性,通過(guò)封裝依賴項(xiàng)實(shí)現(xiàn)服務(wù)間隔離,引入回退邏輯應(yīng)對(duì)依賴服務(wù)故障,有效防止系統(tǒng)崩潰和服務(wù)級(jí)聯(lián)故障
    2024-10-10
  • SpringBoot集成jjwt和使用方式

    SpringBoot集成jjwt和使用方式

    本文詳細(xì)介紹了JWT依賴(以jjwt為例)的引入和使用方法,首先,需要在項(xiàng)目中引入jwt依賴,隨后在Spring的啟動(dòng)類application.yml中進(jìn)行相應(yīng)配置,最后,提供了一份完整的jwt工具類代碼,供讀者直接使用,以上內(nèi)容便是作者的個(gè)人經(jīng)驗(yàn)分享,期望能為讀者提供參考并得到支持
    2024-10-10
  • Java實(shí)現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法

    Java實(shí)現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法

    這篇文章主要介紹了Java實(shí)現(xiàn)的連續(xù)奇數(shù)(n+2*x)是合數(shù)的算法題暴力算法,本文包含運(yùn)算結(jié)果和實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-09-09
  • SpringBoot SSMP 整合案例分享

    SpringBoot SSMP 整合案例分享

    這篇文章主要介紹了SpringBoot SSMP 整合案例分享,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Java學(xué)習(xí)基礎(chǔ)之安裝JDK/配置JDK環(huán)境&IEDA工具安裝

    Java學(xué)習(xí)基礎(chǔ)之安裝JDK/配置JDK環(huán)境&IEDA工具安裝

    這篇文章主要介紹了Java學(xué)習(xí)基礎(chǔ)系列文章的第一篇,主要內(nèi)容是安裝JDK/配置JDK環(huán)境&IEDA工具安裝的相關(guān)資料,需要的朋友可以參考下
    2020-02-02
  • 新的Java訪問(wèn)mysql數(shù)據(jù)庫(kù)工具類的操作代碼

    新的Java訪問(wèn)mysql數(shù)據(jù)庫(kù)工具類的操作代碼

    本文通過(guò)實(shí)例代碼給大家介紹新的Java訪問(wèn)mysql數(shù)據(jù)庫(kù)工具類的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-12-12
  • Jedis對(duì)redis的五大類型操作代碼詳解

    Jedis對(duì)redis的五大類型操作代碼詳解

    這篇文章主要介紹了Jedis對(duì)redis的五大操作代碼詳解,分別是字符串、列表、散列、集合、有序集合,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot Mybatis 配置文件形式詳解

    SpringBoot Mybatis 配置文件形式詳解

    這篇文章主要介紹了SpringBoot Mybatis 配置文件形式詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03

最新評(píng)論