DEV Community

Cover image for Brighter V10: Utilizando PostgreSQL como Gateway de Mensagens Leve
Rafael Andrade
Rafael Andrade

Posted on

Brighter V10: Utilizando PostgreSQL como Gateway de Mensagens Leve

Em artigos anteriores, abordei o Brighter V10 RC1. Uma adição notável é o suporte ao Postgres como gateway de mensagens, ideal para aplicações pequenas ou protótipos devido à simplicidade e configuração leve.

Requisitos

Recapitulação do Brighter

Antes de continuar com a configuração do Postgres, vamos recapitular o que já sabemos sobre o Brighter.

Request (Command/Event)

Defina mensagens usando IRequest:

public class Greeting() : Event(Guid.NewGuid())
{
    public string Name { get; set; } = string.Empty;
}
Enter fullscreen mode Exit fullscreen mode
  • Commands: Operações com único destinatário (ex: SendEmail).
  • Events: Notificações de broadcast (ex: OrderShipped).

Message Mapper (Opcional)

Converte entre mensagens do Brighter e objetos da aplicação. Por padrão, o Brighter usa serialização JSON.

Request Handler

Processa mensagens recebidas:

public class GreetingHandler(ILogger<GreetingHandler> logger) : RequestHandler<Greeting>
{
    public override Greeting Handle(Greeting command)
    {
        logger.LogInformation("Hello {Name}", command.Name);
        return base.Handle(command);
    }
}
Enter fullscreen mode Exit fullscreen mode

Configurando Brighter com Postgres

1. Configuração de Conexão

Defina os detalhes da conexão Postgres:

var config = new RelationalDatabaseConfiguration(
  "<connection-string>", 
   queueStoreTable: "QueueData" // Criada automaticamente se ausente
);
Enter fullscreen mode Exit fullscreen mode

Observação: Se a tabela de fila não existir, o Brighter a criará automaticamente.

2. Assinatura Postgres

Inscreva-se em um tópico:

 .AddServiceActivator(opt =>
 {
     opt.Subscriptions =
     [
         new PostgresSubscription<Greeting>(
             subscriptionName: new SubscriptionName("greeting.subscription"),
             channelName: new ChannelName("greeting.topic"),
             makeChannels: OnMissingChannel.Create,
             messagePumpType: MessagePumpType.Reactor,
             timeOut:  TimeSpan.FromSeconds(10)
           ),
     ];

     opt.DefaultChannelFactory = new PostgresChannelFactory(new PostgresMessagingGatewayConnection(config));
})
Enter fullscreen mode Exit fullscreen mode

3. Configuração de Produtor Postgres

Publique eventos em um tópico:

.UseExternalBus(opt =>
{
    opt.ProducerRegistry = new PostgresMessagingGatewayConnection(config, [
        new PostgresPublication<Greeting>
        {
            Topic = new RoutingKey("greeting.topic"),
            MakeChannels = OnMissingChannel.Create
        }]).Create();
})
Enter fullscreen mode Exit fullscreen mode

Conclusão

Integrar o Brighter com Postgres simplifica a criação de sistemas escaláveis baseados em mensagens para casos de uso leves. Aproveitando os padrões aprimorados do V10 e a confiabilidade do Postgres, desenvolvedores podem focar na lógica de negócio sem a complexidade de infraestruturas pesadas.

Benefícios-chave

  • Consistência transacional: Aproveita garantias ACID do Postgres
  • Infraestrutura simplificada: Banco único para dados da aplicação + mensagens
  • Prototipagem rápida: Elimina dependências de brokers de mensagens dedicados

Observação: Para cargas de produção com alto throughput, considere brokers dedicados como Kafka ou RabbitMQ.

Para um exemplo completo, consulte o repositório de amostra no GitHub.

Top comments (0)