代码之家  ›  专栏  ›  技术社区  ›  DSA

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

  •  6
  • DSA  · 技术社区  · 7 年前

    我是新手。不确定NATS请求-应答是如何工作的。

    据我所知,这种模式可以用于双向通信,但问题是,它在相同的消息id/线程之间工作吗?如果不是,我们不能使用两个不同的队列用于相同的目的吗?它与NAT的发布-订阅或队列模式有何不同?

    有人能在这方面提供更多用例吗?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  7
  •   I. Kozlovic    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 client