Rabbitmq 为什么在创建microservice时需要定义队列名称?

Rabbitmq 为什么在创建microservice时需要定义队列名称?,rabbitmq,microservices,nestjs,Rabbitmq,Microservices,Nestjs,我想要一个混合的NestJS应用程序,HTTP+RabbitMQ。但我不知道我是否应该为每个队列创建不同的微服务 我遵循了NestJS的RabbitMQ指南()和GitHub示例() main.ts constructor( @Inject("CATS_QUEUE") private readonly client: ClientProxy ) { } @Get("mq") mq(): Observable<number> { const patter

我想要一个混合的NestJS应用程序,HTTP+RabbitMQ。但我不知道我是否应该为每个队列创建不同的微服务

我遵循了NestJS的RabbitMQ指南()和GitHub示例()

main.ts

constructor(
    @Inject("CATS_QUEUE") private readonly client: ClientProxy
  ) {
  }
  @Get("mq")
  mq(): Observable<number> {
    const pattern = { cmd: "sum" };
    const data = [1, 2, 3, 4, 5];
    return this.client.send<number>(pattern, data);
  }

  @MessagePattern({ cmd: "sum" })
  sum(data: number[]): number {
    console.log("MESSAGE RECEIVED : " + data.toString());
    return (data || []).reduce((a, b) => a + b);
  }
app.connectMicroservice({
运输:transport.RMQ,
选项:{
网址:[`amqp://user:user@主机名:5672`],
队列:“猫队”,
queueOptions:{dustable:false},
预取计数:1,
}
});
...
等待app.startAllMicroservicesAsync();
应用程序模块.ts(模块导入)

app.controller.ts

constructor(
    @Inject("CATS_QUEUE") private readonly client: ClientProxy
  ) {
  }
  @Get("mq")
  mq(): Observable<number> {
    const pattern = { cmd: "sum" };
    const data = [1, 2, 3, 4, 5];
    return this.client.send<number>(pattern, data);
  }

  @MessagePattern({ cmd: "sum" })
  sum(data: number[]): number {
    console.log("MESSAGE RECEIVED : " + data.toString());
    return (data || []).reduce((a, b) => a + b);
  }
构造函数(
@注入(“CATS_队列”)专用只读客户端:ClientProxy
) {
}
@获取(“mq”)
mq():可观察{
常量模式={cmd:“sum”};
常量数据=[1,2,3,4,5];
返回this.client.send(模式、数据);
}
@MessagePattern({cmd:“sum”})
总和(数据:数字[]):数字{
log(“收到的消息:+data.toString());
返回(数据| |[])。减少((a,b)=>a+b);
}

据我所知,我需要为
app.module.ts
中的每个队列定义
ClientsModule.register()。但为什么在创建微服务时还需要定义RabbitMQ队列名称呢?我需要为每个队列创建不同的微服务吗?

我不是NestJS用户,但在使用队列在微服务之间发送消息时,每个微服务都需要一个队列(而不是相反)

队列用于在独立组件之间异步发送(到)和接收(处理)消息


有道理吗?

您好,谢谢您的回答。是的,这是有道理的,但是在两个不同的地方定义队列名称(和其他队列选项)(在app.module.ts上注册客户端和在main.ts上创建微服务时)有什么意义呢?我猜它们是两个不同的进程,客户端(将定义一个队列)可能在某个地方定义了微服务队列,反之亦然。让我看一下实际的示例代码,然后返回给您:-),这样就可以使用/生成消息。正如我所看到的,如果不在main.ts中定义消息,您将无法使用消息