как пользоваться nestjs redis microservice? - PullRequest
0 голосов
/ 21 января 2019

я учусь nestjs microservice,

Какую команду я могу использовать?

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 голосов
/ 21 января 2019

Есть две стороны, которые нужно разделить.Они могут быть частью одного приложения nest.js (например, гибридное приложение ) или находиться в нескольких различных приложениях 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()).

Pattern Handler

Обработчик шаблона принимает сообщения и отправляет ответ обратноклиенту.

@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`;
  }

Конечно, обработчик параметров также может быть клиентом, и при этом получать и широковещательные сообщения.

...