我是新NATS。不确定NATS请求答复的工作方式。

根据我的理解,该模式可以用于双向通信,但问题是,它可以在相同的消息ID /线程之间工作吗?如果不是,我们是否不能将两个不同的队列用于同一目的?它与NATS的发布订阅或队列模式有何不同?

有人可以提供更多用例吗?

谢谢。

最佳答案

您添加了nats-streaming-server标记,因此我首先想澄清一下,在NATS流中没有请求/答复API,因为这没有任何意义。

在NATS中,当发布应用程序想要知道订阅应用程序确实已接收并处理消息时,可以使用请求/答复。这是对已发布消息已收到并已处理的端到端确认。

这也可能仅仅是因为订阅应用程序处理作业并将该作业的结果发送回请求者。

一个简单的例子是:

// Request will create an internal subscription on
// a private inbox and set it to the message's Reply
// field.
msg, err := nc.Request("job", payload, time.Second)
if err != nil {
    ...
} else {
    // msg is the reply sent by the subscribing application.
}


另一方面,您将注册一个订阅以处理作业请求。

nc.Subscribe("job", func(req *nats.Msg) {
    // req is the request received by the publisher above.
    // Send back a reply to the request reply subject.
    nc.Publish(req.Reply, []byte(reply))
})


不知道您使用哪种语言,但是这里是Go client的链接

10-02 08:38