作者:陈刚,叩丁狼高级讲师。原创文章,转载请注明出处。
一.什么是Feign
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果
二.使用Feign
1.在Consumer项目(端口为:3333)的基础上修改,添加Feigin依赖包
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2.找到主程序类,打上@EnableFeignClients标签开启Feigin
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class Consumer1Application {
public static void main(String[] args) {
SpringApplication.run(Consumer1Application.class, args);
}
}
3.定义Feigin接口
使用@FeignClient注解来声明Feign Client接口,该注解的value为需要远程调用的服务,而configuration指向负载均衡策略配置类
而该接口下的“provide”方法通过Feign来调用“PRODUCER”服务的“/provide”接口
```
//PRODUCER:指向要访问的服务
//configuration = FooConfiguration.class: Feign Client配置类,指定负载均衡策略
@FeignClient(value = “PRODUCER”,configuration = FooConfiguration.class)
public interface MyFeignClient {
//当此方法别调用会自动请求到 PRODUCER服务的 /provide 资源
@RequestMapping(value = "/provide")
public String provide(@RequestParam("name") String name);
}
@Configuration
public class FooConfiguration {
@Bean
public IRule ribbonRule() {
//RandomRule : 负载均衡规则:随机
return new RandomRule();
}
}
>4.ConsumerController增加方法feignTest,调用MyFeignClient的provide方法
@Autowired
private MyFeignClient myFeignClient;
@RequestMapping("/feign")
public String feignTest(@RequestParam("name") String name){
return myFeignClient.provide(name);
}
```
5.测试:依次启动EurekaServer,Producer,Producer2,Consumer,访问http://localhost:3333/feign?name=zs 你将会看到:“zs:你好呀这里是Producer服务”和“zs:你好呀这里是另一个Producer服务”的随机出现。说明我们的负载均衡随机算法目的达到。
注意:我们的注册中心已经实现了高可用集群,启动EurekaServer服务的时候请使用 java -jar 的方式启动。