springcloud实战:服务间通信OpenFeign熔断(1)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

springcloud实战:服务间通信OpenFeign熔断

这说明此时服务正常返回。我们将run方法改成以下代码:

try {

//模拟HTTP请求超时Thread.sleep(10800);}catch (Exception e){

e.printStackTrace();}

return“请求成功!";

我们模拟了请求时间为10秒,再次访问上述地址,可以看到postman打印出了“服务器异常!”字样。说明,HystrixCommand在请求服务时已然超时,因而调用了getFallback方法。

Hystrix除了支持熔断,它还提供了监控功能,并提供了可视化的Web界面。在 common 工程加入以下依赖就可以访问其Web界面:

org.springframework.cloud

spring-cloud-starter-netflix-hystrix-dashboard

要访问Hystrix的仪表盘,还需要在应用的人口类Application中添加@EnableHystrixDashboard注解。分别启动register、config、test工程,可以看到控制台已映射了/hystrix地址,如图11-3所示。

springcloud实战:服务间通信OpenFeign熔断

图中的地址是Hystrix的仪表盘Web界面地址。在浏览器中输入地址localhost:9999/hystrix,就会看到如图11-4所示的界面。

springcloud实战:服务间通信OpenFeign熔断

该界面第一个文本框下有三排文字,我们得知,Hystrix Dashboard有3种监控模式。

  • 默认集群监控:通过输人地址 http:turbine-hostname:port/turbine.stream开启。

  • 自定义集群监控:通过输人地址 http:turbine-hostname:port/turbine.stream?cluster=[clusterName]对指定的集群名进行监控。

  • 单体应用监控:通过输入地址 http://hystrix-app:port/hystrix.stream开启,可以对某个具体的服务进行监控。

该界面还有两个参数信息,具体如下。

  • Delay:控制服务器上轮询监控信息的延迟时间,默认为2000毫秒,可以通过配置该属性来降低客户端的网络和CPU消耗。

  • Title:没有任何功能,只是可以自定义仪表盘展示的标题信息。

在文本框中输入localhost:9999/hystrix.stream,正常情况下,按下 Enter键后会出现以下图11-5所示的界面。

springcloud实战:服务间通信OpenFeign熔断

因为在Spring Boot 2.0以后,Hystrix默认不会加载 hystrix.stream端点,需要通过编码形式添加hystrix.stream端点,代码如下:

@Bean

public ServletRegistrationBean getServlet({

HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();

ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet );registrationBean.setLoadOnStartup(1);

registrationBean.addUrlMappings(" /hystrix.stream");

registrationBean. setName(“HystrixMetricsStreamServlet”);

return registrationBean;

}

通过配置一个Bean,该Bean返回ServletRegistrationBean对象,通过addurlMappings方法将hystrix.stream端点添加到URL映射中,并指定Servlet名。如果将上述代码换为读者更加熟悉的web.xml 的配置,读者应该会更加明白:

</ description>

HystrixMetricsStreamServletHystrixMetricsStreamServlet

com. netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet</ servlet-class>

HystrixMetricsStreamServlet/hystrix.stream

</ servlet-mapping>

其实Spring Boot内部提供了HystrixMetricsStreamServlet类,该类的作用就是做Hystrix监控,因此需要定义该Servlet 的URL端点,而Spring Boot框架没有XML配置文件,因此需要通过编码的形式增加URL端点。

重启test工程,继续上述操作,并访问前面集成了熔断器的接口地址 localhost:9999/testHystrix,可以看到图11-6所示的界面。

springcloud实战:服务间通信OpenFeign熔断

我们多次调用上述接口,可以清晰地看到监控信息,TestHystrixCommand表示当前请求得接口信息,包括响应时间、请求次数等;Thread Pools表示当前请求线程池信息,包括队列总数、线程池大小等。

OpenFeign集成 Hystrix熔断器

======================

读者对Hystrix有了大致的了解,就可以将其运用到OpenFeign中,提升系统的稳定性。接下来,我们就来集成Hystrix。

(1)11.3节的代码中的OpenFeign 默认自带熔断器,但它在Spring Cloud中是默认关闭的,我们可以在配置文件中开启它(可以写到公共的eurekaclient.yml 中 ):

#开启熔断器

feign:

hystrix:

enabled: true

(2)新建TestserviceErrorFeign类并实现TestServiceFeign接口:

@Component

public class TestServiceErrorFeign implements TestServiceFeign {

@Override

public String test() {

return“服务器异常!";

}

}

由于OpenFeign是定义的接口,上述代码其实就是创建一个类并实现该接口对应的方法,这段代码的含义就是当服务无法正常调用或调用超时,打印“服务器异常!”字符串。

(3)在TestserviceFeign 的注解中指定fallback,如:

@Feignclient(value = “test”,fallback = TestServiceErrorFeign.class,configuration =

MyFeignConfiguration.class)

只实现openFeign还不够,还需要通过fallback指定具体的实现类。

(4)测试熔断器。

停止 test工程,继续11.2节中的测试,可以看到浏览器打印出了“服务器异常!”字符串。

小结

==

本节介绍了Spring Cloud Netflix Ribbon和Spring Cloud OpenFeign,通过两者的对比,推荐读者使用OpenFeign,此组件也是在微服务应用中运用最广泛的组件之一。通过OpenFeign,我们可以轻松实现服务间的通信,极大地降低系统的耦合性。通过OpenFeign的负载均衡,提升系统间调用的稳定性和并发数,利用其集成的熔断器,使应用的稳定性进一步提升。

本文给大家讲解的内容是springcloud实战:服务间通信,OpenFeign熔断

  1. 下篇文章给大家讲解的是springcloud实战:服务链路追踪Sleuth;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持

笔者福利

以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。

有了这个,面试踩雷?不存在的!

回馈粉丝,诚意满满!!!




《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

[外链图片转存中…(img-32FS7210-1714673046344)]
[外链图片转存中…(img-5SWWvRuk-1714673046345)]
[外链图片转存中…(img-1gfFfm6j-1714673046345)]
[外链图片转存中…(img-UUtgReqs-1714673046345)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值