具有多个实例的微服务事件驱动设计

时间:2015-04-21 14:49:06

标签: spring jms spring-jms microservices event-driven-design

在片刻,我们设计并计划将我们的系统转换为微服务架构模式。

为了松散耦合,我们考虑使用JMS主题的事件驱动设计。这看起来很棒。但我现在不知道如何通过微服务的多个实例解决问题。 对于故障转移和负载平衡,我们有每个服务的 n 实例。如果事件发布到主题,则每个实例将接收并处理该事件。

可以使用数据存储中的锁定和处理状态来处理此问题。但是这个解决方案看起来非常昂贵,每个实例都有相同的工作。这对我来说不是负担。

这种模式是否有一些好的解决方案或最佳实践?

1 个答案:

答案 0 :(得分:7)

为什么不使用Queue代替Topic?然后你的实例将竞争消息,而不是全部获得副本。

修改

rabbitmq可能更适合您 - 发布到扇出交换并绑定任意数量的队列,每个队列都有任意数量的竞争消费者。

我还看到了竞争客户端使用相同客户端ID连接的JMS主题。一些(所有?)经纪人只允许一个这样的客户消费。其他人一直试图重新连接,直到目前的消费者死亡。