如何使用nestjs redis 微服务?

Posted

技术标签:

【中文标题】如何使用nestjs redis 微服务?【英文标题】:how to use nestjs redis microservice? 【发布时间】:2019-06-14 22:06:01 【问题描述】:

我正在学习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】:

有两个方面需要分开。它们可以是一个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`;
  

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

【讨论】:

以上是关于如何使用nestjs redis 微服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何将@liaoliaots/nestjs-redis redis 连接传递给全局保护构造函数

NestJS 微服务和云部署

使用带有 NestJs 微服务的套接字客户端

NestJS MQTT 微服务的有效@MessagePattern 是啥?

微服务之间的关系应该如何架构

通过nats消息运行分子微服务