首先引入依赖:
web
eureka client
test
feign的起步依赖:
Spring-cloud-starter-feign
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
配置 application.yml :端口号,程序名,注册地址。
spring: application: name: eureka-feign-client server: port: 8765 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
程序的启动类加上 @EnableFeignClients 注解开启 Feign Client 功能。
加上开启Eureka Client 功能的注解。
@EnableEurekaClient @EnableFeignClients
下面实现一个简单的 Feign Client
在新建的接口上加 @FeignClient 注解声明一个 Feign Client 其中 value 为远程调用的其他服务的服务名。
下面还要写一个 FeignClient 的配置类 FeignConfig.class 在 EurekaClientFeign 接口内部有一个 sayHiFromClientEureka() 方法 ,该方法通过Feign 来调用 客户端服务的 API 接口 。
@FeignClient(value = "eureka-client",configuration = FeignConfig.class) public interface EurekaClientFeign { @GetMapping(value = "/hi") String sayHiFromClientEureka(@RequestParam(value = "name") String name); }
FeignConfig 类: 在该类上 加注解 @Configuration 注解表明是个配置类,
注入一个 bean 的名字为 feignRetryer 的 Retryer 的 Bean
这样,feign 在远程调用失败后会进行重试。
@Configuration public class FeignConfig { @Bean public Retryer feignRetryer(){ return new Retryer.Default(100,1000,5); } }
在 Server 层 的 类中 注入 EurekaClientFeign 的 Bean 通过他去调用 sayHiFromClientEureka() 方法:
@Service public class HiService { @Autowired EurekaClientFeign eurekaClientFeign; public String sayHi(String name){ return eurekaClientFeign.sayHiFromClientEureka(name); } }
在 controller 层 加 @RestController 注解 写一个接口,调用 Server 层的 sayHi 方法。
这样 Hiserver 就可以通过 EurekaClientFeign 远程调用 eureka-client 服务的 API 接口了。
@RestController public class HiController { @Autowired HiService hiService; @GetMapping("/hi") public String sayHi(@RequestParam(defaultValue = "ioenn",required = false) String name){ return hiService.sayHi(name); } }
启动实例, 然后浏览器访问:
http://localhost:8761
看看服务注册 ,
然后 访问
http://localhost:8765/hi
浏览器会轮流显示,访问 两个服务的 API 打印的结果 。
可以看到 Feign 有负载均衡的能力。
该 Feign 依赖,还引入了 ribbon 和 Hystrix 依赖。