Натс какой образец использовать
Я задал вопрос в: Зависимость архитектуры микросервиса, какой шаблон использовать при использовании кластерной архитектуры микросервиса.
Я получил ответ, что точка-точка должна работать, но при чтении: https://nats.io/documentation/concepts/nats-req-rep/ Такое ощущение, что все подписчики получают событие (и из-за этого его обрабатывают), но там просто быть одним подписчиком, который отвечает. Это не будет работать, если выставить событие заказа, которое вызовет событие update-инвентаризации, на которое подписываются микросервисы Inventory (как в примере в ссылке), т.е. оно не будет работать в кластерном окружении из-за инвентаризации, будет обновляться столько же раз, сколько количество экземпляров микросервиса.
Как я могу решить этот сценарий, используя Натс?
Заранее спасибо!
1 ответ
NATS.io поддерживает эту функцию, используя группы очередей:
Все подписки с одинаковым именем очереди образуют группу очередей. Каждое сообщение будет доставлено только одному подписчику на группу очередей с использованием семантики очередей. Вы можете иметь столько групп очередей, сколько пожелаете. Обычные подписчики будут продолжать работать как положено.
Подключите ваши сервисы, используя группу очередей (пример: node.js):
https://github.com/nats-io/node-nats
nats.subscribe('foo', {'queue':'job.workers'}, function() {
received += 1;
});
тогда клиент будет использовать предоставленные библиотекой методы запроса:
https://github.com/nats-io/node-nats
// Request for single response with timeout.
nats.requestOne('help', null, {}, 1000, function(response) {
// `NATS` is the library.
if(response.code && response.code === NATS.REQ_TIMEOUT) {
console.log('Request for help timed out.');
return;
}
console.log('Got a response for help: ' + response);
});