Go Nats.io队列订阅超时行为

Go Nats.io队列订阅超时行为,go,microservices,nats.io,Go,Microservices,Nats.io,我正在评估NAT以迁移现有的基于msg的软件 我没有找到关于msg超时异常和重载的文档。 例如: 选择订阅服务器后,它是否知道发布服务器发布的超时设置?是否可以通知额外的时间延长 如果所选订户知道某些DBMS连接丢失且无法完成,则可能会跳出消息 NATS服务器将拾取另一个订户并重新发布相同的消息 再见 Diego关于您的第一个问题:在我看来,您试图发布一条超时的请求消息(使用nc.request)。如果是,则超时由客户端管理。实际上,客户端发布请求消息并创建关于回复主题的订阅。如果订阅在超时

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

  • 选择订阅服务器后,它是否知道发布服务器发布的超时设置?是否可以通知额外的时间延长
  • 如果所选订户知道某些DBMS连接丢失且无法完成,则可能会跳出消息
NATS服务器将拾取另一个订户并重新发布相同的消息

再见
Diego

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

关于第二个问题,您是否使用队列组?NATS中的队列组是指定队列组名称的订阅。服务器对具有相同队列组名称的所有订阅进行特殊处理。服务器将选择其中一个队列组订阅,以便在消息到达时将消息发送到它们之间。然而,服务器的责任只是传递消息


要执行您所描述的操作,请使用请求/回复来实现您的功能,使用超时和最大消息数等于1。如果超时后未收到响应,则客户端可以在延迟后重新发送请求消息,或执行其他类型的恢复逻辑。回复消息应该是您的“协议”,以了解消息是否得到了正确处理。请注意,这涉及到消息传递体系结构的设计。例如,在请求接收者接收并处理消息之后,但在客户机或服务器能够发布响应之前,可能会触发超时。在这种情况下,请求发送者将无法分辨差异,最终将重新发布。这意味着此类交互需要使请求等幂,以防止重复的副作用。

我注意到NATS流媒体服务器也有队列,并且有一个名为ManualAck和re-delivery behavior的选项(请参阅)。此外,NATS流媒体是完全不同的事情。NATS流服务器捕获日志中的所有消息。NATS流服务器将日志“重放”到NATS流订阅服务器。与NAT一样,订户也可以是队列组的成员,日志中的消息将在队列组成员之间分发。非常感谢您的建议!我同意你的最后一句话:…使请求幂等以防止重复的副作用。。。这正是我必须在当前发布/订阅架构中编写的关键代码。我将把我的测试环境克隆到一个简单的NATS发布包中,并重新测试所有恢复场景。