Spring通过Feign将RestTemplate封装成了可声明式的web客户端,使得编写web客户端更加简单。在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。
要使用Feign组件,只要在普通的基础服务(参考:SpringCloud-搭建微服务提供者-客户端-Client)上增加配置即可:
1.pom.xml文件增加配置:
<!-- 引入 Feign, 可以以声明的方式调用微服务 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.启动类添加注解:@EnableFeignClients
package com.lg.psd;
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* <h1>用户服务启动类</h1>
* EnableJpaAuditing:声明该应用使用JPA
* EnableEurekaClient:声明这是一个客户服务端-服务提供者
* EnableFeignClients:声明使用Feign调用其他服务
*/
@EnableJpaAuditing
@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class,args);
}
}
3.用户服务使用Feign调用商品服务
创建接口(注意,这里FeignClient里面的Value参数填写的是Zuul里面商品服务的serviceId)
/**
* <h1>通过feign调用Goods所在的微服务</h1>
*value:zuul里面对应的serviceId
*/
@FeignClient(value = "eureka-client-psd-service-goods",fallback = GoodsClientHystrix.class)
public interface GoodsClient {
@RequestMapping(value="/psd-service-goods/goods/goods",method = RequestMethod.GET)
GoodsInfo getGoodsInfo(Long goodsId);
@RequestMapping(value="/psd-service-goods/goods/goodsList",method = RequestMethod.POST)
List<GoodsInfo> getGoodsInfos(@RequestBody GoodsInfosRequest request);
}
Zuul对应的serviceId
在需要的地方引用即可调用(具体查看示例代码),如图
开启访问,访问完成,成功。
附上Gitee的源码: