Rabbitmq y flujos de datos
¡Una biblioteca de RabbitMQ de herramientas .NET para ayudar a desarrollar rápidamente servicios de buen rendimiento o simplemente ayudar a gestionar la conectividad duradera con RabbitMQ.Client !
Estado
Actualizado: 05/03/2024
Servidor de prueba: Windows 11 Pro (v10.0.22631 [Build 22631])
Servidor RabbitMQ: v3.13.2
Erlang: v26.2.5
¿Por qué hacer un flujo de datos alimentado por RabbitMQ?
Dataflows tienen concurrencia, serialización, monitoreo, compresión y cifrado configurables, todos como ciudadanos de primera clase. Este paradigma permite a los desarrolladores centrarse en las cosas importantes: ¡hacer el trabajo!
Aquí hay algunas características listas con RabbitMQ.Dataflows .
Flujos de trabajo
- Las tuberías (V1) son la función de flujo de trabajo de peso ligero como ejecutor de paso.
- Todos los pasos procesan en el orden proporcionado, lo que le permite controlar el orden de ejecución.
- Paralelismo configurable y concurrencia incorporadas.
- No hay opentelemetría automática.
- Sin manejo automático de la excepción/error de los errores de asíncrono (excepciones lanzadas matan tuberías).
- Los flujos de datos (V2) son la clase de flujo de trabajo más compleja, pero completa.
- Todos los pasos procesan en el orden proporcionado, lo que le permite controlar el orden de ejecución.
- Paralelismo configurable y concurrencia incorporadas.
- ¡Procesamiento de asíncrono, procesamiento por lotes, clonación del consumidor y más!
- Manejo de errores de asíncrono (simplifique el manejo de errores funcionales al permitir que las funciones lanzaran).
- Autopublish (a la siguiente cola) funcionalidad incorporada.
- OPENTELEMETRY con rastreo distribuido nativo para la publicación/consumidor.
Empotrados
- Un conejo
IConnectionPool e IChannelPool (durabilidad de la conexión). - Admite
ILogger<T> a través de loghelpers static Singleton. -
IWorkState contratado simplifica los retornos genéricos funcionales y la integración. - Tiene soporte
ISerializationProvider para System.Text.Json y MessagePack .- Fácil de escribir sus propios proveedores.
- Tiene soporte incorporado
ICompressionProvider para GZIP, Deflate, Brotli y LZ4. - Tiene el soporte incorporado
IEncryptionProvider para AESGCM y Bouncycastle AESGCM. - RecyClableMemoryStream Opciones para
ICompressionProvider e IEncryptionProvider . - Los editores se presentan automáticamente los pasos de cifrado/descifrado sin costuras (también agrega encabezados).
- Los consumidores permiten pasos de compresión/descompresión sin problemas (usa encabezados).
- Los editores/consumidores tienen soporte incorporado
OpenTelemetry .
Pruebas
- Todos los pasos incorporados tendrán pruebas de integración que deberían eliminar las preocupaciones del desarrollador del usuario final.
- El caso futuro incluirá un poco más complejo de abstracto que el tiempo lo permita.
- El desarrollador solo debe necesitar probar su código de negocio funcional.
Guías, código y ejemplos
- Comenzando con RabbitMQ.DataFlows ConnectionPool.
- Comenzando con RabbitMQ.DataFlows Channelpool.
- Comenzando con RabbitMQ.DataFlows Channelpool y BasicPublish.
- Comenzando con RabbitMQ.DataFlows Channelpool y BasicGet.
- Comenzando con RabbitMQ.DataFlows Channelpool y BasicConsume.
- Comenzando con la serialización con rabbitmq.flows .
- Comenzando con RabbitMQ.DataFlows Publisher.
- Comenzando con RabbitMQ.DataFlows AutoPublisher.
- Comenzando con el consumidor RabbitMQ.Flows .
- Comenzando con RabbitMQ.DataFlows ConsumerDataFlow .
¡Más por venir y las ayudas visuales se pueden encontrar hacia el fondo!
También puede encontrar varios ejemplos de la biblioteca dentro de las tests/UnitTests o el proyecto tests/RabbitMQ.Console.Test .
Biblioteca principal de Rabbitmq
Houseofcat.rabbitmq
Una biblioteca que se centra en la conexión de RabbitMQ y la gestión de canales para crear fallas tolerantes y consumidores.
Anteriormente llamado Cookedrabbit.core/Tesseract.
Biblioteca de flujo de datos
Houseofcat.dataflows
Una biblioteca que proporciona los flujos de datos mágicos base para RabbitMQ.DataFlows.
- Bloque TPL personalizado: ChannelBock utilizado como
BufferBlock<TIn> - Tiene DataFlowenGine y ChannelblockEngine.
- Tiene tuberías (alternativa de flujo de datos).
Bibliotecas de productividad central
Estas bibliotecas están aquí para ayudarlo a construir poderosos flujos de datos para sus mensajes.
HouseOfcat.serialización
Una biblioteca que tiene una colección de .NET ISerializationProvider o la interfaz para hacer la suya.
- Admite MessagePack y System.text.json y Newtonsoft.json.
Houseofcat.compression
Una biblioteca que tiene una colección de .NET ICompressionProvider o la interfaz para hacer la suya.
- Admite LZ4, GZIP, Brotli y Deflate.
- Admite variantes recyclableMemoryStream.
Houseofcat.hashing
Una biblioteca que se centra en implementar el hash.
HouseOfcat.Enfryption
Una biblioteca que proporciona contratos de cifrado y la base AesGCM / AesCBC .NET IEncryptionProvider , así como la interfaz para hacer la suya.
- Admite AESCBC a través de Cryptostream (bueno para archivos encriptados/memoria).
- Admite .NET AESGCM 128, 192, 256 (no transmitir).
- Admite Bouncycastle AESGCM 128/192/256.
- Admite variantes recyclableMemoryStream.
Houseofcat.utilidades
Una biblioteca que se centra en funciones reutilizables de propósito general y extensiones que simplifican la experiencia de codificación.
Integraciones de biblioteca no críticas
Houseofcat.data
Una biblioteca que proporciona las clases de ayuda para la manipulación y transformación de datos.
También proporciona abstracciones de bases de datos, una integración de dapper simple y la generación de consultas SQL SQLKata integración.
Soporte de fábrica de conexión de base de datos
- System.data.sqlclient
- Microsoft.data.sqlclient
- Mysql.data.mysqlclient
- Npgsq
- Mysql.data
- Oráculo
- Sqlite
Ayudas visuales
He incluido un archivo excalidraw de alto nivel con capturas de pantalla a continuación. Asegúrese de abrir el archivo para obtener una mejor calidad y una información más actualizada, ya que continuaré mejorándolo con el tiempo. El objetivo no es tener todo aquí, pero yo mismo entiendo el flujo de una biblioteca con la adición de una ayuda visual. No hay nada realmente especial en esta biblioteca, son solo lo básico, pero hay muchas partes móviles cuando retrocedes.
Rabbitservice - Iniciar ciclo de vida

Consumidor: comenzar el ciclo de vida

ConsumerDataFlow - Flujo de datos

Houseofcat.io