RabbitMQ & DataFlows
Uma biblioteca RabbitMQ de ferramentas .NET para ajudar a desenvolver rapidamente serviços de desempenho bem ou para ajudar a gerenciar conectividade durável com o RabbitMQ.Client !
Status
Atualizado: 05/03/2024
Servidor de teste: Windows 11 Pro (v10.0.22631 [Build 22631])
Servidor RabbitMQ: v3.13.2
Erlang: v26.2.5
Por que fazer um fluxo de dados de RabbitMQ?
Dataflows têm simultaneidade, serialização, monitoramento, compressão e criptografia configuráveis, tudo como cidadãos de primeira classe. Esse paradigma permite que os desenvolvedores se concentrem apenas nas coisas importantes - fazer o trabalho!
Aqui estão alguns recursos prontos com RabbitMQ.Dataflows .
Fluxos de trabalho
- Os pipelines (V1) são o executor de função de fluxo de trabalho leve como um executor como etapa.
- Todas as etapas do processo na ordem fornecida, permitindo que você ainda controlasse a ordem de execução.
- Paralelismo configurável e simultaneidade interna.
- Nenhuma Opentelemetria automática.
- Nenhuma exceção automática de captura/manuseio de erros assíncronos (exceções arremessadas Kill Pipelines).
- DataFlows (V2) são a classe de fluxo de trabalho mais complexa, mas completa.
- Todas as etapas do processo na ordem fornecida, permitindo que você ainda controlasse a ordem de execução.
- Paralelismo configurável e simultaneidade interna.
- Processamento assíncrono, processamento em lote, clonagem de consumidores e muito mais!
- Manipulação de erros assíncronos (simplifique o manuseio de erros funcionais, permitindo que as funções joguem).
- Funcionalidade automática (para a próxima fila) embutida.
- Openemetria com rastreamento distribuído nativo para publicar/consumidor.
Embutido
- Um rabbitmq
IConnectionPool e IChannelPool (durabilidade da conexão). - Suporta
ILogger<T> via LogHelpers Static Singleton. -
IWorkState contratado simplifica retornos e integração genéricos funcionais. - Possui suporte de suporte
ISerializationProvider para System.Text.Json e MessagePack .- Fácil de escrever seus próprios fornecedores.
- Possui suporte interno
ICompressionProvider para GZIP, Deflate, Brotli e Lz4. -
IEncryptionProvider é o suporte interno para AESGCM e Bouncycastle AESGCM. - RecyclableMemoryStream Opções para
ICompressionProvider E IEncryptionProvider . - Os editores publicam automaticamente as etapas de criptografia/descriptografia sem costura (também adiciona cabeçalhos).
- Os consumidores permitem etapas de compactação/descompressão sem costura (usa cabeçalhos).
- O editor/consumidores possui suporte de
OpenTelemetry interno.
Teste
- Todas as etapas internas terão testes de integração que devem remover as preocupações do desenvolvedor do usuário final.
- O caso futuro incluirá um unittesting abstrato muito mais complexo conforme o tempo permitir.
- O desenvolvedor só deve precisar testar seu código de negócios funcional.
Guias, codificar e exemplos
- Introdução ao RabbitMQ.DataFlows ConnectionPool.
- Introdução ao rabbitmq.dataflows Channelpool.
- Introdução ao Rabbitmq.DataFlows Channelpool e BasicPublish.
- Introdução ao rabbitmq.dataflows Channelpool e BasicGet.
- Introdução ao rabbitmq.dataflows Channelpool e BasicConsume.
- Introdução ao RabbitMQ.DataFlows Serialization.
- Introdução ao Rabbitmq.DataFlows Publisher.
- Introdução ao RabbitMQ.DataFlows Autopublisher.
- Introdução ao consumidor do RabbitMq.DataFlows .
- Introdução ao RabbitMQ.DataFlows ConsumerDataFlow .
Mais por vir e os auxílios visuais podem ser encontrados no fundo!
Você também pode encontrar vários exemplos de bibliotecas dentro dos tests/UnitTests ou no projeto tests/RabbitMQ.Console.Test .
Principal RabbitMQ Library
Houseofcat.rabbitmq
Uma biblioteca que se concentra na conexão RabbitMQ e no gerenciamento de canais para criar editores e consumidores tolerantes a falhas.
Anteriormente chamado Cookedrabbit.core/Tesseract.
DataFlow Library
Houseofcat.dataflows
Uma biblioteca que fornece os fluxos de dados mágicos básicos para o rabbitmq.dataflows.
- Bloco TPL personalizado - ChannelBock usado como um
BufferBlock<TIn> - Possui DataFlowEngine e ChannelBlockEngine.
- Possui pipelines (Dataflow Alternative).
Bibliotecas principais de produtividade
Essas bibliotecas estão aqui para ajudá -lo a criar fluxos de dados poderosos para suas mensagens.
Houseofcat.serialização
Uma biblioteca que possui uma coleção de .NET ISerializationProvider ou a interface para fazer a sua.
- Suporta MessagePack e System.text.json e newtonsoft.json.
Houseofcat.compressão
Uma biblioteca que possui uma coleção de .NET ICompressionProvider ou da interface para criar a sua.
- Suporta LZ4, GZIP, Brotli e Deflate.
- Suporta variantes reciclableMemorystream.
Houseofcat.hing
Uma biblioteca que se concentra na implementação do hash.
Houseofcat.encryption
Uma biblioteca que fornece contratos de criptografia e o AesGCM / AesCBC .NET IEncryptionProvider , bem como a interface para fazer a sua.
- Suporta o AESCBC via CryptoStream (bom para arquivo criptografado/MemoryStreams).
- Suporta .NET AESGCM 128, 192, 256 (não-streams).
- Suporta Bouncycastle AESGCM 128/192/256.
- Suporta variantes reciclableMemorystream.
Houseofcat.utilities
Uma biblioteca que se concentra nas funções e extensões reutilizáveis de propósito geral que simplificam a experiência de codificação.
Integrações não críticas da biblioteca
Houseofcat.data
Uma biblioteca que fornece as classes auxiliares para manipulação e transformação de dados.
Também fornece abstrações de banco de dados, uma integração simples de elegante e a geração de consulta SQL Integration SQLATA.
Suporte de fábrica de conexão de banco de dados
- System.Data.SqlClient
- Microsoft.Data.SqlClient
- Mysql.data.mysqlclient
- Npgsq
- Mysql.data
- Oráculo
- Sqlite
Auxílios visuais
Incluí um arquivo Excalidraw de alto nível com capturas de tela abaixo. Certifique-se de abrir o arquivo para obter uma melhor qualidade e informações mais atualizadas, pois continuarei aprimorando-o ao longo do tempo. O objetivo não é ter tudo aqui, mas eu mesmo entendo o fluxo de uma biblioteca com a adição de uma ajuda visual. Não há nada verdadeiramente especial nessa biblioteca, são apenas o básico, mas há muitas partes móveis quando você recua.
RabbitService - Iniciar ciclo de vida

Consumidor - Iniciar o ciclo de vida

ConsumerDataFlow - fluxo de dados

Houseofcat.io