我是新的NATS。不确定NATS请求回复的工作原理。
根据我的理解,这种模式可以用于双向通信,但问题是,它是否在相同的消息ID /线程之间工作?如果没有,我们不能为同一目的使用两个不同的队列吗?它与pubs sub或NATS的队列模式有何不同?
有人可以提供更多用例吗?
感谢。
答案 0 :(得分:3)
您添加了nats-streaming-server
标记,因此我首先想澄清一下NATS Streaming中没有请求/回复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
的链接