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)