我正在使用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。为什么会这样呢?
发布于 2021-12-08 13:03:29
我从nats slack (https://natsio.slack.com)那里得到了这个答复:
"JetStream不是用于请求应答,而是用于解除耦合的工作负载。如果您想要耦合请求-回复,则不需要持久性。
你看到的是溪流上的回复:“是的,收到你的信息了”。
https://stackoverflow.com/questions/70274001
复制相似问题