在发布-订阅模式中我可以跟踪消息完成情况吗

问题描述 投票:0回答:2

我有两个微服务,它们使用 pub sub 模式相互通信。

我希望我的 serviceA 发布 100 条特定类型的消息,一旦所有消息均成功处理,那么我只希望发布接下来的 100 条消息。

有谁知道如何跟踪每条消息的状态并让我的服务知道前 100 条消息已完成,现在发布下 100 条消息?

architecture microservices publish-subscribe
2个回答
2
投票

发布-订阅模式是单向的。发布者/生产者向其订阅者/消费者发送信息/命令。

所以,该模式本身不支持双向通信。但您可以使用相同的机制向后发送信息/命令。通过两个通道(一个请求,一个回复),您可以拥有双向协议。

在您的特定情况下,您有两个通信方,因此两个频道都有一个订阅者。

在请求和回复消息中包含 requestId 是一个很好的做法。这样你就可以将它们关联起来。在你的情况下,这可能意味着

batchId
。 100 条请求消息包含相同的
batchId
。单个回复消息可以表明给定批次已成功处理或失败。


1
投票

我建议你研究一下 Sagas 或 Workflows。 Saga 和 Workflow 都实现一个流程,即一系列步骤,通常称为活动。

使用 Sagas 时(示例:Sagas with NServiceBus),您有责任跟踪流程的状态,例如,您必须在继续之前跟踪要发送的请求列表和要接收的响应列表手动。

“看起来像一个状态机”™️

使用工作流时(示例:temporal.io),工作流负责跟踪流程的状态,例如,您可以发送所有请求并等待所有响应,然后再自动继续。

“看起来像一个函数”™️

(免责声明,我在 temporal.io 工作)

© www.soinside.com 2019 - 2024. All rights reserved.