如何使用NestJS Redis微服务?

时间:2019-01-21 13:42:44

标签: node.js typescript redis microservices nestjs

我正在学习nestjs微服务,

我可以使用什么命令?

const pattern = { cmd: 'get' };
this.client.send<any>(pattern, data)

如何从redis接收数据?

constructor(private readonly appService: AppService) {}
      @Client({
        transport: Transport.REDIS,
        options: {
          url: 'redis://127.0.0.1:6379',
        },
      })
      client: ClientProxy;

      @Get()
      getHello(): any {
        const pattern = { cmd: 'get foo' };  //Please write sample code here in document
        const data = '';
        return this.client.send<any>(pattern, data);
      }

1 个答案:

答案 0 :(得分:3)

您需要分开两个方面。它们可以是一个nest.js应用程序(例如hybrid application)的一部分,也可以位于多个不同的nest.js应用程序中:

客户

客户端在主题/模式上广播消息,并从接收到的消息接收者的响应。

首先,您必须连接客户端。您可以在onModuleInit中进行操作。在此示例中,ProductService在创建新产品实体时广播一条消息。

@Injectable()
export class ProductService implements OnModuleInit {

  @Client({
    transport: Transport.REDIS,
    options: {
      url: 'redis://localhost:6379',
    },
  })
  private client: ClientRedis;

  async onModuleInit() {
    // Connect your client to the redis server on startup.
    await this.client.connect();
  }

  async createProduct() {
    const newProduct = await this.productRepository.createNewProduct();
    // Send data to all listening to product_created
    const response = await this.client.send({ type: 'product_created' }, newProduct).toPromise();
    return response;
  }
}

请记住,this.client.send返回Observable。这意味着,直到您subscribe都不会发生任何事情(您可以通过调用toPromise()来隐式执行此操作)。

模式处理程序

模式处理程序使用消息并将响应发送回客户端。

@Controller()
export class NewsletterController {

  @MessagePattern({ type: 'product_created' })
  informAboutNewProduct(newProduct: ProductEntity): string {
    await this.sendNewsletter(this.recipients, newProduct);
    return `Sent newsletter to ${this.recipients.length} customers`;
  }

当然,param处理程序也可以是客户端,因此可以接收和广播消息。