我正在使用MassTransit,但我认为这是一个概念性问题,通常适用于任何传输抽象/总线消息传递(RabbitMq、SQS、NServiceBus 等)。
我有一个可能存在竞争消费者的场景(即:同一微服务的 2 个实例从同一队列接收消息,因此彼此“窃取”消息)。
问题是微服务ClientSubscribed
通过打开与第三方服务器的 websocket 来响应消息(即:),因此特定实例被附加到特定第三方的通道。
当使用另一条消息时(例如ClientUnsubscribed
:),微服务必须终止/断开 websocket。
现在,问题是微服务 A 是ClientSubscribed
与第三方接收并打开持久 websocket 的那个,而微服务 B 是接收 的那个ClientUnsubscribed
,websocket 终止不会发生(微服务 B 没有打开 websocket) .
对于我们将事件驱动与状态和水平可扩展性相结合的此类场景,我们有哪些选择,就像竞争消费者一样?
我可以抛出异常,消息将再次入队,但也许它会重新传递给同一个消费者,并且它会不断抛出异常,直到消息被“正确的”消费者消费。有其他选择吗?