graph LR
subgraph orders
A[User] -->|POST orders| B(Orders API)
B --> |Enqueues| C((Order Topic))
end
subgraph actors
U[User] -->|POST orders| D(Orders API)
C -->|Dequeues| D(Processor API)
D -->|Invokes| E[Store Actor]
E -->|Invokes| F[City Actor]
F -->|Invokes| G[State Actor]
G -->|Invokes| H[Country Actor]
H -->|Invokes| I[Global Actor]
E -->|Externalizes| J[(State Store)]
F -->|Externalizes| J[(State Store)]
G -->|Externalizes| J[(State Store)]
H -->|Externalizes| J[(State Store)]
I -->|Externalizes| J[(State Store)]
end
subgraph entities
K[User] -->|GET Entities| L(Entities API)
L --> |Queries| J[(State Store)]
end
For local self-hosted:
dapr init
For kubernetes support:
dapr init --kubernetes --wait
mkdir store-manager
cd store-manager
dotnet new classlib -o shared
dotnet new webapi -o actors-api
dotnet new webapi -o entities-api
dotnet new webapi -o orders-api
dotnet new console -o pumper
dotnet add package Dapr.AspNetCore
dotnet add package Dapr.Actors
dotnet add package Dapr.Actors.AspNetCore
dotnet add actors-api/actors-api.csproj reference shared/shared.csproj
dotnet add package Radzen.Blazor
Microservice | Application Port | Dapr sidecar HTTP port | Dapr sidecar gRPC port |
---|---|---|---|
actors-api | 6000 | 3600 | 60000 |
orders-api | 6001 | 3601 | 60001 |
entities-api | 6002 | 3602 | 60002 |
Runs on port 8080:
dapr dashboard
npm install -g redis-cli
rdcli -h localhost -a "" -p 6379
KEYS *
HGETALL DaprCounter||counter
del DaprCounter||counter
Alternatively, you can access Docker CLI:
docker exec -it dapr_redis redis-cli
- Clean Redis:
FLUSHALL
- Make sure:
KEYS *
If funning in k8s, do docker ps
to discover the container name of the REDIS running in K8s. and then do the above docker command:
docker exec -it k8s_redis_redis-75db659ddc-q6jfn_dapr-storemanager_b116ad62-7b4e-4a75-968f-39f84ce8a16c_0 redis-cli
Docker files have to be at the roor because they need to include the shared library.
docker image build -t store-manager/entities:1.0 . -f Dockerfile-entities
docker container run -it -p 6002:6002 store-manager/entities:1.0
docker inspect <container-id>
Make sure the ASP.Net core project run using 0.0.0.0
as opposed to localhost
. Otherwise the error is socket hang
whikle running in Docker.
You can also get into the Docker container:
docker run -it store-manager/entities:1.0 /bin/bash
To push to Docker hub:
docker login
docker push khaledhikmat/image-name:tag
bash ./start.sh
kubectl get pods -n dapr-storemanager
basg ./stop.sh
- Improve Mermaid diagram
How about local K8s?- How about Azure Container Apps?
- Use Azure Bicep to deploy using Github actions