This repo contains Dapr applications to demonstrate Dapr resiliency policies and durable execution with Dapr workflow.
Running the CodeTours in this repo is recommended since this gives more context about:
- failure and distributed computing challenges
- the way Dapr provides resiliency
- what durable execution is
- how the Dapr Workflow implements durable execution
- Prequisites
- Running the Dapr Resiliency CodeTour
- ResiliencyDemo
- Dapr Reliability Advisor in Conductor Free
- Running the Durable Execution & Workflow CodeTour
- WorkflowDemo
- Resources
Ensure you have these installed on your machine:
- .NET 8
- Dapr CLI
- Docker Desktop
- VSCode - Although other IDEs can be used to view the code, some VSCode specific extensions are used (such as CodeTour) to help guide you through the codebase.
Clone the dapr-resiliency-and-durable-execution repo to your local machine.
Open the cloned repo in VSCode and accept the suggested VSCode extensions.
Using the CodeTour panel in the VSCode explorer, start the 3 - Dapr Resiliency CodeTour:
The ResiliencyDemo consists of two applications, AppA and AppB, and a state store.
Communication between AppA and AppB can be done using HTTP or Pub/Sub.
Service invocation
graph LR
A{{AppA}}
B{{AppB}}
State[(KV Store)]
A --HTTP--> B
B --> State
Pub/sub
graph LR
A{{AppA}}
B{{AppB}}
MB[Message Broker]
State[(KV Store)]
A .-> MB .-> B
B --> State
-
Navigate to the ResiliencyDemo folder in the terminal:
cd ResiliencyDemo
-
Run the ResiliencyDemo apps using the Dapr CLI:
dapr run -f .
-
Open the local.http file in the VSCode editor and execute the HTTP requests to the ResiliencyDemo apps.
Diagrid Conductor Free is a free tool developers can use to visualize, troubleshoot, and optimize Dapr workloads on Kubernetes. It includes an Advisor that provides recommendations on how to improve the reliability of your Dapr applications.
Using the CodeTour panel in the VSCode explorer, start the 4 - Durable Execution & Workflow CodeTour:
graph LR
KV[(Inventory)]
WApp{{WorkflowApp}}
SApp{{ShippingApp}}
WApp --> SApp
WApp --> KV
sequenceDiagram
actor U as User
participant DC as DaprClient
participant W as ValidateOrderWorkflow
participant UI as UpdateInventory
participant GSC as GetShippingCost
participant RS as RegisterShipment
participant UU as UndoUpdateInventory
participant KV as KV Store
U ->> DC: ScheduleNewWorkflowAsync
DC ->> W: Schedules instance
DC -->> U: Accepted
W ->> UI: CallActivity
UI ->> KV: GetState
KV -->> UI: Response
UI ->> KV: SaveState
UI -->> W: Response
alt IsSuffientStock
loop All Shipper Services
W ->> GSC: CallActivity
GSC -->> W: Response
end
W ->> W: GetCheapestShipper
W ->> RS: CallActivity
RS -->> W: Response
alt Exception from RegisterShipment
W ->> UU: CallActivity
UU ->> KV: GetState
UU ->> KV: UpdateState
UU ->> W: Response
end
end
-
Navigate to the WorkflowDemo folder in the terminal:
cd WorkflowDemo
-
Run the WorkflowDemo apps using the Dapr CLI:
dapr run -f .
-
Open the local.http file in the VSCode editor and execute the HTTP requests to the WorkflowDemo apps.