NestJS -在微服务中结合HTTP和RabbitMQ

3mpgtkmj  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(245)

我有一些微服务,它们通过API网关公开。网关负责处理身份验证和路由到系统中。网关后面的服务大多是简单的CRUD服务。每个服务公开自己的API,它们通过HTTP同步通信。所有这些服务,包括API网关,都是“默认”NestJS应用程序。
让我们继续使用Cats的例子。每当Cat-Service更新或创建一个新的Cat时,我希望发出一个CatCreatedEventCatUpdatedEvent。该事件应该被推送到某个消息代理(如RabbitMQ)中,另一个服务应该侦听该事件并异步处理该事件。
我不知道如何实现这一点,就如何“注入”RabbitMQ的正确方式而言,我想知道这种方法在generel中是否有意义。我已经看到了NestJS的CQRS模块,但我认为CQRS对这个领域来说有点太多了。特别是因为在这个领域中拆分读和写模型没有任何好处。也许我完全走错了路。所以我希望你能给我一些建议。

x8diyxa7

x8diyxa71#

RabbitMQ在nestjs中作为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.startAllMicroservices();
await app.listen(3001);
lskq00tm

lskq00tm2#

注意startAllMicroservices异步已过时****

import { Transport, MicroserviceOptions } from '@nestjs/microservices';
        const app = await NestFactory.create(AppModule);
              app.connectMicroservice<MicroserviceOptions>({
                transport: Transport.TCP,
                options: { retryAttempts: 5, retryDelay: 3000 },
              });

              await app.startAllMicroservices();
              await app.listen(3001);
              console.log(`Application is running on: ${await app.getUrl()}`);

相关问题