DEV Community

Cover image for Brighter + Redis/Valkey: Como configurar o Brighter com Redis/Valkey
Rafael Andrade
Rafael Andrade

Posted on

Brighter + Redis/Valkey: Como configurar o Brighter com Redis/Valkey

Introdução ao Brighter e Redis

O Redis é um armazenamento de estruturas de dados em memória, frequentemente usado como broker de mensagens, cache ou banco de dados. Ele possui suporte a filas (queues), e é possível integrar com o Brighter usando o pacote Paramore.Brighter.MessagingGateway.Redis.

Requisitos

Recapitulação do Brighter

Antes de configurar o Redis, vamos revisar conceitos básicos do Brighter:

Mensagens (Comandos/Eventos)

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 direcionadas a um único destinatário (ex: EnviarEmail).
  • Eventos: Notificações broadcast (ex: PedidoEnviado).

Mapeador de Mensagens (Message Mapper)

Converte entre mensagens do Brighter e objetos da aplicação:

public class GreetingMapper : IAmAMessageMapper<Greeting>
{
    public Message MapToMessage(Greeting request)
    {
        var header = new MessageHeader
        {
            Id = request.Id,
            TimeStamp = DateTime.UtcNow,
            Topic = "greeting.topic",
            MessageType = MessageType.MT_EVENT
        };

        var body = new MessageBody(JsonSerializer.Serialize(request));
        return new Message(header, body);
    }

    public Greeting MapToRequest(Message message)
    {
        return JsonSerializer.Deserialize<Greeting>(message.Body.Bytes)!;
    }
}
Enter fullscreen mode Exit fullscreen mode

Manipulador de Requisições (Request Handler)

Processa as 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

Configuração do Brighter com Redis

1. Configuração da Conexão

Defina os detalhes de conexão com o Redis:

var connection = new RedisMessagingGatewayConfiguration
{
    RedisConnectionString = "localhost:6379?connectTimeout=1000&sendTimeout=1000&",
    MaxPoolSize = 10,
    MessageTimeToLive = TimeSpan.FromMinutes(10)
};
Enter fullscreen mode Exit fullscreen mode

2. Inscrição no Redis (Consumer)

Assine uma fila Redis:

.AddServiceActivator(opt =>
{
    opt.Subscriptions = [
        new RedisSubscription<Greeting>(
            new SubscriptionName("kafka.greeting.subscription"),
            new ChannelName("greeting.queue"),
            new RoutingKey("greeting.topic"),
            makeChannels: OnMissingChannel.Create
        ),
    ];

    opt.ChannelFactory = new ChannelFactory(
        new RedisMessageConsumerFactory(connection)
    );
})
Enter fullscreen mode Exit fullscreen mode

3. Publicação no Redis (Producer)

Publique eventos em uma fila:

.UseExternalBus(new RedisProducerRegistryFactory(connection, new[]
{
    new RedisMessagePublication
    {
        Topic = new RoutingKey("greeting.topic"),
        MakeChannels = OnMissingChannel.Create
    }
}).Create());
Enter fullscreen mode Exit fullscreen mode

Limitações e Considerações Importantes

1. Licenciamento do ServiceStack.Redis

A integração do Brighter com Redis depende do ServiceStack.Redis.Core, que limita o consumo simultâneo de mensagens sem uma licença comercial. Isso pode ser um gargalo para sistemas de alto throughput.

2. Falta de Suporte a Redis Streams (por enquanto)

Atualmente, o Brighter usa listas Redis para filas, não aproveitando os Redis Streams (mais modernos e com persistência). Uma atualização futura deve adicionar suporte a Streams para maior escalabilidade.

Conclusão

A integração do Brighter com Redis permite mensageria leve e escalável em aplicações .NET, aproveitando a velocidade do Redis em memória e a abstração do Brighter.

Para uso em produção, valide as configurações contra a documentação mais recente do Brighter, pois recursos como Redis Streams e clientes alternativos podem evoluir.

Referências

Top comments (0)