5

我是新的 NATS。不确定 NATS 请求回复的工作原理。

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

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

谢谢。

4

1 回答 1

7

您添加了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 客户端的链接

于 2017-11-28T17:36:40.543 回答