实例演示了SpringCloud的Feign来调用注册到 Eureka上的接口服务,当接口服务发生异常时, 可以将Feign结合Hystrix进行关联使用, 以实现接口异常时服务仍能正常对外提供, 实例包含三个项目 Feign, Product(接口服务), eureka(注册中心)
SpringCloud视频教程【查看】
项目对应的实例代码可以通过【下载实例】按钮获取
开发工具: IntelliJ IDEA2017, JDK1.8, Maven 3.0.2
【项目包含内容】(见下图):
eureka : 服务注册中心
feign : feign方式调用远程接口
product : 远程接口提供者
1. 将三个项目解压并且分别用Intelli IDEA2017打开
2. 首先启动eureka, 监听端口为: 8761, 启动成功后, 访问: http://localhost:8761/
3. 启动 feign, 监听端口为: 8080; 启动 product, 监听端口为: 8005
4. 三个服务都启动成功后,可以看到上图有二个服务 FEIGN-CLIENT, PRODUCT 成功注册到EUREKA上了
5. product提供服务接口
@GetMapping("/msg") public String msg(HttpServletRequest request){ HttpSession session = request.getSession(); Object object = (Object)session.getAttribute("test"); String str = ""; if(null == object){ session.setAttribute("test", "gepanjiang 8081"); str = "gepanjiang 8081"; }else{ str = (String)object; } return "this is product msg 8081, sessionId;" + str; }
6. feign项目 中配置 feign 方式访问 product 提供的服务
ProductClientFallback是Feign与Hystrix结合使用配置熔断
注意: ProductClientFallback 的注解 @Component, 在springboot容器中加入 ProductClientFallback 对象
一般在实际开发中,接口服务方会提供一个接口jar包, 但feign工程不会扫描到jar包中的@Component注解, 所以需要在
SpringBoot启动类上添加相应的扫描范围, 否则启动报错
@FeignClient(name = "product", fallback = ProductClient.ProductClientFallback.class) public interface ProductClient { @GetMapping("/msg") String msg(); @Component static class ProductClientFallback implements ProductClient{ @Override public String msg() { return "发生熔断"; } } }
7. 在浏览器中输入 http://localhost:8080/getProductMsg 来调用feign的接口, 发现服务正常
然后关闭 product服务, 再次访问 http://localhost:8080/getProductMsg , 发生了Hystrix服务降级