我正在尝试使用Nats流服务器,到目前为止,它看起来很有希望。但是,似乎队列只有在为其创建持久预订后才可以持久。这当然是有道理的,但是在微服务架构中它如何在实践中起作用?
例如,假设您正在发布服务,而Service1正在将消息泵送到尚未持久且没有侦听器的队列中。一段时间后,相应的服务启动,并使该队列持久。您是希望应对这种短暂的损失,还是确保先启动以后的服务?
抱歉,抱歉。在NATS流中,无论订阅兴趣如何,都会存储发布到频道的任何消息。您可以尝试在“ foo”上发布3条消息。然后,您可以启动订阅(甚至是不持久的)并重播这些消息。只需指定订阅的起点即可。例如,有一个选项可以提供“全部可用”。使用Go nats样本,它将是:
$ go run examples/stan-pub/main.go foo msg1
Published [foo] : 'msg1'
$ go run examples/stan-pub/main.go foo msg2
Published [foo] : 'msg2'
$ go run examples/stan-pub/main.go foo msg3
Published [foo] : 'msg3'
$ go run examples/stan-sub/main.go -id "me" -all foo
Connected to nats://127.0.0.1:4222 clusterID: [test-cluster] clientID: [me]
Listening on [foo], clientID=[me], qgroup=[] durable=[]
[#1] Received: sequence:1 subject:"foo" data:"msg1" timestamp:1583947471103854000
[#2] Received: sequence:2 subject:"foo" data:"msg2" timestamp:1583947472684693000
[#3] Received: sequence:3 subject:"foo" data:"msg3" timestamp:1583947473990567000