NestJS - объедините HTTP с RabbitMQ в микросервисах - PullRequest
0 голосов
/ 01 января 2019

У меня есть несколько микросервисов, которые выставляются через API-шлюз.Шлюз заботится о проверке подлинности и маршрутизации в систему.Сервисы за шлюзом в основном простые CRUD-сервисы.Каждый сервис предоставляет свой собственный API, и они взаимодействуют синхронно через HTTP.Все эти сервисы, включая API-шлюз, являются приложениями NestJS по умолчанию.

Давайте придерживаться примера Cats.Всякий раз, когда Cat-Service обновляет или создает новый Cat, я хочу, чтобы CatCreatedEvent или CatUpdatedEvent были выброшены.Событие должно быть отправлено в некоторый брокер сообщений, такой как RabbitMQ, и другая служба должна прослушивать это событие и асинхронно обрабатывать событие.

Я не уверен, как этого добиться, с точки зрения того, как «внедрить» RabbitMQ вправильный путь, и мне интересно, если этот подход имеет смысл в целом.Я видел модуль CQRS для NestJS, но я думаю, что CQRS - это слишком много для этой области.Тем более, что в этой области нет смысла разделять модели чтения и записи.Может быть, я не на том пути, так что я надеюсь, что вы можете дать мне несколько советов.

1 Ответ

0 голосов
/ 01 января 2019

RabbitMQ поддерживается в nestjs как микросервис .Если вы хотите, чтобы ваше приложение поддерживало как HTTP-запросы, так и брокер сообщений, вы можете создать гибридное приложение .

// Create your regular nest application.
const app = await NestFactory.create(ApplicationModule);

// Then combine it with a RabbitMQ microservice
const microservice = app.connectMicroservice({
  transport: Transport.RMQ,
  options: {
    urls: [`amqp://localhost:5672`],
    queue: 'my_queue',
    queueOptions: { durable: false },
  },
});

await app.startAllMicroservicesAsync();
await app.listen(3001);
...