* Feat Add TLS & mTLS support for gRPC with root CA and insecure mode (#1361) * feat: Support for GRPC ssl Signed-off-by: Javier Aliaga <javier@diagrid.io> * add tests Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * fix CI Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * add back else if Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * channel cleanup Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * add root ca support Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * checkstyles Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * add insecure Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * fix checkstyles Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * use InsecureTrustManagerFactory Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * fix test Signed-off-by: Cassandra Coyle <cassie@diagrid.io> --------- Signed-off-by: Javier Aliaga <javier@diagrid.io> Signed-off-by: Cassandra Coyle <cassie@diagrid.io> Co-authored-by: Javier Aliaga <javier@diagrid.io> Signed-off-by: salaboy <Salaboy@gmail.com> * spring boot workflow patterns initial version Signed-off-by: salaboy <Salaboy@gmail.com> * adding README for workflows Signed-off-by: salaboy <Salaboy@gmail.com> * adding child example Signed-off-by: salaboy <Salaboy@gmail.com> * updating examples to work with markdown tests Signed-off-by: salaboy <Salaboy@gmail.com> * running mechanical markdown for workflow examples Signed-off-by: salaboy <Salaboy@gmail.com> * Fix the issue with retries not happening correctly for Activities and Workflows (#1343) * Add coverage for some properties (#1297) Signed-off-by: sirivarma <siri.varma@outlook.com> * Make the DAPR version being used consistent across all tests (#1299) Signed-off-by: sirivarma <siri.varma@outlook.com> * Separate Dapr constants from IT container constants (#1315) Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> Co-authored-by: Artur Ciocanu <ciocanu@adobe.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Use Java Bean for connection details and add more tests (#1317) * Use Java Bean for connection details and add more tests Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Simplify mock setup Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Adding even more tests for test coverage Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> --------- Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> Co-authored-by: Artur Ciocanu <ciocanu@adobe.com> Co-authored-by: Cassie Coyle <cassie@diagrid.io> Signed-off-by: sirivarma <siri.varma@outlook.com> * Update CONTRIBUTING.md Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Bump codecov/codecov-action from 5.4.0 to 5.4.2 (#1318) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.4.0 to 5.4.2. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v5.4.0...v5.4.2) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 5.4.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cassie Coyle <cassie@diagrid.io> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix URL building logic (#1320) * Fix URL building logic Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Add test for query params Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Fix the assertion in the test Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Adjust the tests Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Remove uneeded changes from IT test Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Revert some unintended changes Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Simplify the testing a little bit Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Adjust the test to use ServerRequest Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Test removing things from method invoke controller Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Add query param encoding test Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Revert some unintended changes Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> * Some tiny styles Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> --------- Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> Co-authored-by: Artur Ciocanu <ciocanu@adobe.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Generate updated javadocs for 1.14.1 Signed-off-by: Dapr Bot <daprweb@microsoft.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Add Conversation AI to Java SDK (#1235) * Conversation first commit Signed-off-by: Siri Varma Vegiraju <svegiraju@microsoft.com> Signed-off-by: sirivarma <siri.varma@outlook.com> Signed-off-by: siri-varma <siri.varma@outlook.com> * Add unit tests Signed-off-by: sirivarma <siri.varma@outlook.com> Signed-off-by: siri-varma <siri.varma@outlook.com> * change ai to conv Signed-off-by: sirivarma <siri.varma@outlook.com> Signed-off-by: siri-varma <siri.varma@outlook.com> * Move to single module Signed-off-by: sirivarma <siri.varma@outlook.com> Signed-off-by: siri-varma <siri.varma@outlook.com> * Remove module Signed-off-by: sirivarma <siri.varma@outlook.com> Signed-off-by: siri-varma <siri.varma@outlook.com> * Add Integration tests Signed-off-by: siri-varma <siri.varma@outlook.com> * Update sdk-tests/src/test/java/io/dapr/it/testcontainers/DaprConversationIT.java Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> Signed-off-by: siri-varma <siri.varma@outlook.com> * Fix things Signed-off-by: siri-varma <siri.varma@outlook.com> * Address comments Signed-off-by: siri-varma <siri.varma@outlook.com> * Import tag Signed-off-by: siri-varma <siri.varma@outlook.com> * Address comments Signed-off-by: siri-varma <siri.varma@outlook.com> * Make common config Signed-off-by: siri-varma <siri.varma@outlook.com> * Address comments Signed-off-by: siri-varma <siri.varma@outlook.com> * fix constant Signed-off-by: siri-varma <siri.varma@outlook.com> * fix constant Signed-off-by: siri-varma <siri.varma@outlook.com> * fix constant Signed-off-by: siri-varma <siri.varma@outlook.com> * fix s Signed-off-by: siri-varma <siri.varma@outlook.com> * Fix things Signed-off-by: siri-varma <siri.varma@outlook.com> * Fix things Signed-off-by: siri-varma <siri.varma@outlook.com> * Fix things Signed-off-by: siri-varma <siri.varma@outlook.com> * Make common config Signed-off-by: siri-varma <siri.varma@outlook.com> * Update README.md Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> * Update README.md Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> --------- Signed-off-by: Siri Varma Vegiraju <svegiraju@microsoft.com> Signed-off-by: sirivarma <siri.varma@outlook.com> Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Co-authored-by: Cassie Coyle <cassie@diagrid.io> Signed-off-by: sirivarma <siri.varma@outlook.com> * Add docs for usage of Jobs SDK (#1323) * Add doc for jobs Signed-off-by: siri-varma <siri.varma@outlook.com> * Add docs for Jobs Signed-off-by: siri-varma <siri.varma@outlook.com> * Apply suggestions from code review Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> --------- Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> Co-authored-by: artur-ciocanu <artur.ciocanu@gmail.com> Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Use dapr/durabletask-java (#1336) * microsoft durabletask-java -> dapr durabletask-java Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * update another ref Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * 1.5.2 release Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * fix import order Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * Sdk new changes Signed-off-by: siri-varma <siri.varma@outlook.com> * Refine workflows Signed-off-by: siri-varma <siri.varma@outlook.com> * add ; Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * rm try Signed-off-by: Cassandra Coyle <cassie@diagrid.io> --------- Signed-off-by: Cassandra Coyle <cassie@diagrid.io> Signed-off-by: siri-varma <siri.varma@outlook.com> Co-authored-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Update master version to 1.16.0-SNAPSHOT Signed-off-by: Dapr Bot <daprweb@microsoft.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix NPE Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix NPE Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix NPE Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix NPE Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix NPE Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix NPE Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix things Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Renaming and exposing connection details (#1341) Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> Co-authored-by: Artur Ciocanu <ciocanu@adobe.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * [Master] Fix Vulnerabilities (#1354) * update okio Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * rm unused dep Signed-off-by: Cassandra Coyle <cassie@diagrid.io> --------- Signed-off-by: Cassandra Coyle <cassie@diagrid.io> Signed-off-by: sirivarma <siri.varma@outlook.com> * Feat Add TLS & mTLS support for gRPC with root CA and insecure mode (#1361) * feat: Support for GRPC ssl Signed-off-by: Javier Aliaga <javier@diagrid.io> * add tests Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * fix CI Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * add back else if Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * channel cleanup Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * add root ca support Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * checkstyles Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * add insecure Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * fix checkstyles Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * use InsecureTrustManagerFactory Signed-off-by: Cassandra Coyle <cassie@diagrid.io> * fix test Signed-off-by: Cassandra Coyle <cassie@diagrid.io> --------- Signed-off-by: Javier Aliaga <javier@diagrid.io> Signed-off-by: Cassandra Coyle <cassie@diagrid.io> Co-authored-by: Javier Aliaga <javier@diagrid.io> Signed-off-by: sirivarma <siri.varma@outlook.com> * Address comments Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix things Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> * Fix things Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: sirivarma <siri.varma@outlook.com> --------- Signed-off-by: sirivarma <siri.varma@outlook.com> Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Dapr Bot <daprweb@microsoft.com> Signed-off-by: Siri Varma Vegiraju <svegiraju@microsoft.com> Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: Cassandra Coyle <cassie@diagrid.io> Signed-off-by: Javier Aliaga <javier@diagrid.io> Co-authored-by: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Co-authored-by: artur-ciocanu <artur.ciocanu@gmail.com> Co-authored-by: Artur Ciocanu <ciocanu@adobe.com> Co-authored-by: Cassie Coyle <cassie@diagrid.io> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> Co-authored-by: Dapr Bot <daprweb@microsoft.com> Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Co-authored-by: Javier Aliaga <javier@diagrid.io> Signed-off-by: salaboy <Salaboy@gmail.com> * 1.5.4 (#1375) Signed-off-by: Cassandra Coyle <cassie@diagrid.io> Signed-off-by: salaboy <Salaboy@gmail.com> * fixing order Id correlation Signed-off-by: salaboy <Salaboy@gmail.com> * fixing waiting time for tests to run Signed-off-by: salaboy <Salaboy@gmail.com> * fixing app name Signed-off-by: salaboy <Salaboy@gmail.com> * adding app name and removing log lines Signed-off-by: salaboy <Salaboy@gmail.com> * Bump codecov/codecov-action from 5.4.2 to 5.4.3 (#1379) Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5.4.2 to 5.4.3. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v5.4.2...v5.4.3) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-version: 5.4.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Signed-off-by: salaboy <Salaboy@gmail.com> * Bump fossas/fossa-action from 1.6.0 to 1.7.0 (#1380) Bumps [fossas/fossa-action](https://github.com/fossas/fossa-action) from 1.6.0 to 1.7.0. - [Release notes](https://github.com/fossas/fossa-action/releases) - [Commits](https://github.com/fossas/fossa-action/compare/v1.6.0...v1.7.0) --- updated-dependencies: - dependency-name: fossas/fossa-action dependency-version: 1.7.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Signed-off-by: salaboy <Salaboy@gmail.com> * Fix component spec parsing (#1370) * Fix component spec parsing Signed-off-by: Deepak <sdeepaksharma15@gmail.com> * Fix component spec parsing Signed-off-by: Deepak <sdeepaksharma15@gmail.com> * Fix component spec metadata parsing Signed-off-by: Deepak <sdeepaksharma15@gmail.com> * fix checkstyle-error Signed-off-by: Deepak <sdeepaksharma15@gmail.com> --------- Signed-off-by: Deepak <sdeepaksharma15@gmail.com> Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Co-authored-by: artur-ciocanu <artur.ciocanu@gmail.com> Signed-off-by: salaboy <Salaboy@gmail.com> * Update spring-boot-examples/workflows/README.md Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Signed-off-by: salaboy <Salaboy@gmail.com> * fixing comments Signed-off-by: salaboy <Salaboy@gmail.com> * Update body.json Signed-off-by: artur-ciocanu <artur.ciocanu@gmail.com> Signed-off-by: salaboy <Salaboy@gmail.com> * Update FanOutInWorkflow.java Signed-off-by: artur-ciocanu <artur.ciocanu@gmail.com> Signed-off-by: salaboy <Salaboy@gmail.com> * clean up logs for multiple executions, for standalone mode Signed-off-by: salaboy <Salaboy@gmail.com> * Update application.properties Signed-off-by: artur-ciocanu <artur.ciocanu@gmail.com> --------- Signed-off-by: Javier Aliaga <javier@diagrid.io> Signed-off-by: Cassandra Coyle <cassie@diagrid.io> Signed-off-by: salaboy <Salaboy@gmail.com> Signed-off-by: sirivarma <siri.varma@outlook.com> Signed-off-by: Artur Ciocanu <ciocanu@adobe.com> Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com> Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Dapr Bot <daprweb@microsoft.com> Signed-off-by: Siri Varma Vegiraju <svegiraju@microsoft.com> Signed-off-by: siri-varma <siri.varma@outlook.com> Signed-off-by: Deepak <sdeepaksharma15@gmail.com> Signed-off-by: artur-ciocanu <artur.ciocanu@gmail.com> Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com> Co-authored-by: Javier Aliaga <javier@diagrid.io> Co-authored-by: Siri Varma Vegiraju <siri.varma@outlook.com> Co-authored-by: Matheus Cruz <56329339+mcruzdev@users.noreply.github.com> Co-authored-by: artur-ciocanu <artur.ciocanu@gmail.com> Co-authored-by: Artur Ciocanu <ciocanu@adobe.com> Co-authored-by: Cassie Coyle <cassie@diagrid.io> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> Co-authored-by: Dapr Bot <daprweb@microsoft.com> Co-authored-by: iddeepak <87892182+iddeepak@users.noreply.github.com> |
||
---|---|---|
.. | ||
src | ||
README.md | ||
body.json | ||
pom.xml |
README.md
Dapr Spring Boot Workflow Examples
This application allows you to run different workflow patterns including:
- Chained Activities
- Parent/Child Workflows
- Continue workflow by sending External Events
- Fan Out/In activities for parallel execution
Running these examples from source code
To run these examples you will need:
- Java SDK
- Maven
- Docker or a container runtime such as Podman
From the spring-boot-examples/workflows
directory you can start the service by running the following command:
../../mvnw spring-boot:test-run
By running the spring-boot:test-run
goal, the application is loaded using the test configurations
configured using Testcontainers to boostrap the Dapr sidecar and control plane.
Once the application is running you can trigger the different patterns by sending the following requests:
Chaining Activities Workflow example
The io.dapr.springboot.examples.wfp.chain.ChainWorkflow
executes three chained activities. For this example the
ToUpperCaseActivity.java
is used to transform to upper case three strings from an array.
graph LR
SW((Start
Workflow))
A1[Activity1]
A2[Activity2]
A3[Activity3]
EW((End
Workflow))
SW --> A1
A1 --> A2
A2 --> A3
A3 --> EW
To start the workflow with the three chained activities you can run:
curl -X POST localhost:8080/wfp/chain -H 'Content-Type: application/json'
As result from executing the request you should see:
TOKYO, LONDON, SEATTLE
In the application output you should see the workflow activities being executed.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.chain.ChainWorkflow
i.d.s.e.w.WorkflowPatternsRestController : Workflow instance 7625b4af-8c04-408a-93dc-bad753466e43 started
i.d.s.e.wfp.chain.ToUpperCaseActivity : Starting Activity: io.dapr.springboot.examples.wfp.chain.ToUpperCaseActivity
i.d.s.e.wfp.chain.ToUpperCaseActivity : Message Received from input: Tokyo
i.d.s.e.wfp.chain.ToUpperCaseActivity : Sending message to output: TOKYO
i.d.s.e.wfp.chain.ToUpperCaseActivity : Starting Activity: io.dapr.springboot.examples.wfp.chain.ToUpperCaseActivity
i.d.s.e.wfp.chain.ToUpperCaseActivity : Message Received from input: London
i.d.s.e.wfp.chain.ToUpperCaseActivity : Sending message to output: LONDON
i.d.s.e.wfp.chain.ToUpperCaseActivity : Starting Activity: io.dapr.springboot.examples.wfp.chain.ToUpperCaseActivity
i.d.s.e.wfp.chain.ToUpperCaseActivity : Message Received from input: Seattle
i.d.s.e.wfp.chain.ToUpperCaseActivity : Sending message to output: SEATTLE
io.dapr.workflows.WorkflowContext : Workflow finished with result: TOKYO, LONDON, SEATTLE
Parent / Child Workflows example
In this example we start a Parent workflow that calls a child workflow that execute one activity that reverses an input string.
The Parent workflow looks like this:
graph LR
SW((Start
Workflow))
subgraph for each word in the input
GWL[Call child workflow]
end
EW((End
Workflow))
SW --> GWL
GWL --> EW
The Child workflow looks like this:
graph LR
SW((Start
Workflow))
A1[Activity1]
EW((End
Workflow))
SW --> A1
A1 --> EW
To start the parent workflow you can run:
To start the workflow with the three chained activities you can run:
curl -X POST localhost:8080/wfp/child -H 'Content-Type: application/json'
As result from executing the request you should see:
!wolfkroW rpaD olleH
In the application output you should see the workflow activities being executed.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.child.ParentWorkflow
io.dapr.workflows.WorkflowContext : calling childworkflow with input: Hello Dapr Workflow!
i.d.s.e.w.WorkflowPatternsRestController : Workflow instance f3ec9566-a0fc-4d28-8912-3f3ded3cd8a9 started
io.dapr.workflows.WorkflowContext : Starting ChildWorkflow: io.dapr.springboot.examples.wfp.child.ChildWorkflow
io.dapr.workflows.WorkflowContext : ChildWorkflow received input: Hello Dapr Workflow!
io.dapr.workflows.WorkflowContext : ChildWorkflow is calling Activity: io.dapr.springboot.examples.wfp.child.ReverseActivity
i.d.s.e.wfp.child.ReverseActivity : Starting Activity: io.dapr.springboot.examples.wfp.child.ReverseActivity
i.d.s.e.wfp.child.ReverseActivity : Message Received from input: Hello Dapr Workflow!
i.d.s.e.wfp.child.ReverseActivity : Sending message to output: !wolfkroW rpaD olleH
io.dapr.workflows.WorkflowContext : ChildWorkflow finished with: !wolfkroW rpaD olleH
io.dapr.workflows.WorkflowContext : childworkflow finished with: !wolfkroW rpaD olleH
ContinueAsNew Workflows example
In this example we start a workflow that every 3 seconds schedule a new workflow consistently. This workflow executes one activity called CleanUpActivity that takes 2 seconds to complete. This loops repeat consistently for 5 times.
To start the workflow you can run:
curl -X POST localhost:8080/wfp/continueasnew -H 'Content-Type: application/json'
As result from executing the request you should see:
{"cleanUpTimes":5}
In the application output you should see the workflow activities being executed.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.continueasnew.ContinueAsNewWorkflow
io.dapr.workflows.WorkflowContext : call CleanUpActivity to do the clean up
i.d.s.e.w.WorkflowPatternsRestController : Workflow instance b808e7d6-ab47-4eba-8188-dc9ff8780764 started
i.d.s.e.w.continueasnew.CleanUpActivity : Starting Activity: io.dapr.springboot.examples.wfp.continueasnew.CleanUpActivity
i.d.s.e.w.continueasnew.CleanUpActivity : start clean up work, it may take few seconds to finish... Time:10:48:45
io.dapr.workflows.WorkflowContext : CleanUpActivity finished
io.dapr.workflows.WorkflowContext : wait 5 seconds for next clean up
io.dapr.workflows.WorkflowContext : Let's do more cleaning.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.continueasnew.ContinueAsNewWorkflow
io.dapr.workflows.WorkflowContext : call CleanUpActivity to do the clean up
i.d.s.e.w.continueasnew.CleanUpActivity : Starting Activity: io.dapr.springboot.examples.wfp.continueasnew.CleanUpActivity
i.d.s.e.w.continueasnew.CleanUpActivity : start clean up work, it may take few seconds to finish... Time:10:48:50
io.dapr.workflows.WorkflowContext : CleanUpActivity finished
io.dapr.workflows.WorkflowContext : wait 5 seconds for next clean up
io.dapr.workflows.WorkflowContext : Let's do more cleaning.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.continueasnew.ContinueAsNewWorkflow
io.dapr.workflows.WorkflowContext : call CleanUpActivity to do the clean up
i.d.s.e.w.continueasnew.CleanUpActivity : Starting Activity: io.dapr.springboot.examples.wfp.continueasnew.CleanUpActivity
i.d.s.e.w.continueasnew.CleanUpActivity : start clean up work, it may take few seconds to finish... Time:10:48:55
io.dapr.workflows.WorkflowContext : CleanUpActivity finished
io.dapr.workflows.WorkflowContext : wait 5 seconds for next clean up
io.dapr.workflows.WorkflowContext : Let's do more cleaning.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.continueasnew.ContinueAsNewWorkflow
io.dapr.workflows.WorkflowContext : call CleanUpActivity to do the clean up
i.d.s.e.w.continueasnew.CleanUpActivity : Starting Activity: io.dapr.springboot.examples.wfp.continueasnew.CleanUpActivity
i.d.s.e.w.continueasnew.CleanUpActivity : start clean up work, it may take few seconds to finish... Time:10:49:0
io.dapr.workflows.WorkflowContext : CleanUpActivity finished
io.dapr.workflows.WorkflowContext : wait 5 seconds for next clean up
io.dapr.workflows.WorkflowContext : Let's do more cleaning.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.continueasnew.ContinueAsNewWorkflow
io.dapr.workflows.WorkflowContext : call CleanUpActivity to do the clean up
i.d.s.e.w.continueasnew.CleanUpActivity : Starting Activity: io.dapr.springboot.examples.wfp.continueasnew.CleanUpActivity
i.d.s.e.w.continueasnew.CleanUpActivity : start clean up work, it may take few seconds to finish... Time:10:49:5
io.dapr.workflows.WorkflowContext : CleanUpActivity finished
io.dapr.workflows.WorkflowContext : wait 5 seconds for next clean up
io.dapr.workflows.WorkflowContext : We did enough cleaning
External Event Workflow example
In this example we start a workflow that as part of its execution waits for an external event to continue. To correlate
workflows and events we use the parameter orderId
To start the workflow you can run:
curl -X POST "localhost:8080/wfp/externalevent?orderId=123" -H 'Content-Type: application/json'
In the application output you should see the workflow activities being executed.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.externalevent.ExternalEventWorkflow
io.dapr.workflows.WorkflowContext : Waiting for approval...
i.d.s.e.w.WorkflowPatternsRestController : Workflow instance 8a55cf6d-9059-49b1-8c83-fbe17567a02e started
You should see the Workflow ID that was created, in this example you don't need to remember this id, as you can use the orderId to find the right instance. When you are ready to approve the order you can send the following request:
To send the event you can run:
curl -X POST "localhost:8080/wfp/externalevent-continue?orderId=123&decision=true" -H 'Content-Type: application/json'
{"approved":true}
In the application output you should see the workflow activities being executed.
i.d.s.e.w.WorkflowPatternsRestController : Workflow instance e86bc464-6166-434d-8c91-d99040d6f54e continue
io.dapr.workflows.WorkflowContext : approval granted - do the approved action
i.d.s.e.w.externalevent.ApproveActivity : Starting Activity: io.dapr.springboot.examples.wfp.externalevent.ApproveActivity
i.d.s.e.w.externalevent.ApproveActivity : Running approval activity...
io.dapr.workflows.WorkflowContext : approval-activity finished
Fan Out/In Workflow example
In this example we start a workflow that takes an ArrayList of strings and calls one activity per item in the ArrayList. The activities are executed and the workflow waits for all of them to complete to aggregate the results.
graph LR
SW((Start
Workflow))
subgraph for each word in the input
GWL[GetWordLength]
end
ALL[Wait until all tasks
are completed]
EW((End
Workflow))
SW --> GWL
GWL --> ALL
ALL --> EW
To start the workflow you can run:
curl -X POST localhost:8080/wfp/fanoutin -H 'Content-Type: application/json' -d @body.json
As result from executing the request you should see:
{"wordCount":60}
In the application output you should see the workflow activities being executed.
io.dapr.workflows.WorkflowContext : Starting Workflow: io.dapr.springboot.examples.wfp.fanoutin.FanOutInWorkflow
i.d.s.e.w.WorkflowPatternsRestController : Workflow instance a771a7ba-f9fb-4399-aaee-a2fb0b102e5d started
i.d.s.e.wfp.fanoutin.CountWordsActivity : Starting Activity: io.dapr.springboot.examples.wfp.fanoutin.CountWordsActivity
i.d.s.e.wfp.fanoutin.CountWordsActivity : Starting Activity: io.dapr.springboot.examples.wfp.fanoutin.CountWordsActivity
i.d.s.e.wfp.fanoutin.CountWordsActivity : Starting Activity: io.dapr.springboot.examples.wfp.fanoutin.CountWordsActivity
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity returned: 2.
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity finished
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity returned: 11.
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity returned: 17.
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity finished
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity finished
i.d.s.e.wfp.fanoutin.CountWordsActivity : Starting Activity: io.dapr.springboot.examples.wfp.fanoutin.CountWordsActivity
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity returned: 21.
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity finished
i.d.s.e.wfp.fanoutin.CountWordsActivity : Starting Activity: io.dapr.springboot.examples.wfp.fanoutin.CountWordsActivity
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity returned: 9.
i.d.s.e.wfp.fanoutin.CountWordsActivity : Activity finished
io.dapr.workflows.WorkflowContext : Workflow finished with result: 60
Testing workflow executions
Workflow execution can be tested using Testcontainers and you can find all the tests for the patterns covered in this application here.