FlowDance.Client.CLI 1.0.12-alpha

This is a prerelease version of FlowDance.Client.CLI.
dotnet tool install --global FlowDance.Client.CLI --version 1.0.12-alpha
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local FlowDance.Client.CLI --version 1.0.12-alpha
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=FlowDance.Client.CLI&version=1.0.12-alpha&prerelease
                    
nuke :add-package FlowDance.Client.CLI --version 1.0.12-alpha
                    

FlowDance

FlowDance aims to address several critical aspects in the context of microservices architecture. Let's delve into each of these goals:

Support Inter-service Communication Between Microservices (Database-per-Service Pattern): In a microservices architecture, each service often manages its own database. The Database-per-Service Pattern encourages this separation. By adopting this pattern, services can communicate with each other through well-defined APIs, avoiding direct database access. This approach enhances modularity, scalability, and isolation, allowing services to evolve independently.

Replacing Distributed Transactions Calls supported by MSDTC: MSDTC (Microsoft Distributed Transaction Coordinator) is commonly used for distributed transactions across multiple databases. However, MSDTC introduces complexity, performance overhead, and potential deadlocks. FlowDance proposes a shift towards synchronous RPC (Remote Procedure Call) or asynchronous Command (Messaging) communication. Services share a Correlation ID / Trace ID to track related requests across the system. Instead of distributed transactions, services coordinate their actions using synchronous calls, simplifying the architecture. While strong consistency is essential in some business cases, FlowDance aims to minimize the need for distributed transactions.

Moving Away from Strong Consistency to Eventual Consistency Using the Compensating Transaction (or Compensating Action) Pattern: In distributed systems, achieving strong consistency (ACID properties) across all services can be challenging. FlowDance embraces eventual consistency, where operations may temporarily yield inconsistent results. The Compensating Transaction Pattern comes into play when a step in a process fails. If a step cannot be fully rolled back (e.g., due to concurrent changes), compensating transactions undo the effects of previous steps. This pattern ensures that the system eventually converges to a consistent state, even after partial failures.

Documentation and Examples

For more info please see FlowDance.Documentation

Here are some sample apps FlowDance.Examples

You need

Docker Desktop

Inspiration

Get started

Install Docker Desktop and start it up.

Download the files https://github.com/olahallvall/FlowDance/blob/master/Setup/docker-compose.yml and https://github.com/olahallvall/FlowDance/blob/master/Setup/db-script.sql to a local folder.

Open a command prompt (not Powershell or Linux) in that folder and run the commands:

docker-compose up -d

Wait until both RabbitMQ and SQL Server has started.

Run the commands:

docker exec rabbitmq rabbitmq-plugins enable rabbitmq_stream

docker exec rabbitmq rabbitmqadmin declare queue --vhost=/ name=FlowDance.SpanCommands durable=true

docker exec rabbitmq rabbitmqadmin declare queue --vhost=/ name=FlowDance.SpanEvents durable=true

docker exec -i mssql /opt/mssql-tools/bin/sqlcmd -S . -U SA -P "Admin@123" < db-script.sql

Restart the container flowdance in Docker Desktop.

Here are some sample apps FlowDance.Examples

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
1.0.12-alpha 108 3/28/2025
1.0.11-alpha 75 6/19/2024