最適合新手入門的SpringCloud教程 7—OpenFeign「F版本」

鹿小洋的Java筆記發表於2020-04-05

SpringCloud版本:Finchley.SR2 SpringBoot版本:2.0.3.RELEASE 原始碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

前言

Tips:OpenFeign的使用類似於Dao介面的開發

上一篇使用了RestTemplate的服務呼叫,但是有一些問題:通過RestTemplate傳送請求時候,攜帶引數比較的繁瑣,另外RestTemplate中需要寫完整的Url,這一步也是比較麻煩的。

今天就來分享一種更加簡單的方式,OpenFeign的方式。

OpenFeign

什麼是OpenFeign

OpenFeign是宣告式的Http客戶端,通過OpenFeign傳送Http請求非常的簡單

  • 註解式開發,介面+註解的方式
  • OpenFeign支援多種的物件的序列化 和 反序列化的工具
  • OpenFeign預設整合了Ribbon,可以直接進行負載均衡

Feign 和 OpenFeign是兩個技術,都是作為服務呼叫存在的,OpenFeign 是SpringCloud在Feign的基礎上進行封裝得到的,支援SpringMvc的註解。

OpenFeign的使用

Tips:程式碼在之前專案的基礎上進行開發,原始碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

建立OpenFeign的專案

1.建立新Module專案 cloud-openfeign-8806

2.pom檔案匯入依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud-demo-20f</artifactId>
        <groupId>com.lby</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
&lt;artifactId&gt;cloud-openfeign-8806&lt;/artifactId&gt;

&lt;dependencies&gt;
複製程式碼

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

    &lt;!--        Eureka 客戶端的依賴--&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt;
        &lt;artifactId&gt;spring-cloud-starter-netflix-eureka-client&lt;/artifactId&gt;
    &lt;/dependency&gt;

    &lt;!--        web的依賴--&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
    &lt;/dependency&gt;

    &lt;!--        測試的依賴--&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
        &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;
複製程式碼
複製程式碼

</project> 複製程式碼

3.啟動類

package com.lby;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients;

/**

  • @EnableFeignClients OpenFeign的註解 */ @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class OpenFeignRun8806 { public static void main(String[] args) { SpringApplication.run(OpenFeignRun8806.class,args); }

}

複製程式碼

複製程式碼

4.配置檔案

server:
  port: 8806

#指定當前服務的名稱 會註冊到註冊中心 spring: application: name: eureka-openfeign-8806

指定 服務註冊中心的地址

複製程式碼

eureka: client: serviceUrl: defaultZone: http://localhost:8801/eureka,http://localhost:8800/eureka 複製程式碼

通過四步我們就擁有了一個最初步的專案,接下來,我們會通過介面+註解的方式開發OpenFeign的服務呼叫。

OpenFeign介面的開發

OpenFeign的開發方式:介面+註解,微服務呼叫的介面+@FeignClient 類似於Dao介面的開發方式(Mybatis介面式開發),之前我們開發Dao介面,在介面上新增@Mapper的註解就可以獲取一個Mybatis的介面

1.業務邏輯介面+@FeignClient建立OpenFeign服務呼叫

package com.lby.service;

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;

/**

  • @author luxiaoyang

  • @create 2020-04-05-19:41

  • @FeignClient 引數是要請求服務的服務名稱 */ @Component @FeignClient(value = "eureka-client-8803") public interface ConsumerFeignService {

    /**

    • 介面中的方法是被呼叫服務的Controller介面 */ @GetMapping("showImgById") String showImgById(@RequestParam("id") Integer id); }
複製程式碼

複製程式碼

介面的書寫規則如下圖所示:

2.在消費者中建立一個ConsumerController使用OpenFeign介面

package com.lby.controller;

import com.lby.service.ConsumerFeignService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**

  • @author luxiaoyang

  • @create 2020-04-05-19:47 / @RestController public class ConsumerController { /*

    • 直接裝配OpenFeign的服務呼叫介面 */ @Resource private ConsumerFeignService consumerFeignService;

    @GetMapping("testOpenFeign") public String testOpenFeign(){ String s = consumerFeignService.showImgById(1); return "Feign服務呼叫的結果為:"+s; } }

複製程式碼

複製程式碼

啟動專案

啟動註冊中心,服務提供者(兩個)(啟動方法見上一篇),以及Feign服務

請求eureka-openfeign-8806的Controller介面:http://127.0.0.1:8806/testOpenFeign

可以看到兩次請求都能夠獲取服務提供者的響應,並且能夠負載均衡

總結

以上就是OpenFeign的基本使用,關於OpenFeign的其他使用見下篇文章。

原始碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。

要掌握SpringCloud更多的用法,請持續關注本系列教程。

求關注,求點贊,求轉發

歡迎關注本人公眾號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視訊教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。

相關文章