npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@tegrus/dead-letter

v2.2.0

Published

Pacote contendo as definições da Dead Letter Queue e o DeadLetterModule para auxiliar no tratamento das mensagens das filas do RabbitMQ

Downloads

2

Readme

Descrição

Pacote contendo as definições da Dead Letter Queue e o DeadLetterModule para auxiliar no tratamento das mensagens das filas do RabbitMQ

Pré-requisitos

  • Definir globalmente o MongooseModule com a conexão ao banco de dados MongoDB
  • Configurar um consumidor para a fila dead-letter (Dead Letter Queue) do RabbitMQ
  • Configurar um produtor para a fila conectada à Dead Letter Queue (para que a DLQ possa enviar a mensagem de volta)

Instalação

yarn add @tegrus/dead-letter

Utilização

Ao configurar o consumidor da Dead Letter Queue (src/main.ts)

import { dlqConfig } from '@tegrus/dead-letter';

async function bootstrap() {
  // [...]

  const configService = app.get(ConfigService);

  app.connectMicroservice<MicroserviceOptions>(
    dlqConfig(configService.get<string>('rabbit.url')),
  );

  //[...]
}
bootstrap();

Ao configurar uma instância, tanto produtor quanto consumidor, de outra fila (as mensagens rejeitadas dessa fila serão enviadas para a Dead Letter Queue)

import { dlqBindConfig } from '@tegrus/dead-letter';

// [...]

ClientsModule.registerAsync([
  {
    name: 'MY_BROKER',
    useFactory: (configService: ConfigService) => ({
      transport: Transport.RMQ,
      options: {
        urls: [configService.get<string>('rabbit.url')],
        queue: 'myqueue',
        noAck: false,
        queueOptions: {
          durable: false,
          ...dlqBindConfig,
        },
      },
    }),
    inject: [ConfigService],
  },
]);

// [...]

Importar no módulo principal da aplicação

import { DeadLetterModule } from '@tegrus/dead-letter';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      cache: true,
      load: [myconfig],
    }),
    DeadLetterModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: (configService: ConfigService) => ({
        // A opção environment determina o ambiente de execução da aplicação
        environment: configService.get<string>('NODE_ENV'),
        // Uma lista de URLs para onde a mensagem rejeitada é enviada antes de ser descartada pela DLQ após exceder o limite de tentativas
        webhook: {
          urls: [configService.get<string>('webhookURL')],
        },
        // Caso a opção debug seja true, serão mostradas no console informações sobre as mensagens que são enviadas à DLQ
        debug: true,
      }),
      inject: [ConfigService],
    }),
  ],
})
export class AppModule {}

Utilizar o método run do DeadLetterService dentro dos métodos consumidores das filas

import { Controller, Inject } from '@nestjs/common';
import { ClientProxy, MessagePattern, RmqContext, Ctx } from '@nestjs/microservices';
import { DeadLetterService } from '@tegrus/dead-letter';

@Controller('my')
export class MyController {
  constructor(
    private readonly deadLetterService: DeadLetterService,
    @Inject('MY_BROKER') private readonly client: ClientProxy;
  ) {}

  @MessagePattern('pattern')
  async consumer(@Ctx() context: RmqContext) {
    await this.deadLetterService.run(context, this.client, async () => {
      // A lógica do consumer da sua fila
      // [...]
    })
  }
}

Desta forma a mensagem será recebida pela sua fila e executará a lógica que você implementou. Caso ocorra um erro durante o processamento da mensagem, ela será rejeitada e enviada para a DLQ, que por sua vez enviará de volta à fila original caso ainda não tenha atingido o limite de rententativas. Caso contrário, a messagem será enviada para o MongoDB.

Observações

  • Não é necessário utilizar os métodos .ack e .reject/.nack no canal pois o DeadLetterService já faz isso