国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用Feign進行微服務之間的接口調用:Spring Cloud Alibaba中的聲明式服務調用

這篇具有很好參考價值的文章主要介紹了使用Feign進行微服務之間的接口調用:Spring Cloud Alibaba中的聲明式服務調用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、Feign介紹

????????Feign是一個聲明式的HTTP客戶端框架,用于簡化微服務架構中服務之間的通信。它是Spring Cloud框架的一部分,旨在提供一種優(yōu)雅且易于使用的方式來定義和調用HTTP請求。

????????Feign的設計目標是讓服務之間的通信變得更加簡單和直觀。通常情況下,在微服務架構中,一個服務需要調用另一個服務的API來獲取數(shù)據(jù)或執(zhí)行操作。使用傳統(tǒng)的方式,我們需要手動編寫HTTP請求、處理請求和響應等操作,而Feign的出現(xiàn)簡化了這個過程。

????????使用Feign,只需定義一個接口來描述要調用的服務的API,然后通過注解來配置請求和響應的處理方式。Feign會根據(jù)接口定義自動生成可用的HTTP請求,將請求發(fā)送到目標服務,并將響應轉換為適當?shù)膶ο箢愋头祷亍?/p>

Feign具有以下特性和優(yōu)勢:

  1. 聲明式的API定義:通過簡單地定義接口,可以清晰地描述服務之間的通信,而不必關注底層的HTTP細節(jié)。
  2. 內(nèi)置負載均衡支持:Feign與Spring Cloud的服務注冊和發(fā)現(xiàn)機制集成,可以自動實現(xiàn)負載均衡,輕松處理多個實例的服務調用。
  3. 請求和響應的自動序列化和反序列化:Feign可以自動處理請求和響應的序列化和反序列化,使您能夠以面向對象的方式處理數(shù)據(jù)。
  4. 整合服務熔斷和限流:Feign與Spring Cloud的熔斷器(如Hystrix)和限流器(如Sentinel)集成,可以提供服務熔斷和限流的能力,增加系統(tǒng)的穩(wěn)定性和可靠性。
  5. 易于擴展:Feign提供了可插拔的機制,允許您通過自定義配置和攔截器等方式來擴展和定制其行為。

?二、Feign的使用

這里我以 pig 項目為例進行說明。項目地址:https://gitee.com/log4j/pig

1. 項目模塊說明

pig
├── pig-auth -- 授權服務提供[3000]
└── pig-common -- 系統(tǒng)公共模塊
     ├── pig-common-bom -- 全局依賴管理控制
     ├── pig-common-core -- 公共工具類核心包
     ├── pig-common-datasource -- 動態(tài)數(shù)據(jù)源包
     ├── pig-common-job -- xxl-job 封裝
     ├── pig-common-log -- 日志服務
     ├── pig-common-mybatis -- mybatis 擴展封裝
     ├── pig-common-seata -- 分布式事務
     ├── pig-common-security -- 安全工具類
     ├── pig-common-swagger -- 接口文檔
     ├── pig-common-feign -- feign 擴展封裝
     └── pig-common-xss -- xss 安全封裝
├── pig-register -- Nacos Server[8848]
├── pig-gateway -- Spring Cloud Gateway網(wǎng)關[9999]
└── pig-upms -- 通用用戶權限管理模塊
     └── pig-upms-api -- 通用用戶權限管理系統(tǒng)公共api模塊
     └── pig-upms-biz -- 通用用戶權限管理系統(tǒng)業(yè)務處理模塊[4000]
└── pig-visual
     └── pig-monitor -- 服務監(jiān)控 [5001]
     ├── pig-codegen -- 圖形化代碼生成 [5002]
     ├── pig-sentinel-dashboard -- 流量高可用 [5003]
     └── pig-xxl-job-admin -- 分布式定時任務管理臺 [5004]

?2. Feign客戶端定義

(1)引入Feign依賴

在pig-upms-api模塊和pig-upms-biz模塊都需要引入feign依賴:

        <!--feign 注解依賴-->
        <dependency>
            <groupId>com.pig4cloud</groupId>
            <artifactId>pig-common-feign</artifactId>
            <optional>true</optional>
        </dependency>

(2)定義位置

????????在代碼中可以看到,F(xiàn)eign的客戶端定義在了 pig-upms-api 模塊中。將Feign的客戶端定義在pig-upms-api模塊下是一種常見的設計模式。這種模式的目的是將Feign的客戶端接口定義為API模塊的一部分,使得其他模塊可以通過引入pig-upms-api依賴來使用該API,并通過Feign實現(xiàn)與pig-upms-biz模塊(通用用戶權限管理系統(tǒng)的業(yè)務處理模塊)之間的通信。

使用Feign進行微服務之間的接口調用:Spring Cloud Alibaba中的聲明式服務調用,分布式,微服務,微服務,架構,Feign

?(3)Feign客戶端定義

RemoteUserService為例:

//標識這是一個Feign客戶端接口,contextId指定客戶端的id,用于和其他客戶端區(qū)分
//value="pig-upms-biz" 指定了要調用的服務名稱
@FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.UMPS_SERVICE)
public interface RemoteUserService {


	//通過用戶名查詢用戶、角色信息

	//@GetMapping注解指定了要調用的HTTP GET請求的路徑。這里是 /user/info/{username}
	//headers指定了請求的頭部信息,這里HEADER_FROM_IN的值是"from=Y"
	@GetMapping(value = "/user/info/{username}", headers = SecurityConstants.HEADER_FROM_IN)
	R<UserInfo> info(@PathVariable("username") String username);

	//通過手機號碼查詢用戶、角色信息
	@GetMapping(value = "/app/info/{phone}", headers = SecurityConstants.HEADER_FROM_IN)
	R<UserInfo> infoByMobile(@PathVariable("phone") String phone);
	
	//根據(jù)部門id,查詢對應的用戶 id 集合
	@GetMapping(value = "/user/ids", headers = SecurityConstants.HEADER_FROM_IN)
	R<List<Long>> listUserIdByDeptIds(@RequestParam("deptIds") Set<Long> deptIds);

}

實際上這個Feign客戶端會發(fā)送請求到SysUserController

使用Feign進行微服務之間的接口調用:Spring Cloud Alibaba中的聲明式服務調用,分布式,微服務,微服務,架構,Feign

?(4)在其他模塊測試

比如說,我想要在 pig-codegen 模塊下使用 Feign 進行接口調用,需要先在 codegen 模塊引入 pig-upms-api 的依賴,因為我們將Feign的客戶端定義在了pig-upms-api下。

        <!--upms api、model 模塊-->
        <dependency>
            <groupId>com.pig4cloud</groupId>
            <artifactId>pig-upms-api</artifactId>
        </dependency>

編寫一個測試Controller:

@RestController
@RequiredArgsConstructor  //自動生成構造方法,在生成FeignDemoController會將remoteUserService傳入
@RequestMapping("/feignDemo")
public class FeignDemoController {

	//注入Feign客戶端接口 RemoteUserService
	//定義為final 確保在實例化后變量不會發(fā)生意外改變
	private final RemoteUserService remoteUserService;

	@Inner(value = false)
	@GetMapping("/test")
	public R<UserInfo> test() {
		//假設傳入的用戶名是 admin
		String username = "admin";
		//調用feign中的info方法
		return remoteUserService.info(username);
	}
}

啟動服務測試,可以看到成功獲取到了admin用戶的信息:

使用Feign進行微服務之間的接口調用:Spring Cloud Alibaba中的聲明式服務調用,分布式,微服務,微服務,架構,Feign

補充:關于在兩種注入方式的理解:

在注入remoteUserService屬性時,可以使用@RequiredArgsConstructor注解或@Autowired注解兩種方式。這兩種方式有以下區(qū)別:

  1. @RequiredArgsConstructor: 當在類上使用@RequiredArgsConstructor注解時,它會自動為您生成一個構造方法,該構造方法會將remoteUserService作為參數(shù)傳入并進行注入。這種方式是通過構造函數(shù)注入依賴。使用@RequiredArgsConstructor注解可以簡化代碼,減少手動編寫構造方法的工作。

  2. @Autowired: 當在屬性上使用@Autowired注解時,它會自動將相應類型的實例注入到該屬性中。這種方式是通過字段注入依賴。Spring框架會自動掃描并查找與RemoteUserService類型匹配的實例,并將其注入到remoteUserService屬性中。使用@Autowired注解可以方便地進行依賴注入,但需要確保所需的實例存在且唯一。

總體而言,這兩種注入方式的效果是一樣的,都會將RemoteUserService注入到remoteUserService屬性中。選擇使用哪種方式取決于偏好和項目中的約定。使用@RequiredArgsConstructor可以提供更簡潔的代碼,而使用@Autowired則更加靈活,可以適應更多不同的場景。文章來源地址http://www.zghlxwxcb.cn/news/detail-551133.html

到了這里,關于使用Feign進行微服務之間的接口調用:Spring Cloud Alibaba中的聲明式服務調用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包