Skip to content

et1975/MassTransit.fs

Better MassTransit support for F#

DSL for sagas (tenantive)

type States = AwaitingUpgradeCommandStarted | AwaitingUpgradeCommandResult
type UpgradeStateMachine() =
    inherit ModifierStateMachine<UpgradeStateMachineState>(
        stateMachine<UpgradeStateMachineState,States> {
            event (correlated<UpgradeExpired> {
                byId (fun m -> m.Message.OrderId)
            })
            event (correlated<UpgradeCommandStarted> {
                by (fun saga ctx -> ctx.Message.Id = saga.CorrelationId)
                onMissing MissingInstance.Discard
            })

            initially [
                on<Upgrade> (eventActivity {
                    bind Activity.OfType<CopyInitialData> 
                    ifElse instanceResultIsFailure
                           (eventActivity { transition State.Final })
                           (eventActivity { bind Activity.OfInstanceType<PublishUpgradeExpired>
                                            bind Activity.OfType<PublishUpgradeOrderCreated>
                                            transition (State.Of AwaitingUpgradeCommandStarted) })
                })
            ]
            during (State.Of AwaitingUpgradeCommandStarted) [
                on<UpgradeCommandFinished> (eventActivity {
                    handle handleUpgradeCommandFinishedEvent
                    transition State.Final
                })
            ]
            whenEnter State.Final [
                activity {
                    handle handleUpgradeCommandFinishedEvent
                    transition State.Final
                }
            ]
        })

Building

Pre-requisites:

  • .NET SDK 6.0

dotnet fsi build.fsx

About

No description, website, or topics provided.

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages