【发布时间】:2017-11-28 11:16:29
【问题描述】:
我是新的 NATS。不确定 NATS 请求回复的工作原理。
据我了解,这种模式可用于双向通信,但问题是,它是否适用于相同的消息 ID/线程?如果不是,我们不能为同一目的使用两个不同的队列吗?它与 NATS 的 pub-sub 或 queue 模式有何不同?
有人可以提供更多关于此的用例吗?
谢谢。
【问题讨论】:
标签: publish-subscribe iot nats.io nats-streaming-server
我是新的 NATS。不确定 NATS 请求回复的工作原理。
据我了解,这种模式可用于双向通信,但问题是,它是否适用于相同的消息 ID/线程?如果不是,我们不能为同一目的使用两个不同的队列吗?它与 NATS 的 pub-sub 或 queue 模式有何不同?
有人可以提供更多关于此的用例吗?
谢谢。
【问题讨论】:
标签: publish-subscribe iot nats.io nats-streaming-server
您添加了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 的链接
【讨论】: