【发布时间】:2021-09-19 05:58:43
【问题描述】:
我有 2 个使用 spring boot 运行的服务,我有以下情况:
服务 A(N 个实例)-> 队列(多个实例)-> 服务 B(N 个实例)
- 服务 A 异步排队事件
- 服务 B 出队事件
流量正在增加,我们注意到活动需要花费大量时间排队。我们需要更快地处理事件。每个事件的负载都很小,这个解决方案已经工作了几年,几年前他们认为队列是个好主意,但现在我遇到了这个性能问题。
- 我正在考虑在服务 B 中创建一个端点并从服务 A 中访问该端点。
这个调用应该是异步的,并且还应该实现一个断路器以避免在 B 出现故障时丢失消息。如果 B 出现故障,我可以使用队列来保存消息,一旦 B 运行并再次从队列中提取消息。
我有两个问题:
-
是否可以为异步调用实现断路器或故障转移机制?
-
您认为还有其他更好的方法吗?
谢谢
【问题讨论】:
-
您的解决方案将如何帮助
We need to process events faster.?也许您需要研究服务 b 的性能/扩展性? -
我们在服务和队列中有一些监视器,我们看到消息大部分时间都在队列中。当我们增加队列中的实例时,一切都会更好
-
这意味着服务 B 可以快速处理所有内容,因为一旦我们在队列中增加实例,就无需在 B 中添加更多实例
-
您可以使用消费者组来扩展和消费消息。Link::activemq.apache.org/message-groups
-
要求“其他可能更好的方法”将产生讨论和基于意见的答案,而不是基于事实的答案。这是 Stack Overflow 上的题外话。此外,您在这里问了多个问题,这也是题外话。
标签: java asynchronous microservices circuit-breaker