溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring Cloud聲明式客戶端調(diào)用工具Feign怎么用

發(fā)布時間:2021-10-19 18:04:57 來源:億速云 閱讀:142 作者:柒染 欄目:大數(shù)據(jù)

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è)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(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)容。

AI