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)