Nats.io QueueSubscribe 超时行为

Nats.io QueueSubscribe behavior on timeout

我正在评估 NATS 以迁移现有的基于 msg 的软件 我没有找到有关 msg 超时异常和过载的文档。 例如:

NATS 服务器将接收另一个订阅者并将重新post 相同的消息?

再见 迭戈

关于您的第一个问题:在我看来,您正在尝试发布一个超时请求消息(使用 nc.Request)。如果是这样,则超时由客户端管理。实际上,客户端发布请求消息并创建对回复主题的订阅。如果订阅在超时时间内没有收到任何消息,它将通知您超时条件并取消订阅回复主题。

关于你的第二个问题 - 你在使用队列组吗? NATS 中的队列组是一个指定队列组名称的订阅。服务器会特殊处理具有相同队列组名称的所有订阅。服务器将 select 队列组订阅之一发送消息以在消息到达时在它们之间轮换。然而,服务器的职责只是传递消息。

要执行您描述的操作,请使用 request/reply 使用超时和等于 1 的最大消息数来实现您的功能。如果在超时后未收到任何响应,您的客户端可以在之后重新发送请求消息一些延迟或执行一些其他类型的恢复逻辑。回复消息应该是您的 'protocol' 以了解该消息已得到妥善处理。请注意,这会影响您的消息传递架构的设计。例如,超时可能在请求接收者收到消息并处理它之后但在客户端或服务器能够发布响应之前触发。在那种情况下,请求发送者将无法区分并最终重新发布。这暗示这种类型的交互需要使请求幂等以防止重复的副作用。