spring cloud fegin ,他是基于Netflix Fegin实现得,整合了spring cloud Ribbon和spring cloud Hystrix,除了整合这两者得功能外,他还提供了了一种声明式得Web服务客户端定义方式。
创建一个spring boot项目命名为”eureka-bussniss-service-user-client-fegin”,选择server和fegin的依赖;
application.yml相关配置:
spring:
application:
name: service-user-client-fegin
server:
port: 9001
eureka:
client:
serviceUrl:
defaultZone: http://peer1:8762/eureka/,http://peer2:8763/eureka/
feign:
hystrix:
enabled: true
项目主类EurekaBussnissServiceUserClientFeginApplication,添加@EnableEurekaClient和@EnableFeignClients注解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaBussnissServiceUserClientFeginApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaBussnissServiceUserClientFeginApplication.class, args);
}
}
我们以eureka-bussniss-service-user的服务例。在fegin项目中定义一个接口”UserFeignClient”
/**
* 标明feign调用的微服务名称
*/
//通过@ FeignClient(“服务名”),来指定调用哪个服务。
// 比如在代码中调用了service-hi服务的“/hi”接口,还可以使用url参数指定一个URL
// fallback 出现错误回调类
@FeignClient(name = "service-user",fallback = UserFallback.class)
public interface UserFeignClient {
/**
* 对应service-user微服务中的URL
* @return
*/
@GetMapping("/listUsers")
String listUsers();
}
接着,创建一个Controller来实现对Fegin客户端的调用,使用@Autowired自动注入上面的“UserFeignClient ”实例。并且通过方法实现对service-user的服务发起调用。
@RestController
public class UserFeignApi {
/**
* 将刚才定义的userFeignClient注入,并当成普通的接口调用即可
*/
@Autowired
private UserFeignClient userFeignClient;
@GetMapping("/listUsersByFeign")
public String ListUsers(){
String users = this.userFeignClient.listUsers();
return users;
}
}
方式测试fegin的负载均衡以及服务容错保护的功能,我们创建了一个UserFallback实现UserFeignClient。实现接口请求错误的反馈
@Component
public class UserFallback implements UserFeignClient {
@Override
public String listUsers() {
return "服务调用失败";
}
}
包路径截图
到这里就已经基本完成了,依次启动service-user(8802,8803两个端口)、fegin。
访问fegin项目的地址http://localhost:9001/listUsersByFeign
重复请求,会发现接口数据是依次返回8802和8803的数据的。
现在把其中一个service-user服务停掉(8803),一开始当请求负载到8803这个服务实例时,因为当前的服务已经停掉了,所以接口响应显示了我们实现了UserFallback 类的返回。
再过几秒钟后,我们继续请i求会发现,接口已经全部负载到了8802的服务实例了。
所以可以看到fegin已经实现了Ribbon和Hystrix的功能了。
github 项目源码
下一篇我们将实现spring cloud config分布式配置中心的组件。