Nodejs Nestjs消息队列插件@nestjs/rabbitmq的使用

Nodejs Nestjs消息队列插件@nestjs/rabbitmq的使用
[@nestjs](/user/nestjs)/rabbitmq 是一个基于 NestJS 的 RabbitMQ 消息队列插件,用于在 NestJS 应用中实现消息的发布和订阅。下面是一个简单的使用示例,展示如何在 NestJS 项目中配置和使用 RabbitMQ。

1. 安装依赖

首先,你需要安装 [@nestjs](/user/nestjs)/microservices[@nestjs](/user/nestjs)/rabbitmq 以及 RabbitMQ 的客户端库 amqplib

npm install [@nestjs](/user/nestjs)/microservices [@nestjs](/user/nestjs)/rabbitmq amqplib

2. 配置 RabbitMQ 模块

接下来,在你的 NestJS 项目中创建一个 RabbitMQ 模块,并进行相应的配置。假设你有一个名为 app.module.ts 的模块文件:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { ClientsModule, Transport } from '[@nestjs](/user/nestjs)/microservices';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
    ClientsModule.register([
      {
        name: 'RABBITMQ_CLIENT',
        transport: Transport.RMQ,
        options: {
          urls: ['amqp://localhost:5672'], // RabbitMQ 服务器地址
          queue: 'test_queue', // 队列名称
          queueOptions: {
            durable: false,
          },
        },
      },
    ]),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3. 创建消费者

创建一个服务来处理消息。假设你有一个名为 app.service.ts 的服务文件:

import { Injectable } from '[@nestjs](/user/nestjs)/common';
import { ClientRMQ } from '[@nestjs](/user/nestjs)/microservices';

@Injectable()
export class AppService {
  constructor(private readonly client: ClientRMQ) {
    this.client.connect();
  }

  onModuleInit() {
    this.client.subscribe('test_queue', (msg) => {
      console.log('Received message:', msg.toString());
    });
  }
}

4. 创建控制器

创建一个控制器来发送消息。假设你有一个名为 app.controller.ts 的控制器文件:

import { Controller, Get } from '[@nestjs](/user/nestjs)/common';
import { ClientRMQ } from '[@nestjs](/user/nestjs)/microservices';

@Controller()
export class AppController {
  constructor(private readonly client: ClientRMQ) {
    this.client.connect();
  }

  @Get()
  sendMessage(): string {
    const response = this.client.send('test_queue', 'Hello, RabbitMQ!');
    return 'Message sent!';
  }
}

5. 启动应用

最后,确保你的 RabbitMQ 服务器正在运行,并启动你的 NestJS 应用:

npm run start

现在,当你访问 / 路径时,会向 RabbitMQ 发送一条消息,同时消息消费者会接收到这条消息并打印到控制台。

以上就是使用 [@nestjs](/user/nestjs)/rabbitmq 插件的基本步骤。你可以根据需要调整配置和逻辑。


3 回复

当然,@nestjs/rabbitmq插件让NestJS与RabbitMQ的消息队列合作变得轻松愉快!首先,确保你的项目中安装了这个插件:

npm install [@nestjs](/user/nestjs)/rabbitmq

接着,在你的模块文件(比如app.module.ts)里,配置RabbitMQ连接:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { RabbitMQModule } from '[@nestjs](/user/nestjs)/rabbitmq';

@Module({
  imports: [
    RabbitMQModule.forRoot(RabbitMQModule, {
      exchanges: [
        {
          name: 'my-exchange',
          type: 'direct',
        },
      ],
    }),
  ],
})
export class AppModule {}

然后,你可以创建一个服务来发送和接收消息。比如,创建一个MessageService来处理这些事情:

import { Injectable } from '[@nestjs](/user/nestjs)/common';
import { Client, RpcException } from '[@nestjs](/user/nestjs)/microservices';

@Injectable()
export class MessageService {
  @Client({
    transport: Transport.RMQ,
    options: {
      urls: ['amqp://localhost:5672'],
      queue: 'message_queue',
      queueOptions: {
        durable: false,
      },
    },
  })
  client: Client;

  sendMessage(message: string) {
    this.client.emit('message', message);
  }

  getMessage() {
    return this.client.send<string>('message', 'Hello from Nest!');
  }
}

这样,你就有了一个可以发送和接收消息的服务啦!希望这能让你的NestJS应用像兔子一样灵活地传递信息!


@nestjs/rabbitmq 是 NestJS 生态系统中用于与 RabbitMQ 进行交互的一个官方库。RabbitMQ 是一个广泛使用的开源消息代理软件(有时也称为消息队列),它能够实现高效的消息传输。

下面我将介绍如何在 NestJS 应用程序中设置和使用 @nestjs/rabbitmq 插件。

1. 安装依赖

首先,你需要安装必要的包:

npm install @nestjs/microservices @nestjs/rabbitmq amqplib
  • @nestjs/microservices:提供微服务框架的基础。
  • @nestjs/rabbitmq:专门为 RabbitMQ 提供支持。
  • amqplib:是 RabbitMQ 的客户端库。

2. 配置 RabbitMQ

在你的 NestJS 应用程序中创建一个配置文件来定义 RabbitMQ 的连接信息。通常,这个配置可以放在 app.module.ts 中或作为一个单独的服务进行管理。

import { Module } from '@nestjs/common';
import { ClientsModule, Transport } from '@nestjs/microservices';

@Module({
  imports: [
    ClientsModule.register([
      {
        name: 'RABBITMQ_CLIENT',
        transport: Transport.RMQ,
        options: {
          urls: ['amqp://localhost:5672'], // RabbitMQ 服务器地址
          queue: 'test_queue', // 队列名称
          queueOptions: {
            durable: false // 队列是否持久化
          },
        },
      },
    ]),
  ],
  providers: [],
})
export class AppModule {}

3. 创建消息生产者

创建一个服务来发送消息到 RabbitMQ。

import { Injectable } from '@nestjs/common';
import { ClientProxy } from '@nestjs/microservices';

@Injectable()
export class MessageProducerService {
  constructor(private readonly client: ClientProxy) {}

  sendMessage(message: string) {
    this.client.emit('message', message);
  }
}

4. 创建消息消费者

创建一个服务来接收来自 RabbitMQ 的消息。

import { MessagePattern } from '@nestjs/microservices';

@Injectable()
export class MessageConsumerService {

  @MessagePattern({ cmd: 'message' })
  handleMessage(message: any): string {
    console.log(`Received message: ${message}`);
    return 'Message received';
  }
}

5. 在模块中引入服务

确保在 AppModule 或其他需要使用这些服务的模块中导入它们。

import { Module } from '@nestjs/common';
import { MessageProducerService } from './message-producer.service';
import { MessageConsumerService } from './message-consumer.service';

@Module({
  providers: [MessageProducerService, MessageConsumerService],
})
export class AppModule {}

这样你就有了一个基本的 NestJS 应用程序,它可以与 RabbitMQ 通信,既发送也接收消息。

@nestjs/rabbitmq 是 NestJS 框架中用于处理 RabbitMQ 消息队列的官方插件。首先安装该插件及相关依赖:

npm install @nestjs/rabbitmq amqplib

在模块文件中配置连接选项:

import { Module } from '@nestjs/common';
import { RabbitMQModule } from '@nestjs/rabbitmq';

@Module({
  imports: [
    RabbitMQModule.forRoot(RabbitMQModule, {
      exchanges: [
        {
          name: 'my-exchange',
          type: 'direct',
        },
      ],
    }),
  ],
})
export class AppModule {}

创建服务来发送和接收消息:

import { Injectable } from '@nestjs/common';
import { RabbitMQModule } from '@nestjs/rabbitmq';

@Injectable()
export class MessageService {
  constructor(private readonly rabbitMQ: RabbitMQModule) {}

  async sendMessage(message: string) {
    await this.rabbitMQ.publish('my-exchange', 'routing-key', { message });
  }

  async getMessage() {
    const { message } = await this.rabbitMQ.consume('my-exchange', 'routing-key');
    return message;
  }
}

这样你就可以在 NestJS 应用中使用 RabbitMQ 进行消息的发送与接收了。

回到顶部