您好,登錄后才能下訂單哦!
Spring Cloud聲明式客戶端調(diào)用工具Feign怎么用,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
一、簡介 feign 整合了rabbion 和 hytrix,完美兼容了spring mvc,使服務(wù)調(diào)用變得簡單。 二、Ribbon和Feign的區(qū)別
Spring Cloud中支持兩種客戶端調(diào)用工具:
1.是Ribbon中的RestTemplate
2.是Feign
Ribbon :是一個基于 HTTP 和 TCP 客戶端的負(fù)載均衡器
Feign: Spring Cloud Netflix 的微服務(wù)都是以 HTTP 接口的形式暴露的,所以可以用 Apache 的 HttpClient 或 Spring 的 RestTemplate 去調(diào)用,
是在Ribbon的基礎(chǔ)上進(jìn)一步進(jìn)行Http封裝的Http客戶端,它是一種以接口+注解 形式實(shí)現(xiàn)微服務(wù)調(diào)用的聲明式客戶端調(diào)用工具。
它還整合了Spring Cloud Ribbon和Spring Cloud Hystrix。
特別指出:可以查看spring-cloud-netflix-core的jar包層級結(jié)構(gòu),清晰看出Netflix、Feign和Ribbon的關(guān)系
**總結(jié):**Ribbon的RestTemplate接口調(diào)用方式,一般不用;
Feign聲明式接口調(diào)用方式,建議使用。
二、實(shí)戰(zhàn)使用
A、Jar包依賴
Spring Boot 1.x版本依賴Feign
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
Spring Boot 2.x版本依賴Feign
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
**注意:**Spring Boot1.x和2.x兩個版本引用Feign的名稱不一樣
B、Feign接口聲明
@FeignClient(name = "tigbss-report") public interface ReportFeignService { @RequestMapping(value = "/openApi/manage/queryReportDetailByReportAndVersionId", method = RequestMethod.GET) ResponseObject queryRptDtail(@RequestParam(value = "reportId") String reportId, @RequestParam(value = "versionId") String versionId, @RequestParam(value = "systemLabel") Integer systemLabel);
注意:
**1、聲明的是****接口,**不是類
2、@FeignClient(name = "tigbs-report"),@RequestMapping,這兩個注解是必須的
3、接口類上不能加@RestController,因?yàn)榻涌谑浅橄箢?,不能被?shí)例化
C、Feign接口被調(diào)用入口
@RestController @RequestMapping("api/operate/") public class ReportManageController { @Autowired private ReportFeignService reportFeignService; /** * @param reportId 報(bào)表id * @param versionId 報(bào)表版本id * @return ResponseObject */ @ApiOperation(value = "查詢報(bào)表詳情", notes = "查詢報(bào)表詳情 ") @ApiImplicitParams({@ApiImplicitParam(paramType = "query", name = "reportId", value = "報(bào)表ID", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "versionId", value = "報(bào)表版本ID", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "systemLabel", value = "系統(tǒng)標(biāo)識", required = true, dataType = "int")}) @RequestMapping(value = "reportDetail", method = RequestMethod.GET) public ResponseObject reportDetail(@RequestParam(value = "reportId") String reportId, @RequestParam(value = "versionId") String versionId) { return reportFeignService.queryRptDtail(reportId, versionId, 3); }
D、啟動類加上啟動Feign客戶端注解@EnableFeignClients
// 啟用自動配置 @ComponentScan(value = { "com.drpp", "com.framework.workflow" }) @EnableFeignClients(basePackages = { "com.drpp" }) @SpringBootApplication @EnableTransactionManagement @ImportResource(locations = { "classpath:spring-res.xml" }) @EnableAutoConfiguration @EnableDiscoveryClient @EnableHystrix @EnableEurekaClient @ServletComponentScan({ "com.drpp" }) public class CmsApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(CmsApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(CmsApplication.class); } @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }
到此,F(xiàn)eign客戶端調(diào)用的實(shí)戰(zhàn)使用就結(jié)束了,就是那么so easy~~,繼續(xù)加油吧~~
看完上述內(nèi)容,你們掌握Spring Cloud聲明式客戶端調(diào)用工具Feign怎么用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。