<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] 上一篇文章,講述了如何通過`RestTemplate + Ribbon`去消費服務,這篇文章主要講述如何通過`Feign`去消費服務。 # Feign簡介 `Feign`是一個聲明式的偽`Http`客戶端,它使得寫`Http`客戶端變得更簡單。 使用`Feign`,只需要創建一個接口并注解,它具有可插拔的注解特性,可使用`Feign` 注解和`JAX-RS`注解,`Feign`支持可插拔的編碼器和解碼器,`Feign`默認集成了`Ribbon`,并和`Eureka`結合,默認實現了負載均衡的效果。 **`Feign` 具有如下特性:** - 可插拔的注解支持,包括`Feign`注解和`JAX-RS`注解 - 支持可插拔的`HTTP`編碼器和解碼器 - 支持`Hystrix`和它的`Fallback` - 支持`Ribbon`的負載均衡 - 支持`HTTP`請求和響應的壓縮`Feign`是一個聲明式的`Web Service`客戶端,它的目的就是讓`Web Service`調用更加簡單。它整合了`Ribbon`和`Hystrix`,從而不再需要顯式地使用這兩個組件。`Feign`還提供了`HTTP`請求的模板,通過編寫簡單的接口和注解,就可以定義好`HTTP`請求的參數、格式、地址等信息。接下來,`Feign`會完全代理`HTTP`的請求,我們只需要像調用方法一樣調用它就可以完成服務請求。 簡而言之:`Feign`能干`Ribbon`和`Hystrix`的事情,但是要用`Ribbon`和`Hystrix`自帶的注解必須要引入相應的`jar`包才可以。 # 準備工作 ## Eureka Service **導入第三篇文章中的項目:作為服務注冊中心** `spring-cloud-eureka-service` ## Eureka Provider **導入第三篇文章中的項目:作為服務的提供者** `spring-cloud-eureka-provider-1` `spring-cloud-eureka-provider-2` `spring-cloud-eureka-provider-3` # Feign Consumer **服務消費者** ## 添加依賴 新建項目 `spring-cloud-feign-consumer` `pom.xml`中引入需要的依賴內容: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> ``` ## 開啟Feign 在工程的啟動類中,通過`@EnableFeignClients` 注解開啟Feign的功能: ```java package io.ymq.example.feign.consumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; @EnableFeignClients @EnableDiscoveryClient @SpringBootApplication public class FeignConsumerApplication { public static void main(String[] args) { SpringApplication.run(FeignConsumerApplication.class, args); } } ``` ## 定義接口 通過`@FeignClient("服務名")`,來指定調用哪個服務。 比如在代碼中調用了`eureka-provider`服務的 `/` 接口,`/` 就是調用:服務提供者項目:`spring-cloud-eureka-provider-1`,`spring-cloud-eureka-provider-2`,`spring-cloud-eureka-provider-3` 的 `home()` 方法,代碼如下: ```java package io.ymq.example.feign.consumer; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; /** * 描述: 指定這個接口所要調用的 提供者服務名稱 "eureka-provider" * * @author yanpenglei * @create 2017-12-06 15:13 **/ @FeignClient("eureka-provider") public interface HomeClient { @GetMapping("/") String consumer(); } ``` ## 消費方法 寫一個 `Controller`,消費提供者的 `home` 方法 ``` package io.ymq.example.feign.consumer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * 描述:調用提供者的 `home` 方法 * * @author yanpenglei * @create 2017-12-06 15:26 **/ @RestController public class ConsumerController { @Autowired private HomeClient homeClient; @GetMapping(value = "/hello") public String hello() { return homeClient.consumer(); } } ``` ## 添加配置 完整配置 `application.yml` 指定注冊中心地址,配置自己的服務名稱 ```sh eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ spring: application: name: feign-consumer server: port: 9000 ``` # 測試服務 依次啟動項目: `spring-cloud-eureka-service` `spring-cloud-eureka-provider-1` `spring-cloud-eureka-provider-2` `spring-cloud-eureka-provider-3` `spring-cloud-feign-consumer` 啟動該工程后,訪問服務注冊中心,查看服務是否都已注冊成功:[http://localhost:8761/](http://localhost:8761/) ![查看各個服務注冊狀態][1] ## 負載均衡響應 **在命令窗口`curl http://localhost:9000/hello`,發現Feign已經實現負載均衡** 或者瀏覽器`get` 請求`http://localhost:9000/hello` F5 刷新 ![測試 Feign 負載均衡響應][2] # 源碼下載 **GitHub:**[https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-feign](https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-feign) **碼云:**[https://gitee.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-feign](https://gitee.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-feign) [1]: https://www.souyunku.com/images/2017/SpringCloud/feign/11.png [2]: https://www.souyunku.com/images/2017/SpringCloud/feign/22.png
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看