Spring Cloud 微服務(wù)(六) 服務(wù)消費Feign

我們在Spring Cloud 微服務(wù)(二) 創(chuàng)建一個簡單的服務(wù) 創(chuàng)建了一個簡單的服務(wù),并且在Spring Cloud 微服務(wù)(三) 服務(wù)發(fā)現(xiàn)把這個簡單的服務(wù)注冊到了Eureka上,本篇我們介紹在另外一個服務(wù)里面消費這個服務(wù),并實現(xiàn)負載均衡。在Spring Cloud家族中,F(xiàn)eign是負責(zé)服務(wù)間內(nèi)部調(diào)用消費,以及負責(zé)均衡的組件,但是和Eureka不一樣,F(xiàn)eign沒有Server這么一說,F(xiàn)eign本身就是個Client,它是可插拔的,可以配置在其他服務(wù)中。
Feign的兩個特點是(1)

  • 負載均衡采用Ribbon輪詢方式
  • 服務(wù)用注解以及接口來定義
  • 可插拔
構(gòu)建Feign

和前幾篇一樣,我們還是通過IntelliJ的Spring Initializer構(gòu)建Feign Server。構(gòu)建出來的項目目錄結(jié)構(gòu)也是一個入口類和一個配置文件,pom文件里面多了feign的依賴。我們需要定義一個@EnableDiscoverClient來表明這是個Eureka客戶端,并且在配置文件定義好Eureka的端口,開放的端口,以及服務(wù)名字。唯一的區(qū)別是我們加了@EnableFeignClients來表明這是個Feign。

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class, args);
    }
}
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8081/eureka/
server:
  port: 8766
spring:
  application:
    name: service-feign
用注解提供服務(wù)消費

為了演示,我們在Spring Cloud 微服務(wù)(二) 創(chuàng)建一個簡單的服務(wù) 創(chuàng)建的服務(wù)上加個/hi服務(wù),輸入一個名字參數(shù),輸出問候語,以及該服務(wù)監(jiān)聽的端口,因為我們將會起兩個DummyService,分別在不同的端口監(jiān)聽,然后用Feign消費這個服務(wù)。定義完這個服務(wù)之后,我們起兩個DummyService,分別監(jiān)聽8870和8871。

@RequestMapping("/hi")
public String home(@RequestParam String name) {
  return "hi "+name+" from port: " + port;
}

接下來是Feign配置服務(wù)的環(huán)節(jié),F(xiàn)eign通過定接口來提供服務(wù),所以我們需要新建一個接口,取名叫DummyService,我們定義了一個sayHi方法,以及它的方法是GET類型,路徑是/hi,還有一個參數(shù)是name,都跟dummy service對應(yīng),這里最關(guān)鍵的是Feign怎么找到dummy-service。通過@FeignClient(value="dummy-service")里面的value,跟在Eureka上注冊的service name對應(yīng)起來,我們把它映射到dummy service,到這時關(guān)于Feign的配置已經(jīng)完成。

@FeignClient(value = "dummy-service")
public interface DummyService {
    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    String sayHi(@RequestParam(value = "name") String name);
}

調(diào)用方法很簡單,我們需要定義一個服務(wù)來測試我們的Feign,然后把我們的DummyService注入進來,直接調(diào)用sayHi方法,帶上我們的參數(shù)。

@RestController
public class FeignTestController {
    @Autowired
    DummyService schedualService;
    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    public String sayHi(@RequestParam String name){
        return schedualService.sayHi(name);
    }
}

把服務(wù)開起來后,我們就可以訪問http://localhost:8766/hi?name=jeff ,多點幾下,就會發(fā)現(xiàn)dummy service是交替調(diào)用兩個端口上的服務(wù)來返回的:

hi jeff from port: 8870
hi jeff from port: 8871
hi jeff from port: 8870
hi jeff from port: 8871

上一篇:Spring Cloud 微服務(wù)(四) Docker化

(1) http://blog.csdn.net/forezp/article/details/69808079

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容