在片刻,我们设计并计划将我们的系统转换为微服务架构模式。
为了松散耦合,我们考虑使用JMS主题的事件驱动设计。这看起来很棒。但我现在不知道如何通过微服务的多个实例解决问题。 对于故障转移和负载平衡,我们有每个服务的 n 实例。如果事件发布到主题,则每个实例将接收并处理该事件。
可以使用数据存储中的锁定和处理状态来处理此问题。但是这个解决方案看起来非常昂贵,每个实例都有相同的工作。这对我来说不是负担。
这种模式是否有一些好的解决方案或最佳实践?
答案 0 :(得分:7)
为什么不使用Queue
代替Topic
?然后你的实例将竞争消息,而不是全部获得副本。
修改强>
rabbitmq可能更适合您 - 发布到扇出交换并绑定任意数量的队列,每个队列都有任意数量的竞争消费者。
我还看到了竞争客户端使用相同客户端ID连接的JMS主题。一些(所有?)经纪人只允许一个这样的客户消费。其他人一直试图重新连接,直到目前的消费者死亡。