hystrix:
A服务调用B服务的过程中如果B服务因为各种原因挂掉了,这时就需要引入hystrix来处理这种情况
代码实现如果不理解请先看上一篇 spring cloud 服务注册(nacos)与服务调用(feign)案例(复制粘贴即可)
1.引入pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.调用端开启 application.properties
feign.hystrix.enabled=true
3.编写实现类实现远程调用接口
interface :
配置fallback标明实现类
@FeignClient(name = "demo-server",fallback = HelloClientImpl.class)
@Component
public interface HelloClient {
@GetMapping("ServerController")
public String helloServer();
}
实现类:(当远程调用出现问题,将执行调用端的程序)
@Component
public class HelloClientImpl implements HelloClient {
@Override
public String helloServer() {
return "hello client 熔断器";
}
}
正常访问:
手动停掉注册服务后:
ribbon:
A服务调用B服务的过程中,为了程序的稳定运行我们会将B服务搭建在多个服务器上运行,这样A调用B的过程中就需要引入ribbon来进行负载均衡管理
pom:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
用不同的端口模拟不同的服务器,同时启动三个demo_server
可以看到已经启动了三个一样的实例,这时我们测试发现demo_client调用的过程中是轮询的,即依次调用服务,这也是ribbon的默认负载均衡规则
ribbon的自带负载均衡规则如下:
下面将轮询改成随机:
在客户端引入如下配置application.yml
demo-server:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
demo-server是被调用的服务名
然后运行发现已经变成随机调用服务了
帮助到您请点赞关注收藏谢谢!!!