我正在评估NATS迁移现有的基于消息的软件 我没有找到有关msg超时异常和重载的文档。 例如:
NATS服务器将接收另一个用户并重新发布相同的消息?
侨 迭戈
答案 0 :(得分:1)
对于您的第一个问题:在我看来,您尝试发布超时的请求消息(使用nc.Request
)。如果是,则超时由客户端管理。有效地,客户端发布请求消息并在回复主题上创建订阅。如果订阅在超时内没有收到任何消息,它将通知您超时条件并取消订阅回复主题。
关于第二个问题 - 您使用的是队列组吗? NATS中的队列组是指定队列组名称的订阅。具有相同队列组名称的所有订阅都由服务器专门处理。服务器将选择其中一个队列组订阅,以便在消息到达时将消息发送到它们之间。但是,服务器的责任只是传递消息。
要执行您描述的操作,请使用请求/回复使用超时和最大消息数等于1来实现您的功能。如果在超时后没有收到响应,则客户端可以在延迟或执行后重新发送请求消息一些其他类型的恢复逻辑。回复消息应该是您的“协议”,以便知道消息已正确处理。请注意,这会影响您的消息传递体系结构的设计。例如,在请求接收者收到消息并处理它之后但在客户端或服务器能够发布响应之前,可以触发超时。在这种情况下,请求发送方将无法区分并最终重新发布。这暗示这种类型的交互需要使请求具有幂等性,以防止重复的副作用。