DEV Community

Cover image for Brighter V10: Um Lançamento Importante com CloudEvents, Novos Provedores e Resiliência Aprimorada
Rafael Andrade
Rafael Andrade

Posted on

Brighter V10: Um Lançamento Importante com CloudEvents, Novos Provedores e Resiliência Aprimorada

Após vários anos de desenvolvimento dedicado, o Brighter V10 foi lançado oficialmente! Embora continuemos oferecendo suporte ao Brighter V9 nos próximos meses — e possivelmente até o próximo ano ou além —, este lançamento marca um marco significativo no Brighter. O planejamento para a V11 poderá começar no próximo ano, mas, por enquanto, vamos explorar as novidades da V10.

O que há de novo na V10?

O Brighter V10 traz uma série de recursos e integrações poderosos projetados para simplificar seu processo de desenvolvimento.

Suporte a CloudEvents

O Brighter V10 agora adota por padrão a especificação CloudEvents. Isso garante maior interoperabilidade entre diferentes serviços e plataformas, definindo automaticamente os cabeçalhos de eventos padronizados, tornando seus sistemas distribuídos mais robustos e independentes de fornecedor.

Mapeador de mensagens padrão

Você não precisa mais escrever um mapeador de mensagens personalizado ao usar JSON. O Brighter inclui um mapeador padrão integrado para serialização JSON convencional. Além disso, há um mapeador dedicado para CloudEvents em formato JSON, simplificando a integração com plataformas compatíveis com CloudEvents.

Agendador de Mensagens Integrado

O processamento de mensagens com atraso agora é uma funcionalidade de primeira classe. O Brighter V10 introduz um novo agendador de mensagens com suporte nativo a backends populares, como Quartz.NET, Hangfire e AWS Scheduler. Agendar um comando para execução futura agora é tão simples quanto:

processor.Post(TimeSpan.FromSeconds(10), new SomeCommand());
Enter fullscreen mode Exit fullscreen mode

Integração com Pipelines de Resiliência do Polly

Atualizamos nossas capacidades de resiliência integrando a moderna API de Pipelines de Resiliência do Polly. Isso oferece uma maneira mais poderosa e flexível de configurar políticas como retentativas, disjuntores (circuit breakers) e tempos limite (timeouts) para o processamento de comandos e eventos.

services.AddBrighter(opt =>
{
    var resiliencePipelineRegistry = new ResiliencePipelineRegistry<string>(); 
    resiliencePipelineRegistry.AddBrighterDefault();
    ....

    opt.ResiliencePipelineRegistry = resiliencePipelineRegistry;

})
Enter fullscreen mode Exit fullscreen mode

Melhor suporte a tipos de referência anuláveis (Nullable Reference Types)

Melhoramos significativamente as anotações de tipos de referência anuláveis em todo o código-fonte, resultando em um código mais seguro e previsível ao trabalhar com projetos que utilizam anulabilidade.

Suporte ampliado a provedores

Ampliamos consideravelmente o ecossistema de integração do Brighter com novos provedores de primeira classe:

  • MongoDB: Suporte completo para usar o MongoDB como Inbox, Outbox e para bloqueios distribuídos (Distributed Locks).
  • RocketMQ: Suporte nativo ao gateway de mensageria RocketMQ.
  • Postgres: Suporte ao gateway de mensageria do PostgreSQL.
  • Google Cloud Platform: Suporte ao GCP, incluindo:
    • Pub/Sub como gateway de mensageria.
    • Firestore para Inbox, Outbox e bloqueios distribuídos.
    • Spanner para os padrões Inbox e Outbox.
  • AWS SDK V4: Uma nova implementação para o mais recente AWS SDK para .NET (V4), fornecida em pacotes com sufixo V4, ao lado do suporte existente à V3.
  • Suporte aprimorado à AWS:
    • Compatibilidade aprimorada com LocalStack: Problemas conhecidos resolvidos para uma experiência de desenvolvimento local mais suave.
    • Recursos avançados do SQS/SNS: Adicionado suporte para publicação direta no SQS e tópicos/filas FIFO (First-In-First-Out) do SNS/SQS.
  • RabbitMQ: Suporte ao cliente RabbitMQ V7 e filas Quorum.

Alterações que quebram compatibilidade (Breaking Changes)

Como uma atualização de versão principal, a V10 inclui várias alterações incompatíveis voltadas para melhorar a saúde e usabilidade de longo prazo da biblioteca.

Remoção do suporte ao .NET 6

O Brighter V10 agora tem como alvo o .NET 8, .NET 9.0 e .NET Standard 2.0. Em linha com a política de suporte da Microsoft, removemos o suporte ao .NET 6, que já não está mais na janela de Suporte de Longo Prazo (LTS). Para atualizar para o Brighter V10, você deve atualizar o framework de destino do seu projeto.

Separação clara entre APIs síncronas e assíncronas

Para oferecer uma API mais clara e explícita, separamos as interfaces síncronas e assíncronas. Agora você encontrará interfaces distintas com os sufixos Async e Sync.

Exemplo: os mapeadores de mensagens IAmAMessageMapper agora são usados para mapeamento síncrono, enquanto uma nova interface IAmAMessageMapperAsync está disponível para operações assíncronas. Atualize seus mapeadores personalizados para implementar a interface apropriada.

Redução do uso excessivo de tipos primitivos ("Primitive Obsession")

Para melhorar a segurança de tipos e a clareza do domínio, substituímos tipos primitivos (como string) por tipos dedicados (Id, PartitionKey, etc.) em conceitos-chave, como IDs e chaves de partição. Para facilitar a migração, foram implementadas conversões implícitas de string para esses novos tipos.

Como bônus, o novo método Id.Random() gerará por padrão UUID v7 quando executado no .NET 9+.

Alterações na injeção de dependência da Microsoft

A configuração da injeção de dependência foi simplificada. Introduzimos uma API de configuração mais fluente e intuitiva para configurar os serviços do Brighter no seu IServiceCollection. Veja:

// V9
services.AddServiceActivator(opt =>
{
    opt.Subscriptions = /* ...configuração de assinaturas... */;
    opt.ChannelFactory = new ChannelFactory(connection);
})
.UseExternalBus(new SnsProducerRegistryFactory(...).Create());
Enter fullscreen mode Exit fullscreen mode
// V10
services.AddConsumers(opt =>
{
    opt.Subscriptions = /* ...configuração simplificada de assinaturas... */;
    opt.DefaultChannelFactory = new ChannelFactory(connection);
})
.AddProducers(opt =>
{
    opt.ProducerRegistry = new CombinedProducerRegistryFactory(
        new SnsMessageProducerFactory(...),
        new SqsMessageProducerFactory(...)
    ).Create();
});
Enter fullscreen mode Exit fullscreen mode

Consulte nossa documentação para conhecer os novos métodos de registro.

Renomeação e descontinuação de pacotes

O Brighter renomeou e deixou de publicar alguns pacotes.

Pacotes renomeados:

  • Paramore.Brighter.MessagingGateway.RMQParamore.Brighter.MessagingGateway.RMQ.Sync
  • Paramore.Brighter.Extensions.HostingParamore.Brighter.Outbox.Hosting
  • Paramore.Brighter.MsSql.DapperParamore.Brighter.Dapper
  • Paramore.Brighter.Tranformers.AWSParamore.Brighter.Transformers.AWS (correção ortográfica)

Pacotes descontinuados (suporte removido na V10):

  • Paramore.Brighter.MessagingGateway.RESTMS
  • Paramore.Brighter.Outbox.EventStore

Ação necessária: Se seu projeto depender de um pacote descontinuado, abra uma issue em nosso repositório no GitHub para discutir.

Conclusão

O Brighter V10 representa um grande avanço, adotando práticas modernas do .NET e padrões nativos da nuvem. Com novos recursos como CloudEvents, mapeador de mensagens padrão e suporte ampliado a provedores como MongoDB, GCP e RocketMQ.

Estamos entusiasmados para que você experimente e ansiosos pelo seu feedback. Para guias detalhados de migração e documentação, visite nosso repositório no GitHub.

Top comments (0)