- Регистрация
- 1 Мар 2015
- Сообщения
- 1,481
- Баллы
- 155
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
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;
}
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)!;
}
}
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);
}
}
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)
};
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)
);
})
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());
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
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
- .NET 8 ou superior
- Projeto .NET com os seguintes pacotes NuGet:
- : Habilita integração com Redis.
- : Integra o Brighter com a injeção de dependência do Microsoft.
- : Hospeda o Brighter como serviço em segundo plano.
- : Para logs estruturados (opcional, mas recomendado).
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;
}
- Comandos: Operações direcionadas a um único destinatário (ex: EnviarEmail).
- Eventos: Notificações broadcast (ex: PedidoEnviado).
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)!;
}
}
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);
}
}
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)
};
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)
);
})
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());
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
- Código Completo:
- Documentação do Redis Queue: