Rabbitmq et flux de données
Une bibliothèque RabbitMQ d'outils .NET pour aider à développer rapidement des services bien performants ou pour aider à gérer une connectivité durable avec le RabbitMQ.Client !
Statut
Mis à jour: 05/03/2024
Serveur de test: Windows 11 Pro (v10.0.22631 [Build 22631])
Serveur Rabbitmq: v3.13.2
Erlang: v26.2.5
Pourquoi faire un flux de données alimenté par RabbitMQ?
Dataflows ont une concurrence configurable, une sérialisation, une surveillance, une compression et un chiffrement en tant que citoyens de première classe. Ce paradigme permet aux développeurs de se concentrer uniquement sur les choses importantes - faire du travail!
Voici quelques fonctionnalités prêtes avec RabbitMQ.Dataflows .
Flux de travail
- Les pipelines (V1) sont des exécuteurs de fonctions de workflow légers en tant qu'étape.
- Toutes les étapes traitent dans l'ordre fourni vous permettant de contrôler toujours l'ordre d'exécution.
- Parallélisme configurable et concurrence intégrée.
- Pas d'opentelémétrie automatique.
- Aucune exception automatique capture / gestion des erreurs asynchrones (exceptions lancées des pipelines de tue).
- Les flux de données (v2) sont la classe de workflow plus complexe, mais complète.
- Toutes les étapes traitent dans l'ordre fourni vous permettant de contrôler toujours l'ordre d'exécution.
- Parallélisme configurable et concurrence intégrée.
- Traitement asynchrone, traitement par lots, clonage des consommateurs et plus encore!
- Gestion des erreurs asynchrones (simplifier la gestion des erreurs fonctionnelles en permettant aux fonctions de lancer).
- Fonctionnalité automatique (à la file d'attente suivante) intégrée.
- Opentelémétrie avec traçage distribué natif pour la publication / le consommateur.
Construit
- Un Rabbitmq
IConnectionPool et IChannelPool (durabilité de connexion). - Prend en charge
ILogger<T> via le Singleton statique de Loghelpers. -
IWorkState contracté simplifie les rendements et l'intégration génériques fonctionnels. - A
ISerializationProvider Prise en charge de System.Text.Json et MessagePack .- Facile d'écrire vos propres fournisseurs.
- A
ICompressionProvider intégré le support intégré pour GZIP, Deflate, Brotli et LZ4. - A
IEncryptionProvider intégré support pour AESGCM et Bouncycastle Aesgcm. - RecyclableMemoryStream Options pour
ICompressionProvider et IEncryptionProvider . - Les éditeurs étapes de cryptage / décryptage transparent automatiquement (ajoutent également des en-têtes).
- Les consommateurs autorisent les étapes de compression / décompression transparentes (utilise des en-têtes).
- L'éditeur / les consommateurs ont une prise en charge intégrée
OpenTelemetry .
Essai
- Toutes les étapes intégrées auront des tests d'intégration qui devraient supprimer les préoccupations du développeur de l'utilisateur final.
- Future Case comprendra un unittesting abstrait beaucoup plus complexe que le temps le permet.
- Le développeur ne doit avoir besoin que de tester unité de son code commercial fonctionnel.
Guides, code et exemples
- Début avec Rabbitmq.Dataflows ConnectionPool.
- Début avec Rabbitmq.Dataflows ChannelPool.
- Début avec Rabbitmq.Dataflows ChannelPool et BasicPublish.
- Début avec Rabbitmq.Dataflows ChannelPool et BasicGet.
- Début avec Rabbitmq.Dataflows ChannelPool et BasicConsume.
- Débutant avec la sérialisation Rabbitmq.Dataflows .
- Début avec Rabbitmq.Dataflows Publisher.
- Début avec Rabbitmq.Dataflows Autopublisher.
- Début avec le consommateur Rabbitmq.Dataflows .
- Début avec Rabbitmq.Dataflows ConsumerDataflow .
Plus à venir et les aides visuelles peuvent être trouvées vers le bas!
Vous pouvez également trouver divers exemples de bibliothèque à l'intérieur des tests/UnitTests ou du projet tests/RabbitMQ.Console.Test .
Bibliothèque Rabbitmq principale
Houseofcat.rabbitmq
Une bibliothèque qui se concentre sur la connexion RabbitMQ et la gestion des canaux pour créer des éditeurs et des consommateurs tolérants aux pannes.
Anciennement appelé Cookedrabbit.core / Tesseract.
Bibliothèque de flux de données
Houseofcat.dataflows
Une bibliothèque qui fournit les flux de données magiques de base pour Rabbitmq.Dataflows.
- Bloc TPL personnalisé - ChannelBock utilisé comme
BufferBlock<TIn> - A DataFlowEngine et ChannelBlockEngine.
- A des pipelines (alternative de flux de données).
Bibliothèques de productivité de base
Ces bibliothèques sont là pour vous aider à créer de puissants flux de données pour vos messages.
Houseofcat.serialisation
Une bibliothèque qui possède une collection de .NET ISerializationProvider ou l'interface pour créer le vôtre.
- Prend en charge MessagePack et System.Text.json et Newtonsoft.json.
Houseofcat.compression
Une bibliothèque qui possède une collection de .NET ICompressionProvider ou l'interface pour créer le vôtre.
- Soutient LZ4, GZIP, Brotli et Deflate.
- Prend en charge les variantes recyclableMemoryStream.
Houseofcat.hashing
Une bibliothèque qui se concentre sur la mise en œuvre du hachage.
Houseofcat.
Une bibliothèque qui fournit des contrats de chiffrement et la base AesGCM / AesCBC .net IEncryptionProvider ainsi que l'interface pour créer le vôtre.
- Prend en charge AESCBC via CryptoStream (bon pour le fichier crypté / MemoryStreams).
- Prend en charge .NET AESGCM 128, 192, 256 (non-flux).
- Prend en charge Bouncycastle Aesgcm 128/192/256.
- Prend en charge les variantes recyclableMemoryStream.
Houseofcat.Utilities
Une bibliothèque qui se concentre sur les fonctions et extensions réutilisables à usage général qui simplifient l'expérience de codage.
Intégrations de bibliothèque non critique
Houseofcat.data
Une bibliothèque qui fournit les classes d'assistance fournit pour la manipulation et la transformation des données.
Fournit également des abstractions de base de données, une simple intégration élégante et une génération de requête SQLKata Integration SQL.
Prise en charge de l'usine de connexion de base de données
- System.Data.SqlClient
- Microsoft.Data.SqlClient
- Mysql.data.mysqlclient
- Npgsq
- Mysql.data
- Oracle
- Sqlite
Aides visuelles
J'ai inclus un fichier Excalidraw de haut niveau avec des captures d'écran ci-dessous. Assurez-vous d'ouvrir le fichier pour une meilleure qualité et plus d'informations à jour, car je continuerai à l'améliorer au fil du temps. L'objectif n'est pas de tout avoir ici, mais je comprends moi-même le flux d'une bibliothèque avec l'ajout d'une aide visuelle. Il n'y a rien de vraiment spécial dans cette bibliothèque, ce ne sont que les bases, mais il y a beaucoup de pièces mobiles lorsque vous reculez.
RabbitsService - Démarrer le cycle de vie

Consumer - Démarrer le cycle de vie

ConsumerDataflow - Flux de données

Houseofcat.io