sql >> Database teknologi >  >> NoSQL >> Redis

hvordan man bruger nestjs redis microservice?

Der er to sider, du skal adskille. De kan være en del af én nest.js-applikation (f.eks. hybridapplikation) eller være i flere forskellige nest.js-applikationer:

Kunde

Klienten udsender beskeder om et emne/mønster og modtager et svar fra modtageren(e) af den udsendte besked.

Først skal du forbinde din klient. Du kan gøre det i onModuleInit . I dette eksempel ProductService udsender en besked, når en ny produktentitet oprettes.

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

Husk, at this.client.send returnerer en Observable . Det betyder, at der ikke sker noget, før du subscribe til det (hvilket du implicit kan gøre ved at kalde toPromise() ).

Mønsterhåndtering

Mønsterbehandleren bruger meddelelser og sender et svar tilbage til klienten.

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

En param-handler kunne selvfølgelig også være en klient og dermed både modtage og udsende beskeder.




  1. MongoDB $ eksisterer

  2. MongoDB $mul

  3. MongoDB virker ikke. FEJL:dbpath (/data/db) eksisterer ikke.

  4. Forstå Laravel caching:Cache facade og Redis