用于异步微服务的断路器



有一个ActiveMQ队列(QueueA(。服务(MyService(订阅消息,对其进行处理,并将消息发送到另一个ActiveMQ队列(QueueB(。

QueueA -> MyService -> QueueB

假设QueueA中有数千条消息。同时,QueueB出现故障。如果在向QueueB发送消息时,有一定数量的消息(比如100条(连续失败,我想停止处理。它应该在一定的时间段内测试滚动窗口(例如,60秒内连续100条消息失败(,并停止从QueueA消耗。然后,它应该通过再发送一条消息来测试服务是否在15分钟左右后启动。如果仍然失败,请再次停止从QueueA消费15分钟。

现在,所有的消息都出错了,我们必须重新处理每一条消息。有一个恢复机制,但由于当前架构的限制,恢复机制正在过载。

这有什么模式吗?它是同一个断路器吗(我在同步上下文中知道它(。如果是这样的话,不确定Java/Spring Boot/Apache Camel中是否有解决方案。是的,这就是我们目前使用的技术堆栈。即使您可能不了解这个特定的技术平台,任何模式指南也会有所帮助。

我还阅读了StackOverflow中的以下问题。

断路器模式是否也适用于异步请求?

谢谢并感谢你花时间帮助我。

查看基于CircuitBreakerLoadBalancerThrottlingExceptionRoutePolicy类型的Camel RoutePolicy。

使用此策略应允许您在电路处于打开状态时停止从端点消耗(与标准电路行为相比:绕过服务调用,回退到另一个响应(。

@Bean
public ThrottlingExceptionRoutePolicy myCustomPolicy() {
// Important: do not open circuit for this kind of exceptions
List<Class<?>> handledExceptions = Arrays.asList(MyException.class);
return new ThrottlingExceptionRoutePolicy(failureThreshold, failureWindow, halfOpenAfter, handledExceptions);
} 

from("jms:queue:QueueA")
.routePolicy(myCustomPolicy)
.to("mock:MyService")

最新更新