与将所有模块紧密安装到一个应用程序中的单片应用程序相比,微服务是一组独立的自主服务。
在微服务架构中,开发容错微服务非常重要。 我们必须以这样一种方式开发微服务,即必须使故障影响最小化,并且应基于快速故障机制将影响降到最低。
这是建立在微服务架构上的电子商务应用程序的示例。
直到有一天,电子商务应用程序停止运行,以上架构一直运行良好。 发现获取可用项目列表的服务没有响应。 经过进一步分析,发现它使用了第三方服务,这是有问题的。 该错误已从第三方服务级联到主应用程序。
考虑使用电子商务应用程序时,用户项目推荐服务停止工作的另一个示例。 在这种情况下,我们应该显示非特定于用户的项目。 这样,用户将无法得知我们的推荐引擎失败。 这就是为什么构建容错微服务非常重要的原因。
Netflix拥有世界上最好的基础设施之一。 为了构建容错微服务,Netflix提出了Hystrix,他们将其开源。
根据Netflix的说法,“ Hystrix是一个延迟和容错库,旨在隔离对远程系统,服务和第三方库的访问点,停止级联故障,并在不可避免发生故障的复杂分布式系统中实现弹性。”
我们将使用Hystrix构建应用程序并使其具有容错能力。 我们将创建一个将获取用户推荐电影列表的应用程序。 我们将使用Spring boot创建微服务。
转到Spring Initializer并输入组名称,工件名称并选择依赖项。 单击生成项目,将其解压缩并在您喜欢的IDE上生成它(本例中使用的是IntelliJ)。 我已经使用spring初始化程序创建了两个应用程序-“ UserApplication ”和“ UserRecommendation ”。
在UserRecommendation应用程序中,创建一个名称为“ UserRecommendationController ”的休息控制器,并创建一个POJO 电影 ,其中将包含电影名称,发行日期和类型。 我们将在静态列表中填充电影列表。
我创建了一个休息呼叫“ getUserMovieDetails ”,它将获取所有特定于用户的电影的列表。 另外,我们通过在资源文件夹下的application.properties文件中定义端口号来使用端口号8081。 启动tomcat服务器,当我们点击其余URL时,结果为:
现在,我们将构建将使用Netflix Hystrix的用户应用程序,并将其称为用户推荐微服务 。
使用相同的过程创建另一个应用程序,并将其导入IDE。 我们将使用端口号8082来运行此服务。 像在上一个服务中一样配置端口号。
在用户应用程序中,我们需要启用Hystrix和Hystrix仪表板。 我们可以通过添加以下注释来做到这一点。
为了实现后备机制,我们使用以下代码:
在这里,如果对getMovieDetails的方法调用失败,则将调用其回退方法调用movieDetailsFallback 。
现在让我们测试后备机制
我们有两个在端口8081和8082上运行的微服务。基本上,运行在8081上的服务会根据用户推荐为我们提供电影列表,运行在8082上的服务会首先在8081上运行呼叫服务,如果失败,则不会显示一般电影列表特定于用户。 两个tomcat服务器现在都在运行。
首先测试运行在8081上的用户推荐服务:
现在测试用户服务,该服务又称为用户推荐服务。 由于推荐服务已在此处启动,因此不会发生后退,我们得到的结果完全相同。
现在,我们将停止在端口8081上运行的推荐服务。
现在,当我们尝试运行在8082上的用户服务时,它将调用其回退方法,并且仍然会给我们结果。
由于我们的推荐服务已关闭,因此我们将通过调用fallback方法来显示非特定于用户推荐的电影。 在上面粘贴的包含UserService.java的要点中,我们可以在控制台上看到日志。
Hystrix还为我们提供了仪表板来监视统计信息。
转到此URL —“ http:// localhost:8082 / hystrix ”,然后在URL输入字段中输入“ http:// localhost:8082 / actuator / hystrix.stream ”,然后单击监视流。
在这里,我们可以看到与实现后备机制的方法相关的所有细节。 我们可以看到成功,超时和失败的百分比。 还有关于线程池的相关信息。
因此,通过这种方式,我们可以使用Hystrix构建容错微服务。
您可以在我的GitHub存储库中找到源代码:
通过在GitHub上创建一个帐户,为gauravmassand / fault-tolerant-microservices开发做出贡献。 github.com
谢谢阅读。
From: https://hackernoon.com/building-fault-tolerant-microservices-using-netflixs-hystrix-c36083ca9af5