Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie verwende ich den Nestjs Redis Microservice?

Es gibt zwei Seiten, die Sie trennen müssen. Sie können Teil einer nest.js-Anwendung (z. B. Hybridanwendung) oder in mehreren verschiedenen nest.js-Anwendungen sein:

Kunde

Der Client sendet Nachrichten zu einem Thema/Muster und erhält eine Antwort von dem/den Empfänger(n) der gesendeten Nachricht.

Zuerst müssen Sie Ihren Client verbinden. Das können Sie in onModuleInit tun . In diesem Beispiel ProductService sendet eine Nachricht, wenn eine neue Produktentität erstellt wird.

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

Denken Sie daran, dass this.client.send gibt ein Observable zurück . Das bedeutet, dass nichts passiert, bis Sie sich subscribe (was Sie implizit tun können, indem Sie toPromise() aufrufen ).

Muster-Handler

Der Musterhandler verarbeitet Nachrichten und sendet eine Antwort an den Client zurück.

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

Natürlich könnte ein Param-Handler auch ein Client sein und damit sowohl Nachrichten empfangen als auch senden.