前言声明:
如果您有更好的技术与作者分享,或者商业合作;请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。
如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由,作者一经查实,马上删除。
三,Feign与RestTemplate+Ribbon分别使用断路器(Hystrix)
开始前准备工作:
1,创建两个服务消费者(esq-consumerRib和esq-consumerFei)
1)esq-consumerFei:负载均衡客户端使用Feign
2)esq-consumerRib:负载均衡客户端使用RestTemplate+Ribbon
架构如下:
1,服务消费者(esq-consumerRib)
1,pom配置文件添加:
<!-- Hystrix断路器的jar -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2,UserServiceImpl类改造;
/**
* 用户接口实现
* @author esq
* @Create 2019-09-09 09:09:09
* @Website www.esqabc.com
* @WeChat
*/
@Service
public class UserServiceImpl implements UserService{
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "esquserError")
public String getServiceInfo(String name) {
return restTemplate.getForObject("http://ESQ-SERVICE/esquser?name="+name,String.class);
}
//服务出错或者无法访问处理方法
public String esquserError(String name) {
return "您好"+name+",对不起我们的系统服务出错或者无法访问,给你带来不便,请您谅解!";
}
}
3,application.properties改造:
# 配置启动端口号
server.port=9222
# 配置项目访问路径
#server.context-path=/eureka
#配置服务名称
spring.application.name=esq-consumerrib
#服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:9000/eureka/
1,服务消费者(esq-consumerFei)
1,pom配置文件添加:
<!-- Hystrix断路器的jar -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2,UserService类改造:
package com.esq.consumer.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.esq.consumer.service.impl.UserServiceImpl;
/**
* 通过@ FeignClient("服务名"),来指定调用哪个服务。比如在代码中调用了esq-service服务的"esquser"接口
* 指定出错提示实现类:UserServiceImpl
* @author esq
* @Create 2019-09-09 09:09:09
* @Website www.esqabc.com
* @WeChat
*/
@FeignClient(value = "esq-service",fallback=UserServiceImpl.class)
public interface UserService {
@RequestMapping(value = "/esquser",method = RequestMethod.GET)
public String getServiceInfo(@RequestParam(value = "name") String name);
}
3,UserServiceImpl类改造:
package com.esq.consumer.service.impl;
import org.springframework.stereotype.Component;
/**
* UserService接口类出错提示实现类
* @author esq
* @Create 2019-09-09 09:09:09
* @Website www.esqabc.com
* @WeChat
*/
@Component
public class UserServiceImpl {
/**
* getServiceInfo接口出错或者无法访问,显示方法
*/
public String getServiceInfo(String name) {
return "您好"+name+"对不起我们的系统服务出错或者无法访问,给你带来不便,请您谅解!";
}
}
3,application.properties改造:
# 配置启动端口号
server.port=9221
# 配置项目访问路径
#server.context-path=/eureka
#配置服务名称
spring.application.name=esq-consumerfei
#服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:9000/eureka/
注意:项目启动顺序为:先启动注册中心(esq-registry) ,然后启动(服务生产者1,2)(esq-provider-a,esq-provider-b) 最后启动服务消费者1,2(esq-consumerFei,esq-consumerRib)
浏览器输入:http://localhost:9221/esquser?name=12312
会交替显示:1,欢迎12312访问,来自服务端口:9011的服务。2,欢迎12312访问,来自服务端口:9022的服务。
如果断开服务生产者(esq-provider-a)端口为:11
这时候11端口的服务返回:您好12312,对不起我们的系统服务出错或者无法访问,给你带来不便,请您谅解!
22端口的服务返回:欢迎12312访问,来自服务端口:9022的服务
浏览器输入:http://localhost:9222/esquser?name=12312 和上面的效果同理
说明断路器(Hystrix)起作用了
===============================
更多请访问:https://blog.csdn.net/esqabc/article/details/87804603
=================================