【问题标题】:Unexpected replies using nats jetstream使用 nats jetstream 的意外回复
【发布时间】:2021-12-08 21:03:29
【问题描述】:

我正在使用 Nats JetStream 来实现请求-回复功能。一切都很好,除了我得到一个非常奇怪的回复的小细节。回复消息中的数据根本不是我从回复端发送的。

这也可以使用 nats cli 重现,这意味着我发送或接收消息的代码不是问题。然而,问题可能是我创建流的方式,因为在没有流的情况下使用 nats 时效果很好。

这是我的流配置:

var Read = &nats.StreamConfig{
    Name:        "read",
    Description: "Read Stream",
    Subjects: []string{
        "read.things",
    },
    Retention:    nats.LimitsPolicy,
    MaxConsumers: -1,
    MaxMsgs:      -1,
    MaxBytes:     -1,
    Discard:      nats.DiscardOld,
    MaxAge:       0,
    MaxMsgSize:   -1,
    Storage:      nats.FileStorage,
    Replicas:     0,
    NoAck:        false,
    Duplicates:   2 * time.Minute,
}

我这样创建它:

_, err = jetStream.AddStream(streams.Read)

为了重现该问题,我首先使用 nats cli 设置了一个侦听器:

nats reply 'read.things' "Hello there"

然后我发送一个请求:

nats request read.things
Hi
[Ctrl+D]

我明白了:

12:01:08 Reading payload from STDIN
hi?
12:01:12 Sending request on "read.things"
12:01:12 Received on "_INBOX.91kMP9XDsFLK09g690N97Z.zTJsXJxE" rtt 19.422916ms
{"stream":"read", "seq":1}

如您所见,我得到了这个回复:{"stream":"read", "seq":1},而我预计会得到Hello there。这是为什么呢?

【问题讨论】:

    标签: messaging jetstream nats.io


    【解决方案1】:

    我收到了来自 nats slack (https://natsio.slack.com) 的回复:

    “JetStream 不用于请求-回复。它用于非耦合工作负载。 如果您想要耦合的请求-回复,则不需要持久性。

    你看到的是来自流的回复说“是的,收到你的消息””

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-20
      • 2022-08-20
      • 2022-01-07
      • 2021-07-14
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      相关资源
      最近更新 更多