1. 程式人生 > >spring cloud快速入門教程(六)程序間呼叫和微服務負載均衡(Feign)

spring cloud快速入門教程(六)程序間呼叫和微服務負載均衡(Feign)

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
(value = "/getProduct") String getProduct(); }
@FeignClient裡的value指向要呼叫的微服務

@RequestMapping指向要遠端呼叫的方法

另外要在啟動程式Main.java裡的類上加上@EnableFeignClients,表示為服務中要使用FeignClient。

package com.tzy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication
;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); } }
寫一個Controller直接調這個介面測一下
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();
}
}

結果可以得到正確的返回值。