我们有与其他微服务通信的微服务。我需要处理由于服务故障或维护而导致服务中断的情况,或者服务可能超载并且对请求的响应非常缓慢。
在这种情况下,我想在安排好的时间后重试。我该如何实现?有哪些可能的选择?
答案 0 :(得分:0)
每个微服务都应实施并公开运行状况检查。诸如Spring boot之类的框架提供了一种现成的方式来实现这一目标。即使您的微服务可以通过直接检查运行状况端点并进行睡眠和重试来检查目标服务是否已启动,但实际上,您将为此使用诸如hystrix或Spring retry之类的框架。
Spring retry例如,您可以定义用于重试特定操作的不同退避策略,还可以基于响应代码定义恢复操作
还有许多其他框架,例如Spring cloud,它们通过维护服务注册表提供了许多模式来实现高可用性-拥有HA将使您避免首先重试。
对于HA,一种方法也将是每个服务至少具有2个实例,并在其前面使用类似nginx的LB。在这种情况下,LB可以将流量路由到运行状况良好的实例。这样,您就将寻找健康节点的责任委托给了LB。
答案 1 :(得分:0)
您可以添加Spring boot admin。它将显示服务状态,无论它是启动还是正在运行。
1) in order to check with HTTP you can try Feign Client.
2) for retry you can implements Retryer and add custo
m逻辑