spring cloud快速入門教程(六)程序間呼叫和微服務負載均衡(Feign)
阿新 • • 發佈:2019-01-25
RestTemplate是不是很簡單粗暴呢?還有更粗暴的,那就是Feign,很多人都用過Dubbo,Feign的用法跟他類似。
我們複用userService那個module去呼叫productService微服務中的getProduct介面,引入Feign的依賴包:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>在userService中建立一個介面,介面中要建立一個和微服務中要呼叫方法同名的方法,如下:
package com.tzy.userService; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; @FeignClient(value = "service-product") public interface GetProductInterface { @RequestMapping@FeignClient裡的value指向要呼叫的微服務(value = "/getProduct") String getProduct(); }
@RequestMapping指向要遠端呼叫的方法
另外要在啟動程式Main.java裡的類上加上@EnableFeignClients,表示為服務中要使用FeignClient。
package com.tzy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication寫一個Controller直接調這個介面測一下;import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients;@SpringBootApplication @EnableEurekaClient @EnableFeignClientspublic class Main { public static void main(String[] args){ SpringApplication.run(Main.class,args); } }
package com.tzy.userService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class GetProductController { @Autowired GetProductInterface getProductInterface; @Autowired GetProductService getProductService; @RequestMapping(value = "/getGoods") public String getGoods(){ return getProductInterface.getProduct(); } }
結果可以得到正確的返回值。