NestJS-在微服务中将HTTP与RabbitMQ结合

时间:2019-01-01 11:41:08

标签: node.js events rabbitmq microservices nestjs

我有一些微服务,通过API网关公开。网关负责处理身份验证和路由到系统中。网关后面的服务主要是简单的CRUD服务。每个服务都公开自己的API,并通过HTTP同步通信。所有这些服务,包括API-Gateway,都是“默认” NestJS应用程序。

让我们坚持“猫”的例子。每当Cat-Service更新或创建新的Cat时,我都希望使用CatCreatedEventCatUpdatedEvent。该事件应该被推送到某些消息代理中,例如RabbitMQ,另一个服务应侦听此事件并异步处理该事件。

就如何以正确的方式“注入” RabbitMQ而言,我不确定如何实现这一目标,我想知道这种方法是否合计合理。我已经看到了NestJS的CQRS模块,但是我认为CQRS对于该域来说有点过多。尤其是因为在此域中没有好处,无法拆分读写模型。也许我完全走错了道路,所以希望您能给我一些建议。

1 个答案:

答案 0 :(得分:2)

nestjs支持

RabbitMQ作为microservice。如果希望您的应用程序同时支持http请求和消息代理,则可以创建hybrid application

// 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);