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

從零開始學(xué)springboot整合feign跨服務(wù)調(diào)用的方法

 更新時間:2021年03月02日 10:31:38   作者:CTO技術(shù)  
這篇文章主要介紹了從零開始學(xué)springboot整合feign跨服務(wù)調(diào)用的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

介紹

微服務(wù)橫行的互聯(lián)網(wǎng)世界, 跨服務(wù)調(diào)用顯得很平凡, 我們除了采用傳統(tǒng)的http方式接口調(diào)用, 有沒有更為優(yōu)雅方便的方法呢?

答案是肯定的,feign就提供了輕便的方式!

如果你的服務(wù)都注冊了注冊中心,比如nacos, 那么調(diào)用會顯得很輕松, 只需一個注解, 帶上需要調(diào)用的服務(wù)名即可,**feign + nacos**會幫你做剩余的事.

如果沒有注冊中心, 也無需擔(dān)心, feign一樣可以以傳統(tǒng)的

ip:port

方式進行調(diào)用~

下面,我們來實踐下吧

springboot整合feign

引入依賴, 這里注意, spring-cloud.version記得要和spring-boot版本匹配, 我這里spring-boot版本是2.1.3, 所以spring-cloud選擇Greenwich.SR2版本.

大致的版本對應(yīng)關(guān)系如下

image.png

更詳細的請去https://start.spring.io/actuator/info
查詢!

<properties>
  <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>

<dependencyManagement>
  <dependencies>
   <!--SpringCloud依賴 -->
   <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
   </dependency>
  </dependencies>
 </dependencyManagement>

 <dependencies>
  <!--openfeign跨服務(wù)調(diào)用-->
  <dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <!--openfeign底層使用ApacheHttpClient調(diào)用-->
  <dependency>
   <groupId>io.github.openfeign</groupId>
   <artifactId>feign-httpclient</artifactId>
  </dependency>
 </dependencies>

然后我們?nèi)ロ椖康膯宇惿霞由献⒔?br /> @EnableFeignClients

image.png

最后, 加上Feign的配置
application.properties

server.port=9999
#******************openfeign配置,參數(shù)采用的是默認的配置,可根據(jù)實際情況調(diào)整***********************
#啟用ApacheHttpClient。默認就是true,使用HttpClientConnectionManager管理連接復(fù)用
feign.httpclient.enabled=true
#連接池的最大連接數(shù),默認200
feign.httpclient.max-connections=200
#每個路由(服務(wù)器)分配的組最大連接數(shù),默認50
feign.httpclient.max-connections-per-route=50
#連接最大存活時間,默認900秒
feign.httpclient.time-to-live=900
#連接最大存活時間單位秒
feign.httpclient.time-to-live-unit=seconds
#FeignAcceptGzipEncodingInterceptor攔截器被激活,會在header中添加Accept-Encoding:gzip,deflate,表明服務(wù)端在返回值時可以使用如下兩個方式壓縮返回結(jié)果
feign.compression.response.enabled=true
#FeignContentGzipEncodingInterceptor攔截器被激活,會在header中添加Content-Encoding:gzip,deflate,表明body中的參數(shù)是使用這兩個方式的壓縮
feign.compression.request.enabled=true
#content-length大于2048就進行請求參數(shù)的gzip壓縮
feign.compression.request.minRequestSize=2048

#開啟斷路器
feign.hystrix.enabled=true
#斷路器的隔離策略,默認就是線程池,SEMAPHORE模式下,就是主線程調(diào)用的遠程的服務(wù),即同步的
hystrix.command.default.execution.isolation.strategy=THREAD
#斷路器超時設(shè)置
hystrix.command.default.execution.timeout.enabled=true
#總體請求在45秒還是無法得到響應(yīng),建議觸發(fā)熔斷(ribbon每個請求讀取15秒超時,兩個實例重試就是30秒,openfeign外層默認會進行一次調(diào)用,4次重試)
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=45000
#斷路器的線程池存在一個問題,在隊列滿了以后,不會再去創(chuàng)建新的線程直到maximumSize
#核心線程池大小
hystrix.threadpool.default.coreSize=10
#最大線程池大小
hystrix.threadpool.default.maximumSize=10
#超過這個空閑時間,多于coreSize數(shù)量的線程會被回收,1分鐘
hystrix.threadpool.default.keepAliveTimeMinutes=1
#隊列的大小,默認為-1,即沒有隊列
hystrix.threadpool.default.maxQueueSize=200
#隊列任務(wù)達到此閾值后,就開始拒絕;實際使用此參數(shù)進行隊列是否滿的判斷
hystrix.threadpool.default.queueSizeRejectionThreshold=180

#負載均衡配置
#讀取超時15秒,與原RestTemplate保持一致
ribbon.ReadTimeout=15000
#連接超時15秒,與原RestTemplate保持一致
ribbon.ConnectTimeout=15000
##每臺服務(wù)器最多重試次數(shù),但是首次調(diào)用不包括在內(nèi)
ribbon.MaxAutoRetries=0
##最多重試多少臺服務(wù)器,與實際實例數(shù)保持一致(不包括首臺)
ribbon.MaxAutoRetriesNextServer=1
#是否所有操作都重試,
# false:get請求中,連接超時,讀取超時都會重試,其他請求(put,post)連接超時重試,讀取超時不重試。
# true:get請求中,連接超時,讀取超時都會重試,其他請求(put,post)連接超時重試,讀取超時重試。
#對于請求(put,post)要做好接口的冪等性
ribbon.OkToRetryOnAllOperations=true

spring-boot整合feign完成, 接下來我們編寫測試代碼

測試代碼

兩個服務(wù)

  • sb-alibaba-nacos (被調(diào)用方服務(wù), 127.0.0.1:8081), 提供 getInfoById接口
  • sb-feign (調(diào)用方服務(wù), 127.0.0.1:9999), 提供 getInfoById 測試接口

sb-alibaba-nacos提供的測試接口

@GetMapping(value = "getInfoById")
 public String getInfoById(@RequestParam(value = "id") Long Id) {
  return "example-service return :" + Id;
 }

sb-feign相關(guān)代碼

我們新建個包 feign,用來放所有涉及跨服務(wù)調(diào)用的類

image.png

ExampleControllerFeignClient.java:

package com.mrcoder.sbfeign.feign;

import feign.hystrix.FallbackFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = "sb-alibaba-nacos", url = "http://127.0.0.1:8081/", fallbackFactory = ExampleControllerFeignClient.ExampleControllerFeignClientFallbackFactory.class)
public interface ExampleControllerFeignClient {

 @GetMapping(value = "getInfoById")
 String getInfoById(@RequestParam(value = "id") Long Id);

 /**
  * 服務(wù)降級內(nèi)部類
  */
 @Component
 class ExampleControllerFeignClientFallbackFactory implements FallbackFactory<ExampleControllerFeignClient> {

  private Logger logger = LoggerFactory.getLogger(ExampleControllerFeignClientFallbackFactory.class);

  @Override
  public ExampleControllerFeignClient create(Throwable cause) {
   return new ExampleControllerFeignClient() {
    @Override
    public String getInfoById(Long signingLogId) {
     logger.error("跨服務(wù)調(diào)用失敗, 原因是:" + cause.getMessage());
     return "失敗, 原因是:" + cause.getMessage();
    }
   };
  }
 }
}

關(guān)鍵代碼就是

@FeignClient(name = "sb-alibaba-nacos", url = "http://127.0.0.1:8081/", fallbackFactory = ExampleControllerFeignClient.ExampleControllerFeignClientFallbackFactory.class)
  • name 就是被調(diào)用方的服務(wù)名稱 (這里如果你沒有配置服務(wù)注冊中心的化,其實可以隨便寫)
  • url 就是被調(diào)用方的地址(如果配置了服務(wù)注冊中心, 可以不寫!, 不過兩個服務(wù)必須都注冊!,這樣才能找到!)
  • fallbackFactory 就是調(diào)用失敗時指定的處理類

最后, 我們寫個測試方法

package com.mrcoder.sbfeign.controller;

import com.mrcoder.sbfeign.feign.ExampleControllerFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@CrossOrigin
@RestController
public class TestController {

 @Autowired
 private ExampleControllerFeignClient exampleControllerFeignClient;

 @RequestMapping(value = "getInfoById", method = RequestMethod.GET)
 public String test(@RequestParam(value = "id") Long Id) {
  return exampleControllerFeignClient.getInfoById(Id);
 }
}

開啟兩個服務(wù)sb-alibaba-nacos, sb-feign

而后訪問sb-feign的測試方法

http://localhost:9999/getInfoById?id=22

出現(xiàn)

sb-alibaba-nacos return :22

跨服務(wù)調(diào)用成功~

到此這篇關(guān)于從零開始學(xué)springboot整合feign跨服務(wù)調(diào)用的文章就介紹到這了,更多相關(guān)springboot整合feign跨服務(wù)調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go Java算法之簡化路徑實例詳解

    Go Java算法之簡化路徑實例詳解

    這篇文章主要為大家介紹了Go Java算法之簡化路徑實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 關(guān)于Mybatis的@param注解及多個傳參

    關(guān)于Mybatis的@param注解及多個傳參

    這篇文章主要介紹了關(guān)于Mybatis的@param注解及多個傳參,@Param的作用就是給參數(shù)命名,比如在mapper里面某方法A(int id),當(dāng)添加注解后A(@Param(“userId”) int id),也就是說外部想要取出傳入的id值,只需要取它的參數(shù)名userId就可以了,需要的朋友可以參考下
    2023-05-05
  • SpringBoot @PostConstruct原理用法解析

    SpringBoot @PostConstruct原理用法解析

    這篇文章主要介紹了SpringBoot @PostConstruct原理用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • IDEA中創(chuàng)建maven項目webapp目錄無法識別即未被標識的解決辦法

    IDEA中創(chuàng)建maven項目webapp目錄無法識別即未被標識的解決辦法

    在學(xué)習(xí)SpringMVC課程中,基于IDEA新建maven項目模塊后,webapp目錄未被標識,即沒有小藍點的圖標顯示,所以本文給大家介紹了IDEA中創(chuàng)建maven項目webapp目錄無法識別即未被標識的解決辦法,需要的朋友可以參考下
    2024-03-03
  • Java IO流深入理解

    Java IO流深入理解

    這篇文章主要介紹了java IO流的深入理解,下面和小編來一起學(xué)習(xí)一下吧,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容
    2021-07-07
  • Java中線程組ThreadGroup與線程池的區(qū)別及示例

    Java中線程組ThreadGroup與線程池的區(qū)別及示例

    這篇文章主要介紹了Java中線程組與線程池的區(qū)別及示例,ThreadGroup是用來管理一組線程的,可以控制線程的執(zhí)行,查看線程的執(zhí)行狀態(tài)等操作,方便對于一組線程的統(tǒng)一管理,需要的朋友可以參考下
    2023-05-05
  • SpringCloud微服務(wù)之Config知識總結(jié)

    SpringCloud微服務(wù)之Config知識總結(jié)

    今天帶大家學(xué)習(xí)SpringCloud微服務(wù)中的Config的相關(guān)知識,文中有非常詳細的介紹,對正在學(xué)習(xí)SpringCloud微服務(wù)的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法

    Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法

    通過Java程序展示如何來實現(xiàn)創(chuàng)建模板,并通過郵件合并功能來合并文本數(shù)據(jù)和圖片數(shù)據(jù)的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-07-07
  • SpringBoot項目nohup啟動運行日志過大的解決方案

    SpringBoot項目nohup啟動運行日志過大的解決方案

    這篇文章主要介紹了SpringBoot項目nohup啟動運行日志過大的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java 中 Reference用法詳解

    Java 中 Reference用法詳解

    這篇文章主要介紹了Java 中 Reference用法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評論

多伦县| 寿光市| 德令哈市| 藁城市| 逊克县| 日喀则市| 山阴县| 五莲县| 马龙县| 祁连县| 阳城县| 阳城县| 门源| 黄山市| 兴安县| 台湾省| 运城市| 桂林市| 碌曲县| 汝城县| 福清市| 息烽县| 连平县| 武义县| 丰城市| 新河县| 忻州市| 松江区| 东莞市| 沁水县| 南充市| 建瓯市| 曲周县| 尉氏县| 宁陵县| 班玛县| 长乐市| 辰溪县| 娄烦县| 修水县| 峨眉山市|