NATS 请求回复 - 它是如何工作的?

NATS Request Reply - How it works?

我是新来的NATS。不确定 NATS 请求回复是如何工作的。

据我了解,此模式可用于双向通信,但问题是,它是否适用于同一消息 id/thread?如果不是,我们不能为同一目的使用两个不同的队列吗?它与 NATS 的 pub-sub 或队列模式有何不同?

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

谢谢。

你添加了nats-streaming-server标签,所以我首先要澄清的是NATS Streaming中没有request/reply API,因为它真的没有意义。

在 NATS 中,当您的发布应用程序想知道订阅应用程序确实接收并处理了消息时,您可以使用 request/reply。它是已发布消息已被接收和处理的端到端确认。

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

一个简单的例子是:

// 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))
})

不确定您使用的是什么语言,但这里有 link 到 Go client