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)