Tesseract
Date: 05/01/2022
TESSERACT
A library of NetCore
tools to help rapidly develop well performant micro/macroservices.
Prototypes you could send to production!
Why Make A Tesseract Powered Dataflow
Dataflows
have concurrency, serialization, monitoring, compression, and encryption all as first class citizens. This paradigm allows developers to just focus on the important stuff - getting work done. Dataflows pay attention to the extra dimensions so you don't have to!
Here are some features ready with RabbitMQ today, tomorrow - the world!
Queueing
- Async Processing
- Retriability
- Chaos Engineering
- Connection/Channel Durability provided by
HouseofCat.RabbitMQ
formerlyCookedRabbit.Core
.
Built-Ins
- Supports
ILogger<T>
- Concurrency/Parallelism - baked in from the ground up.
- Contracted
WorkState
/WorkObject simplifies development and integration. - Has
Json
(3 flavors) andMessagePack
serialization providers. - Allow transparent encryption/decryption steps.
- Allow compression/decompression steps to reduce trip time over the wire.
- Async Error Handling with Predicate triggers and an actionable callback.
Interchangeability
- Allows you to replace serialization provider with
HouseofCat
Provider wrappers. - Allows you to replace encryption provider with
HouseofCat
Provider wrappers. - Allows you to replace compression provider with
HouseofCat
Provider wrappers. - Constructed to fully support Inversion of Control.
Business Logic
- All steps process in the order provided allowing you to still control order of execution.
- All automatically subscribed to Async Error handling by
WorkState.IsFaulted
flag.
Testing
- All built-in steps will have integration tests that should remove concerns from end-user developer.
- Future case will include much more complex abstract UnitTesting as time allows.
- The developer should only need to unit test their functional business code.
Implicit Benefits
The benefits of a dataflow pattern extend beyond fancy machine learning and Tensorflows or high throughput GCP Dataflow for mass computation. When brought to the service level, it helps organize your code into more manageable blocks. You can still write monolithic functions, but you would be hamstringing yourself and scarificing concurrency and parallelism. By designing code into small functional steps, you always write better, cleaner, code reduced with cyclomatic complexity. That very same code is easier to UnitTest. The orchestration of the function calls are the order they are added allowing you extend the original functionality infinitely. You don't have to write deserialization or post-processing encryption/compression as they all baked in. Designing from the ground up with concurrency and parallelism, you stay nimble and fast - able to scale up internally, before horizontally and vertically, saving costs. All without needing code changed or refactored.
Lastly, after everything is said and done, all your business code is re-usable. Should you decide to abandon this workflow (:worried:) for a different mechanism, engine, or what not, all of your code will happily port to whatever other project / flow you are working with and so will all your testing making it a win win.
Help
You will find library usage examples in the examples
folder. You also can find generic NetCore how-tos and tutorials located in there. The code quality of the entire library will improve over time. Codacy allows me to review code and openly share any pain points so submit a PR to help keep this an A rated library!
Check out each project for additional README.md
. They will provide additional instructions/examples.
Status
HouseofCat.Algorithms
A library that has a collection of algorithms as I have time to learn and play with them.
HouseofCat.Compression
A library that has a collection of builtin NetCore compression providers.
HouseofCat.Compression.LZ4
A library that focuses on implementing the LZ4 compression provider.
HouseofCat.Compression.Recyclable
A library that has a collection of builtin NetCore compression providers that uses object pools and RecyclableMemoryStreams.
HouseofCat.Dapper
A library that provides helper methods for integrating Dapper.
HouseofCat.Data
A library that provides the provides helper classes for data manipulation and transformation.
HouseofCat.Data.Database
A library that provides the provides a Database Connection Factory and Sql Generation.
Database Connection Factory Support
- System.Data.SqlClient
- Microsoft.Data.SqlClient
- MySql.Data.MySqlClient
- Npgsq
- MySql.Data
- Oracle
- SQLite
Sql Query Generation
- SqlServer
- MySql
- PostgreSql
- Firebird
- Oracle
- SQLite
HouseofCat.Data.Parquet
A library that helps extract databases to parquet file (IDataReader → Snappy compressed Parquet files.)
HouseofCat.Data.Recyclable
A library that provides the provides helper classes for data manipulation and transformation that uses object pooling and RecyclableMemoryStreams.
HouseofCat.Dataflows
A library that provides the base magic Dataflows for Tesseract.
HouseofCat.Dataflows.Pipelines
A library that provides the base magic Pipelines for Tesseract.
HouseofCat.Encryption.BouncyCastle
A library that provides encryption from the BouncyCastle provider.
HouseofCat.Encryption.Recyclable
A library that provides encryption from base AesGcm class in NetCore but with ArrayPools and RecyclableMemoryStreams.
HouseofCat.Encryption.Providers
A library that provides encryption contracts and a base AesGCM/AesCBC NetCore encryption providers.
HouseofCat.Extensions
A library that focuses on extending functionality to other objects.
HouseofCat.Framing
A library that focuses on simplifying reading groups of byte[] (designated as frames).
HouseofCat.Gremlins
A library that focuses on Chaos Engineering. Currently targets Windows OS.
HouseofCat.Gremlins.SqlServer
A library that focuses on Chaos Engineering with SqlServer. Currently targets System.Data.SqlClient.
HouseofCat.Hashing
A library that focuses on implementing hashing.
HouseofCat.Hashing.Argon
A library that focuses on implementing Argon hashing.
HouseofCat.Logger
A library that focuses on getting Microsoft.Extensions.LoggerFactory implemented adhoc globally.
HouseofCat.Network
A library that focuses on making it easier to deal with systems networking.
HouseofCat.RabbitMQ
A library that focuses on RabbitMQ connection and channel management to create fault tolerant Publishers and Consumers.
Formerly found at RabbitMQ.Core
Deprecated - Using Official Pivotal/VMWare client again.
HouseofCat.RabbitMQ.Client
A library that focuses on cloning the official Pivotal/VMWare RabbitMQ DotNetClient but ported to pure NetCore 3.1/5.x with small code enhancements.
Formerly found at RabbitMQ.Core
HouseofCat.RabbitMQ.Dataflows
A library that extends HouseofCat.RabbitMQ functionality by providing epic TPL Dataflow usage for Tesseract.
HouseofCat.RabbitMQ.Mailkit
A library that extends HouseofCat.RabbitMQ.Services to simplify using Mailkit (Email) with the HouseofCat.RabbitMQ library.
HouseofCat.RabbitMQ.Pipelines
A library that extends HouseofCat.RabbitMQ functionality by providing simplified TPL Dataflow usage called Pipelines.
HouseofCat.RabbitMQ.Services
A library that extends HouseofCat.RabbitMQ to simplify using the HouseofCat.RabbitMQ library.
HouseofCat.RabbitMQ.Twilio
A library that extends HouseofCat.RabbitMQ.Services to simplify using Twilio (SMS/TextMessages) with the HouseofCat.RabbitMQ library.
HouseofCat.RabbitMQ.WorkState
A library that creates the shared WorkState classes for HouseofCat.RabbitMQ.
HouseofCat.Recyclable
A library that focuses on Recyclable classes and pooling.
HouseofCat.Reflection
A library that focuses on Reflection hackery.
HouseofCat.Serialization
A library that focuses on making it easier to deal with Serialization.
HouseofCat.Serialization.Json.Newtonsoft
A library that focuses on making it easier to deal with Newtonsoft Json Serialization.
HouseofCat.Serialization.Json.Utf8Json
A library that focuses on making it easier to deal with Utf8Json Json Serialization.
HouseofCat.Serialization.MessagePack
A library that focuses on making it easier to deal with MessagePack Serialization.
HouseofCat.Serilog
A library that focuses on extending IHost functionality to quickly setup Serilog.
HouseofCat.Sockets
A library that focuses on making it easier to deal with socket communication.
HouseofCat.Sockets.Utf8Json
A library that focuses on making it easier to deal with sockets communication with Utf8Json.
HouseofCat.Utilities
A library that focuses on general purpose utilities and functions that simplify the coding experience.
HouseofCat.Windows.Keyboard
A library that focuses on interacting, filtering, and/or replaying user inputs on Windows, specifically Keyboard.
HouseofCat.Windows.NativeMethods
A library that focuses on consolidating Windows NativeMethods calls used by my libaries.
HouseofCat.Windows.Threading
A library that focuses on simplifying affinity and thread management.
HouseofCat.Windows.WMI
A library that focuses on performing System.Management (Windows.Compatibility.Pack) WMI Queries.