Натс какой образец использовать

Я задал вопрос в: Зависимость архитектуры микросервиса, какой шаблон использовать при использовании кластерной архитектуры микросервиса.

Я получил ответ, что точка-точка должна работать, но при чтении: 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);
});
Другие вопросы по тегам