【发布时间】: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