Как сделать опубликованную очередь автоматически долговечной? - PullRequest
0 голосов
/ 03 марта 2020

Я экспериментирую с потоковым сервером Nats, и это выглядит довольно многообещающе. Однако кажется, что очереди могут быть долговечными только после того, как для них была создана надежная подписка. Однако это, безусловно, имеет смысл, как это работает на практике в архитектуре микросервисов?

Например, предположим, что вы публикуете сервисы, а Service1 выкачивает сообщения в очередь, которая еще не является устойчивой и не имеет прослушивателей. Через некоторое время соответствующая служба запускается и делает эту очередь надежной. Вы просто справляетесь с этой, возможно, короткой потерей или гарантируете, что последующая служба будет запущена первой?

1 Ответ

1 голос
/ 11 марта 2020

Извините за задержку. В потоке NATS любое сообщение, опубликованное на канале, сохраняется независимо от интереса подписки. Вы можете поэкспериментировать и опубликовать sh 3 сообщения на "foo". Затем вы можете запустить подписку (даже недолговечную) и воспроизвести эти сообщения. Это всего лишь вопрос определения начальной точки подписки. Например, есть опция доставки «все доступно». Используя образцы 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 
...