DEV Community

Cover image for Migração para Brighter V10 com Microsoft SQL Server
Rafael Andrade
Rafael Andrade

Posted on • Edited on

Migração para Brighter V10 com Microsoft SQL Server

Em artigos anteriores, abordei a integração do Brighter com o MS SQL Server e o Brighter V10 RC1. Este guia foca na migração para o Brighter V10, destacando mudanças de configuração do MS SQL Server e atualizações que quebram compatibilidade.

Requisitos

Recapitulação do Brighter

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

Request (Comando/Evento)

Defina mensagens usando IRequest:

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

Message Mapper (Opcional)

Traduz entre mensagens Brighter e objetos do seu app. Para fluxos assíncronos, mappers agora requerem IAmAMessageMapperAsync.

Request Handler

Processa mensagens recebidas:

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

Configurando Brighter com SQL Server

1. Criando tabela de filas

O Brighter não cria a tabela automaticamente. Use este script:

IF NOT (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'QueueData')) BEGIN CREATE TABLE [dbo].[QueueData]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [Topic] [nvarchar](255) NOT NULL, [MessageType] [nvarchar](1024) NOT NULL, [Payload] [nvarchar](max) NOT NULL, CONSTRAINT [PK_QueueData] PRIMARY KEY CLUSTERED ([Id] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] CREATE NONCLUSTERED INDEX [IX_Topic] ON [dbo].[QueueData]([Topic] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] END; 
Enter fullscreen mode Exit fullscreen mode

2. Configuração de conexão

Defina detalhes da conexão SQL Server:

var config = new RelationalDatabaseConfiguration("<string-de-conexão>", queueStoreTable: "QueueData"); 
Enter fullscreen mode Exit fullscreen mode

3. Assinatura SQL

Inscreva-se em um tópico:

.AddServiceActivator(opt => { opt.Subscriptions = [ new MsSqlSubscription<Greeting>( subscriptionName: new SubscriptionName("greeting.subscription"), channelName: new ChannelName("greeting.topic"), makeChannels: OnMissingChannel.Create, messagePumpType: MessagePumpType.Reactor, timeOut: TimeSpan.FromSeconds(10) ), ]; opt.DefaultChannelFactory = new ChannelFactory(new MsSqlMessageConsumerFactory(config)); }) 
Enter fullscreen mode Exit fullscreen mode

4. Configuração do Produtor SQL

Publique eventos em um tópico:

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

Mudanças Incompatíveis no Brighter V10

O Brighter V10 introduz atualizações na integração SQL. Principais mudanças:

Reformulação do Message Mapper

Serialização JSON Padrão:

Na V9, mappers eram obrigatórios. Na V10, a serialização JSON é nativa, a menos que lógica customizada seja necessária. Você também pode alterar a serialização padrão do Brighter.

Assinaturas

Duas mudanças principais:

Tipos de Message Pump Explícitos

O campo runAsync/isAsync (booleano) foi substituído por messagePumpType do tipo MessagePumpType (Reactor, Proactor, Unknown).

Renomeação de Propriedade

Em AddServiceActivator, a propriedade ChannelFactory foi renomeada para DefaultChannelFactory.

Publicação

Use ExternalBusConfiguration para configurar produtores e padrões de outbox:

// V10 .UseExternalBus(opt => { ... }) // V9 .UseExternalBus(new RmqProducerRegistryFactory(...)) 
Enter fullscreen mode Exit fullscreen mode

Conclusão

O Brighter V10 simplifica a integração com SQL Server enquanto introduz mudanças incompatíveis para melhorar clareza e flexibilidade. Principais atualizações incluem serialização integrada, tipos explícitos de message pumps e APIs de configuração otimizadas. Para detalhes completos, consulte o repositório de exemplo no GitHub.

Top comments (0)