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

SpringCloud整合OpenFeign問題

 更新時間:2024年05月13日 10:37:45   作者:藤井大叔  
這篇文章主要介紹了SpringCloud整合OpenFeign問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

什么是OpenFeign

Feign是NetFlix開發(fā)的聲明式、模板化的HTTP客戶端,F(xiàn)eign可以幫助我們更便捷的調用HTTP API,F(xiàn)eign支持多種注解,

例如Feign自帶的注解或者JAX-RS注解等,OpenFeign是對Feign的加強版,使其支持Spring MVC注解,另外還整合了Nacos和Ribbon,從而使用Feign更加的方便,F(xiàn)eign主要的優(yōu)勢就在于可以做到調用遠程服務時就像調用本地的服務一樣的體驗。

開發(fā)者完全感知不到是遠程API,更感知不到這是一個HTTP請求,它就像Dubbo一樣,consumer直接調用接口方法provider,而不需要通過常規(guī)的Http Client構造請求在解析返回數(shù)據(jù),主要還是解決了開發(fā)者無需關心調用遠程API或無需關心分布式環(huán)境開發(fā)

整合OpenFeign

引入依賴

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

然后在啟動類上加上Feign的注解:@EnableFeignClients

加上后就可以開始調用其他服務的方法了,具體實現(xiàn)如下

@FeignClient注解中就是去指定我們所要調用的服務信息,里面兩個參數(shù)意思我在代碼中給大家提示了,緊接著我們就可以像正常的調用service層去調用此方法了。

package com.fujii.order.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @Author: Fujii
 * @description:
 */

/**
 * name:指定調用rest接口所對應的服務名
 * path:指定調用rest接口所在的controller中的@RequestMapping
 */
@FeignClient(name = "stock-service",path = "/stock")
public interface StockFeignService {

    @GetMapping(value = "/reduct")
    public String reduct();
}

這里我也把示例給大家粘貼出來吧

package com.fujii.order.controller;

import com.fujii.order.feign.StockFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: Fujii
 * @description: 訂單服務
 */
@RestController
@RequestMapping(value = "/order")
public class OrderController {

    @Autowired
    private StockFeignService stockFeignService;

    @GetMapping(value = "/add")
    public String add(){
        System.out.println("下單成功!");
        String reduct = stockFeignService.reduct();
        return "下單成功!"+reduct;
    }
}

然后我們啟動服務查看是否能正常訪問,如下圖訪問正常,說明配置無誤

下面我在與大家說一下OpenFeign的其他的一些特性

日志配置

通過源碼可以看到日志等級分為4種

  • NONE【性能最佳,適用于生產環(huán)境】不記錄任何日志信息(默認級別)
  • BASIC【適用于生產環(huán)境追蹤問題】僅記錄請求方法、URL、響應狀態(tài)和執(zhí)行時間
  • HEADRS:記錄BASIC的基礎之上 在記錄請求和響應的HEAD
  • FULL:【適用于開發(fā)環(huán)境和測試環(huán)境問題定位】記錄請求和響應的HEAD、body和元數(shù)據(jù)

配置方式有兩種:

第一種:全局配置 使用@Configuration進行全局配置

package com.fujii.order.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @Author: Fujii
 * @description: OpenFeign日志輸出
 */
@Configuration
public class FeignConfig {

    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.FULL;
    }
}

這里配置好后大家在設置一個日志級別為DEBUG級別,因為springboot默認的日志級別是info,而feign的debug日志就不會輸出出來

logging:
  level:
    com.fujii.order.feign: debug

設置好后去調用API后可以看到我調用了兩個服務為stock-service的和product-service的

上面這種是全局配置,那么想要設置成局部配置 也是很簡單,只需要在上面的config配置類中將@configuration注解清除掉 然后在配置文件中局部配置即可

feign:
  client:
    config:
      product-service:
        loggerLevel: BASIC

重啟可查看到是生效了

還有一種方式就是直接在feign service的調用服務中去調用配置類也是可以生效具體實現(xiàn)如下:

契約配置

契約配置主要是解決我們之前可能有些項目中使用到了feign 用的是feign的一些注解 但是我想在這基礎之上升級為OpenFeign 又不去改變原來的代碼 那么就可以使用契約配置來解決,實現(xiàn)方式也很簡單,以下是設置成局部修改成feign

feign:
  client:
    config:
      product-service:
        loggerLevel: BASIC
        contract: feign.Contract.Default #設置為默認的契約模式

全局的需在配置文件中添加如下代碼

    @Bean
    public Contract feignContract(){
        return new Contract.Default();
    }

超時時間配置

超時時間主要是給我們的服務設置一個時間限制 超過這個限制則返回請求重試或者連接超時,設置起來也簡單,下面我來演示一下全局配置和局部配置

全局配置:

    @Bean
    public Request.Options options(){
        return new Request.Options(5000,10000);
    }

局部配置:

feign:
  client:
    config:
      product-service:
        loggerLevel: BASIC
        contract: feign.Contract.Default #設置為默認的契約模式
        #連接超時時間:默認是2秒
        connectionTimeout: 5000
        #請求處理超時時間 默認是5秒
        readTimeout: 3000

當超過限制之后,會報錯異常

自定義攔截器

openfign有一個攔截器可以幫助我們攔截服務中的一些請求的某些操作 實現(xiàn)的示例我放入以下參考,大家可以根據(jù)實際需求來擴展攔截的信息

package com.fujii.order.interceptor;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Author: Fujii
 * @description:
 */
public class CustomFeignIntercptor implements RequestInterceptor {
    Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public void apply(RequestTemplate requestTemplate) {
        requestTemplate.header("name","fujii");
        requestTemplate.query("id","1");
        requestTemplate.uri("9");
        logger.info("feign攔截器");
    }
}

在寫完攔截器之后我們還需要配置一下

feign:
  client:
    config:
      product-service:
        loggerLevel: BASIC
        contract: feign.Contract.Default #設置為默認的契約模式
        #連接超時時間:默認是2秒
        connectionTimeout: 5000
        #請求處理超時時間 默認是5秒
        readTimeout: 10000
        requestInterceptors[0]: #feign攔截器
         com.fujii.order.interceptor.CustomFeignIntercptor

總結

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

相關文章

  • java實現(xiàn)猜數(shù)字游戲

    java實現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 在Java代碼中解析html,獲取其中的值方法

    在Java代碼中解析html,獲取其中的值方法

    今天小編就為大家分享一篇在Java代碼中解析html,獲取其中的值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Java 字符串壓縮與解壓的開發(fā)記錄

    Java 字符串壓縮與解壓的開發(fā)記錄

    這篇文章主要介紹了Java 字符串壓縮與解壓的開發(fā)記錄,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • jvm字符串常量池在什么內存區(qū)域問題解析

    jvm字符串常量池在什么內存區(qū)域問題解析

    這篇文章主要介紹了jvm字符串常量池在什么內存區(qū)域的問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Springboot集成knife4j實現(xiàn)風格化API文檔

    Springboot集成knife4j實現(xiàn)風格化API文檔

    這篇文章主要介紹了Springboot如何集成knife4j實現(xiàn)風格化API文檔,幫助大家更好的使用springboot框架,感興趣的朋友可以了解下
    2020-12-12
  • 半小時通透Java的泛型

    半小時通透Java的泛型

    這篇文章主要給大家介紹了關于Java中泛型使用的方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2021-09-09
  • Java實現(xiàn)Excel表單控件的添加與刪除

    Java實現(xiàn)Excel表單控件的添加與刪除

    本文通過Java代碼示例介紹如何在Excel表格中添加表單控件,包括文本框、單選按鈕、復選框、組合框、微調按鈕等,以及如何刪除Excel中的指定表單控件,需要的可以參考一下
    2022-05-05
  • @JsonFormat?和?@DateTimeFormat?時間格式化注解(場景示例代碼)

    @JsonFormat?和?@DateTimeFormat?時間格式化注解(場景示例代碼)

    這篇文章主要介紹了@JsonFormat和@DateTimeFormat時間格式化注解,本文通過場景示例代碼詳解給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 詳解Struts2中json 相互引用死循環(huán)解決辦法

    詳解Struts2中json 相互引用死循環(huán)解決辦法

    本篇文章主要介紹詳解Struts2中json 相互引用死循環(huán)解決辦法,具有一定的參考價值,有興趣的可以了解一下。
    2017-01-01
  • Intellij搭建springmvc常見問題解決方案

    Intellij搭建springmvc常見問題解決方案

    這篇文章主要介紹了Intellij搭建springmvc常見問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10

最新評論