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
- .NET 8 ou superior
- Um projeto .NET com estes pacotes NuGet:
- Paramore.Brighter.MessagingGateway.Postgres: Permite integração com Postgres para filas de mensagens.
- Paramore.Brighter.ServiceActivator.Extensions.DependencyInjection: Registra o Brighter com Microsoft DI.
- Paramore.Brighter.ServiceActivator.Extensions.Hosting: Hospeda o Brighter como serviço em segundo plano.
- Serilog.AspNetCore: Para logs estruturados (opcional, mas recomendado).
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; }
- 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); } }
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 );
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)); })
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(); })
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)