From 976beeed4db818cdfe9d0e5fe63990371f8f5744 Mon Sep 17 00:00:00 2001 From: Stuart Leeks Date: Fri, 3 Nov 2023 13:38:12 +0000 Subject: [PATCH 01/11] Add missing arg value in multi-app-template.md Signed-off-by: Stuart Leeks --- .../local-development/multi-app-dapr-run/multi-app-template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md b/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md index 67183f7af..2d85efa11 100644 --- a/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md +++ b/daprdocs/content/en/developing-applications/local-development/multi-app-dapr-run/multi-app-template.md @@ -93,7 +93,7 @@ Stop the multi-app run template anytime with either of the following commands: ```cmd # the template file needs to be called `dapr.yaml` by default if a directory path is given -dapr stop -f +dapr stop -f ``` or: From 5c53ef2e1053eb84b4f737786adc77a6f3732210 Mon Sep 17 00:00:00 2001 From: Stuart Leeks Date: Thu, 9 Nov 2023 09:30:35 +0000 Subject: [PATCH 02/11] Update broken links https://account.kubemq.io/login/register is redirected to https://account.kubemq.io/auth/signup Signed-off-by: Stuart Leeks --- .../components-reference/supported-bindings/kubemq.md | 4 ++-- .../components-reference/supported-pubsub/setup-kubemq.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md index 5cf333ea2..daf7d1981 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md @@ -51,7 +51,7 @@ This component supports both **input and output** binding interfaces. {{< tabs "Self-Hosted" "Kubernetes">}} {{% codetab %}} -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/login/register](https://account.kubemq.io/login/register) and register for a key. +1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. 2. Wait for an email confirmation with your Key You can run a KubeMQ broker with Docker: @@ -64,7 +64,7 @@ You can then interact with the server using the client port: `localhost:50000` {{% /codetab %}} {{% codetab %}} -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/login/register](https://account.kubemq.io/login/register) and register for a key. +1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. 2. Wait for an email confirmation with your Key Then Run the following kubectl commands: diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md index 28080ac15..2bae7c629 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md @@ -45,7 +45,7 @@ spec: {{< tabs "Self-Hosted" "Kubernetes">}} {{% codetab %}} -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/login/register](https://account.kubemq.io/login/register) and register for a key. +1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. 2. Wait for an email confirmation with your Key You can run a KubeMQ broker with Docker: @@ -58,7 +58,7 @@ You can then interact with the server using the client port: `localhost:50000` {{% /codetab %}} {{% codetab %}} -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/login/register](https://account.kubemq.io/login/register) and register for a key. +1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. 2. Wait for an email confirmation with your Key Then Run the following kubectl commands: From 35ed773345073474bf1ac0d7f5d7eaeb5c02ba83 Mon Sep 17 00:00:00 2001 From: Anish Pai Date: Fri, 10 Nov 2023 22:02:19 -0500 Subject: [PATCH 03/11] In Section 3: Run the Dapr Sidecar, the --resources-path flag in the dapr run command was listed incorrectly. It now correctly ends in resources-path ../ Signed-off-by: Anish Pai --- .../en/getting-started/tutorials/get-started-component.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/tutorials/get-started-component.md b/daprdocs/content/en/getting-started/tutorials/get-started-component.md index 9f460ed0e..9fbd776b3 100644 --- a/daprdocs/content/en/getting-started/tutorials/get-started-component.md +++ b/daprdocs/content/en/getting-started/tutorials/get-started-component.md @@ -65,7 +65,7 @@ In the above file definition: Launch a Dapr sidecar that will listen on port 3500 for a blank application named `myapp`: ```bash -dapr run --app-id myapp --dapr-http-port 3500 --resources-path . +dapr run --app-id myapp --dapr-http-port 3500 --resources-path ../ ``` {{% alert title="Tip" color="primary" %}} From b0d5eb2ed53b9ca070041a10a3f142aeb4874e17 Mon Sep 17 00:00:00 2001 From: Anish Pai Date: Sat, 11 Nov 2023 11:49:25 -0500 Subject: [PATCH 04/11] Created a powershell and non powershell environment version for the dapr run command in section 3 for running the Dapr Sidecar. Signed-off-by: Anish Pai --- .../en/getting-started/tutorials/get-started-component.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/daprdocs/content/en/getting-started/tutorials/get-started-component.md b/daprdocs/content/en/getting-started/tutorials/get-started-component.md index 9fbd776b3..7c829e5d7 100644 --- a/daprdocs/content/en/getting-started/tutorials/get-started-component.md +++ b/daprdocs/content/en/getting-started/tutorials/get-started-component.md @@ -64,9 +64,15 @@ In the above file definition: Launch a Dapr sidecar that will listen on port 3500 for a blank application named `myapp`: + +PowerShell environment: ```bash dapr run --app-id myapp --dapr-http-port 3500 --resources-path ../ ``` +non-PowerShell environment: +```bash +dapr run --app-id myapp --dapr-http-port 3500 --resources-path . +``` {{% alert title="Tip" color="primary" %}} If an error message occurs, stating the `app-id` is already in use, you may need to stop any currently running Dapr sidecars. Stop the sidecar before running the next `dapr run` command by either: From 96f5841b61b2837a736b1990621b0ccd1dd94a4e Mon Sep 17 00:00:00 2001 From: kaibocai Date: Mon, 13 Nov 2023 01:32:42 +0000 Subject: [PATCH 05/11] fix worflow examples for java Signed-off-by: kaibocai --- .../workflow/workflow-patterns.md | 175 +++++++++--------- 1 file changed, 88 insertions(+), 87 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md index 9d23a6406..530dc1eda 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md @@ -109,21 +109,53 @@ catch (TaskFailedException) // Task failures are surfaced as TaskFailedException ```java -public static void main(String[] args) throws InterruptedException { - DaprWorkflowClient client = new DaprWorkflowClient(); - - try (client) { - client.raiseEvent(instanceId, "TestEvent", "TestEventPayload"); - - System.out.println(separatorStr); - System.out.println("** Registering parallel Events to be captured by allOf(t1,t2,t3) **"); - client.raiseEvent(instanceId, "event1", "TestEvent 1 Payload"); - client.raiseEvent(instanceId, "event2", "TestEvent 2 Payload"); - client.raiseEvent(instanceId, "event3", "TestEvent 3 Payload"); - System.out.printf("Events raised for workflow with instanceId: %s\n", instanceId); - - } +public class ChainWorkflow extends Workflow { + @Override + public WorkflowStub create() { + return ctx -> { + StringBuilder sb = new StringBuilder(); + String wfInput = ctx.getInput(String.class); + String result1 = ctx.callActivity("event1", wfInput, String.class).await(); + String result2 = ctx.callActivity("event2", result1, String.class).await(); + String result3 = ctx.callActivity("event3", result2, String.class).await(); + String result = sb.append(result1).append(',').append(result2).append(',').append(result3).toString(); + ctx.complete(result); + }; + } } + + class Event1 implements WorkflowActivity { + + @Override + public Object run(WorkflowActivityContext ctx) { + Logger logger = LoggerFactory.getLogger(Event1.class); + logger.info("Starting Activity: " + ctx.getName()); + // Do some work + return null; + } + } + + class Event2 implements WorkflowActivity { + + @Override + public Object run(WorkflowActivityContext ctx) { + Logger logger = LoggerFactory.getLogger(Event2.class); + logger.info("Starting Activity: " + ctx.getName()); + // Do some work + return null; + } + } + + class Event3 implements WorkflowActivity { + + @Override + public Object run(WorkflowActivityContext ctx) { + Logger logger = LoggerFactory.getLogger(Event3.class); + logger.info("Starting Activity: " + ctx.getName()); + // Do some work + return null; + } + } ``` {{% /codetab %}} @@ -225,46 +257,23 @@ await context.CallActivityAsync("PostResults", sum); ```java -public static void main(String[] args) throws InterruptedException { - DaprWorkflowClient client = new DaprWorkflowClient(); - - try (client) { - - System.out.println(separatorStr); - System.out.println("**SendExternalMessage**"); - client.raiseEvent(instanceId, "TestEvent", "TestEventPayload"); - - // Get events to process in parallel - System.out.println(separatorStr); - System.out.println("** Registering parallel Events to be captured by allOf(t1,t2,t3) **"); - client.raiseEvent(instanceId, "event1", "TestEvent 1 Payload"); - client.raiseEvent(instanceId, "event2", "TestEvent 2 Payload"); - client.raiseEvent(instanceId, "event3", "TestEvent 3 Payload"); - System.out.printf("Events raised for workflow with instanceId: %s\n", instanceId); - - // Register the raised events to be captured - System.out.println(separatorStr); - System.out.println("** Registering Event to be captured by anyOf(t1,t2,t3) **"); - client.raiseEvent(instanceId, "e2", "event 2 Payload"); - System.out.printf("Event raised for workflow with instanceId: %s\n", instanceId); - - // Wait for all tasks to complete and aggregate results - System.out.println(separatorStr); - System.out.println("**WaitForInstanceCompletion**"); - try { - WorkflowInstanceStatus waitForInstanceCompletionResult = - client.waitForInstanceCompletion(instanceId, Duration.ofSeconds(60), true); - System.out.printf("Result: %s%n", waitForInstanceCompletionResult); - } catch (TimeoutException ex) { - System.out.printf("waitForInstanceCompletion has an exception:%s%n", ex); +public class FaninoutWorkflow extends Workflow { + @Override + public WorkflowStub create() { + return ctx -> { + // Get a list of N work items to process in parallel. + Object[] workBatch = ctx.callActivity("GetWorkBatch", Object[].class).await(); + // Schedule the parallel tasks, but don't wait for them to complete yet. + List> tasks = Arrays.stream(workBatch) + .map(workItem -> ctx.callActivity("ProcessWorkItem", workItem, int.class)) + .collect(Collectors.toList()); + // Everything is scheduled. Wait here until all parallel tasks have completed. + List results = ctx.allOf(tasks).await(); + // Aggregate all N outputs and publish the result. + int sum = results.stream().mapToInt(Integer::intValue).sum(); + ctx.complete(sum); + }; } - - System.out.println(separatorStr); - System.out.println("**purgeInstance**"); - boolean purgeResult = client.purgeInstance(instanceId); - System.out.printf("purgeResult: %s%n", purgeResult); - - } } ``` @@ -640,42 +649,34 @@ public override async Task RunAsync(WorkflowContext context, OrderP ```java -public static void main(String[] args) throws InterruptedException { - DaprWorkflowClient client = new DaprWorkflowClient(); +public class ExternalSystemInteractionWorkflow extends Workflow { + @Override + public WorkflowStub create() { + return ctx -> { + // ...other steps... + Integer orderCost = ctx.getInput(int.class); + // Require orders over a certain threshold to be approved + if (orderCost > ORDER_APPROVAL_THRESHOLD) { + try { + // Request human approval for this order + ctx.callActivity("RequestApprovalActivity", orderCost, Void.class).await(); + // Pause and wait for a human to approve the order + boolean approved = ctx.waitForExternalEvent("ManagerApproval", Duration.ofDays(3), boolean.class).await(); + if (!approved) { + // The order was rejected, end the workflow here + ctx.complete("Process reject"); + } + } catch (TaskCanceledException e) { + // An approval timeout results in automatic order cancellation + ctx.complete("Process cancel"); + } + } + // ...other steps... - try (client) { - String eventInstanceId = client.scheduleNewWorkflow(DemoWorkflow.class); - System.out.printf("Started new workflow instance with random ID: %s%n", eventInstanceId); - client.raiseEvent(eventInstanceId, "TestException", null); - System.out.printf("Event raised for workflow with instanceId: %s\n", eventInstanceId); - - System.out.println(separatorStr); - String instanceToTerminateId = "terminateMe"; - client.scheduleNewWorkflow(DemoWorkflow.class, null, instanceToTerminateId); - System.out.printf("Started new workflow instance with specified ID: %s%n", instanceToTerminateId); - - TimeUnit.SECONDS.sleep(5); - System.out.println("Terminate this workflow instance manually before the timeout is reached"); - client.terminateWorkflow(instanceToTerminateId, null); - System.out.println(separatorStr); - - String restartingInstanceId = "restarting"; - client.scheduleNewWorkflow(DemoWorkflow.class, null, restartingInstanceId); - System.out.printf("Started new workflow instance with ID: %s%n", restartingInstanceId); - System.out.println("Sleeping 30 seconds to restart the workflow"); - TimeUnit.SECONDS.sleep(30); - - System.out.println("**SendExternalMessage: RestartEvent**"); - client.raiseEvent(restartingInstanceId, "RestartEvent", "RestartEventPayload"); - - System.out.println("Sleeping 30 seconds to terminate the eternal workflow"); - TimeUnit.SECONDS.sleep(30); - client.terminateWorkflow(restartingInstanceId, null); + // End the workflow with a success result + ctx.complete("Process approved"); + }; } - - System.out.println("Exiting DemoWorkflowClient."); - System.exit(0); - } ``` From 866e2498a3f6918f4cca59de1ca6fdb2eba82ff7 Mon Sep 17 00:00:00 2001 From: kaibocai Date: Mon, 13 Nov 2023 16:43:34 +0000 Subject: [PATCH 06/11] minor updates Signed-off-by: kaibocai --- .../workflow/workflow-patterns.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md index 530dc1eda..c7aebca4e 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md +++ b/daprdocs/content/en/developing-applications/building-blocks/workflow/workflow-patterns.md @@ -115,42 +115,42 @@ public class ChainWorkflow extends Workflow { return ctx -> { StringBuilder sb = new StringBuilder(); String wfInput = ctx.getInput(String.class); - String result1 = ctx.callActivity("event1", wfInput, String.class).await(); - String result2 = ctx.callActivity("event2", result1, String.class).await(); - String result3 = ctx.callActivity("event3", result2, String.class).await(); + String result1 = ctx.callActivity("Step1", wfInput, String.class).await(); + String result2 = ctx.callActivity("Step2", result1, String.class).await(); + String result3 = ctx.callActivity("Step3", result2, String.class).await(); String result = sb.append(result1).append(',').append(result2).append(',').append(result3).toString(); ctx.complete(result); }; } } - class Event1 implements WorkflowActivity { + class Step1 implements WorkflowActivity { @Override public Object run(WorkflowActivityContext ctx) { - Logger logger = LoggerFactory.getLogger(Event1.class); + Logger logger = LoggerFactory.getLogger(Step1.class); logger.info("Starting Activity: " + ctx.getName()); // Do some work return null; } } - class Event2 implements WorkflowActivity { + class Step2 implements WorkflowActivity { @Override public Object run(WorkflowActivityContext ctx) { - Logger logger = LoggerFactory.getLogger(Event2.class); + Logger logger = LoggerFactory.getLogger(Step2.class); logger.info("Starting Activity: " + ctx.getName()); // Do some work return null; } } - class Event3 implements WorkflowActivity { + class Step3 implements WorkflowActivity { @Override public Object run(WorkflowActivityContext ctx) { - Logger logger = LoggerFactory.getLogger(Event3.class); + Logger logger = LoggerFactory.getLogger(Step3.class); logger.info("Starting Activity: " + ctx.getName()); // Do some work return null; From bc9ee47fcae85354a36190fb0b208bf711744d39 Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:33:23 -0500 Subject: [PATCH 07/11] Update daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md Signed-off-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> --- .../reference/components-reference/supported-bindings/kubemq.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md index daf7d1981..e8e975d20 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md @@ -51,7 +51,9 @@ This component supports both **input and output** binding interfaces. {{< tabs "Self-Hosted" "Kubernetes">}} {{% codetab %}} + 1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. + 2. Wait for an email confirmation with your Key You can run a KubeMQ broker with Docker: From 78ffacba64ec1bc5360acfeaecae2b895b9d31a9 Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Mon, 13 Nov 2023 17:33:29 -0500 Subject: [PATCH 08/11] Update daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md Signed-off-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> --- .../reference/components-reference/supported-bindings/kubemq.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md index e8e975d20..b16f77b00 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md @@ -66,7 +66,9 @@ You can then interact with the server using the client port: `localhost:50000` {{% /codetab %}} {{% codetab %}} + 1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. + 2. Wait for an email confirmation with your Key Then Run the following kubectl commands: From 87b306ecfd8df91163e9fd9de556189a30d9473f Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Mon, 13 Nov 2023 17:48:45 -0500 Subject: [PATCH 09/11] fix link Signed-off-by: Hannah Hunter --- .../components-reference/supported-bindings/kubemq.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md index b16f77b00..1338c7e4e 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md @@ -51,9 +51,7 @@ This component supports both **input and output** binding interfaces. {{< tabs "Self-Hosted" "Kubernetes">}} {{% codetab %}} - -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. - +1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signin) and register for a key. 2. Wait for an email confirmation with your Key You can run a KubeMQ broker with Docker: @@ -66,9 +64,7 @@ You can then interact with the server using the client port: `localhost:50000` {{% /codetab %}} {{% codetab %}} - -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. - +1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signin) and register for a key. 2. Wait for an email confirmation with your Key Then Run the following kubectl commands: From bd30cd2c8baa3073918d3b66aeed3ab935f50c31 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Mon, 13 Nov 2023 17:52:31 -0500 Subject: [PATCH 10/11] try again with link Signed-off-by: Hannah Hunter --- .../components-reference/supported-bindings/kubemq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md index 1338c7e4e..e5112d2b2 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/kubemq.md @@ -51,7 +51,7 @@ This component supports both **input and output** binding interfaces. {{< tabs "Self-Hosted" "Kubernetes">}} {{% codetab %}} -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signin) and register for a key. +1. [Obtain KubeMQ Key](https://docs.kubemq.io/getting-started/quick-start#obtain-kubemq-license-key). 2. Wait for an email confirmation with your Key You can run a KubeMQ broker with Docker: @@ -64,7 +64,7 @@ You can then interact with the server using the client port: `localhost:50000` {{% /codetab %}} {{% codetab %}} -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signin) and register for a key. +1. [Obtain KubeMQ Key](https://docs.kubemq.io/getting-started/quick-start#obtain-kubemq-license-key). 2. Wait for an email confirmation with your Key Then Run the following kubectl commands: From b78063f2ee89e81c4e87bc366587bc5dc714acc0 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Mon, 13 Nov 2023 17:58:16 -0500 Subject: [PATCH 11/11] pub-sub Signed-off-by: Hannah Hunter --- .../components-reference/supported-pubsub/setup-kubemq.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md index 2bae7c629..d6c22d5b5 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-kubemq.md @@ -45,7 +45,7 @@ spec: {{< tabs "Self-Hosted" "Kubernetes">}} {{% codetab %}} -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. +1. [Obtain KubeMQ Key](https://docs.kubemq.io/getting-started/quick-start#obtain-kubemq-license-key). 2. Wait for an email confirmation with your Key You can run a KubeMQ broker with Docker: @@ -58,7 +58,7 @@ You can then interact with the server using the client port: `localhost:50000` {{% /codetab %}} {{% codetab %}} -1. Obtain KubeMQ Key by visiting [https://account.kubemq.io/auth/signup](https://account.kubemq.io/auth/signup) and register for a key. +1. [Obtain KubeMQ Key](https://docs.kubemq.io/getting-started/quick-start#obtain-kubemq-license-key). 2. Wait for an email confirmation with your Key Then Run the following kubectl commands: