Skip to content

Add Coherence state store component docs #4696

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 76 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
76 commits
Select commit Hold shift + click to select a range
4f32042
Update conversation-overview.md
hhunter-ms Feb 27, 2025
3688a1d
Merge pull request #4559 from dapr/hhunter-ms-patch-6
hhunter-ms Feb 27, 2025
b74c247
update python examples for workflow; update conversation quickstart t…
hhunter-ms Feb 28, 2025
0992cd4
Updates latest version to 1.15.1 (#4562)
JoshVanL Feb 28, 2025
fb53445
Revert back to built-in template that includes GA
marcduiker Mar 3, 2025
287cfd7
Merge pull request #4564 from marcduiker/v1.15
hhunter-ms Mar 3, 2025
7c40430
spelling-fix: kubernetes-persisting-scheduler.md (#4566)
jake-engelberg Mar 3, 2025
19f812c
remove 3500, only use as an example in API docs
hhunter-ms Mar 3, 2025
178e0c8
Update kubernetes-persisting-scheduler.md (#4568)
jake-engelberg Mar 3, 2025
ac358cb
Merge branch 'v1.15' into issue_4519
hhunter-ms Mar 4, 2025
b7b273d
Merge pull request #4567 from hhunter-ms/issue_4519
hhunter-ms Mar 4, 2025
12b2f17
Update sidecar.md (#4570)
joneldominic Mar 4, 2025
f4848ae
Update v1.15.1 --> v1.15.2 (#4571)
hhunter-ms Mar 5, 2025
0682cd0
update keys to items for consistency (#4565)
hhunter-ms Mar 6, 2025
418ef7f
update the docs
msfussell Mar 13, 2025
fb8764b
Update multi-app template and arguments annotations for new configura…
antontroshin Mar 13, 2025
449fb9a
Merge branch 'v1.15' into pythondocs
hhunter-ms Mar 17, 2025
b24527e
Merge pull request #4576 from msfussell/pythondocs
hhunter-ms Mar 17, 2025
60d5332
update author and manage workflow how-tos
hhunter-ms Mar 17, 2025
8cbd37a
Merge branch 'v1.15' into issue_4410
hhunter-ms Mar 17, 2025
6e990e4
Added .NET streaming subscription example to pubsub page
WhitWaldo Mar 18, 2025
2be7c99
Added double quotes around .NET in the tabs markup
WhitWaldo Mar 18, 2025
dd0fd38
Merge pull request #4583 from WhitWaldo/net-streaming-subs
hhunter-ms Mar 18, 2025
79d0320
Merge branch 'v1.15' into issue_4410
hhunter-ms Mar 18, 2025
f612ab7
Merge pull request #4563 from hhunter-ms/issue_4410
hhunter-ms Mar 19, 2025
8a29b39
Fixed spelling mistake in secret-scope.md (#4593)
jamespegg Mar 24, 2025
aebf393
Update self-hosted-with-docker.md - make `scheduler` running (#4599)
mathieu-benoit Mar 25, 2025
b421483
Update actors-quickstart.md (#4601)
alicejgibbons Mar 27, 2025
196cf3d
Upped stalebot period from 5 to 30 days (#4610)
WhitWaldo Apr 9, 2025
5435bd4
Added troubleshooting step to resolve port conflicts during `dapr ini…
WhitWaldo Apr 9, 2025
4341935
change application insights example from insights key to connection s…
fabistb Apr 10, 2025
58be5f3
docs: bindings.cron every 15m (#4605)
jfreeland Apr 10, 2025
04c9b58
fix: broken link due to typo (#4604)
thrubovc Apr 12, 2025
f83e3dc
Updated .NET workflow method names (#4586)
WhitWaldo Apr 12, 2025
aa7a115
Update documentation for GCP Secret Manager and Object Store support …
antontroshin Apr 13, 2025
89c3d60
Adds Warning that Actor Reminder Partition is not relevant by default…
JoshVanL Apr 13, 2025
5521405
add conversation API to allow list (#4581)
famarting Apr 13, 2025
2a93678
Added local echo conversation component (#4587)
WhitWaldo Apr 13, 2025
52f4c15
Update conversation_api.md (#4589)
siri-varma Apr 13, 2025
bb573c0
Corrected typo namepsace to namespace (#4613)
mcambal Apr 14, 2025
fcddd67
Fixed typo => "loggings" to "logging" (#4619)
WhitWaldo Apr 21, 2025
44634df
Fixed typo -> "Fleuntd" to "Fluentd" (#4618)
WhitWaldo Apr 21, 2025
3c49608
On the page covering binding inputs (triggers), the text erroneously …
WhitWaldo Apr 21, 2025
1688963
Update kubernetes-production.md (#4616)
joebowbeer Apr 22, 2025
101b026
Added .NET SDK examples to serialization document (#4596)
WhitWaldo Apr 23, 2025
a0027cb
apache ignite description on cassandra (#4630)
rochabr Apr 25, 2025
41ddb27
Updating AKS Cluster creation command (#4632)
rochabr Apr 28, 2025
58ef38f
Argo CD Integration docs (#4629)
rochabr Apr 29, 2025
bfcfaf9
Added tags example (#4635)
adam6878 Apr 29, 2025
69cc52f
v1.15- update supported release versions (#4639)
JoshVanL May 3, 2025
4e38b8c
chore: update stale bot duration to 90D (#4628)
mikeee May 3, 2025
6df81c0
Adds a new component config option for Redis PubSub (#4591)
elena-kolevska May 6, 2025
777a6c6
Update Dapr Slide deck (#4641)
marcduiker May 7, 2025
1952e91
Modified all the C# examples through the configuration document (#4638)
WhitWaldo May 7, 2025
67fc7d3
Fix broken .yml link in conversation-quickstart.md (#4642)
tommygood May 8, 2025
79f25d6
Updated to reflect a modern .NET example for retrieving secrets from …
WhitWaldo May 8, 2025
f4d95a4
Modernized .NET examples for binding inputs and outputs (#4621)
WhitWaldo May 9, 2025
61e23e0
Updated to modernize .NET examples (#4631)
WhitWaldo May 12, 2025
0815bcf
Fix for workflow mgmt api call rendering (#4652)
bibryam May 15, 2025
d476de5
Fix links to durabletask-go: point to dapr org (#4654)
bibryam May 15, 2025
c2119fd
Correcting .NET examples in the workflow docs (#4627)
WhitWaldo May 15, 2025
3b9d892
Modernized the .NET examples for interacting with state in Dapr (#4622)
WhitWaldo May 17, 2025
2172118
Update to v1.15.5 (#4656)
JoshVanL May 24, 2025
46d200e
Update subscription-schema.md (#4658)
joebowbeer May 24, 2025
4638f8f
Update PubSub Raw doc (#4659)
alicejgibbons May 24, 2025
9faf5ae
Azure Application Insights fixes (#4660)
alicejgibbons Jun 3, 2025
8f633fe
style: fix typo in word for conversation api (#4672)
sicoyle Jun 10, 2025
0cd7476
Add workflow slide deck, fix hugo version (#4677)
marcduiker Jun 17, 2025
3d42b52
Add additional behavior of failing App Health Checks - as explained b…
olitomlinson Jun 25, 2025
fa4bac1
Update workflow diagrams (#4682)
marcduiker Jun 26, 2025
9794ddb
Add Coherence docs
tmiddlet2666 Jun 27, 2025
5be404f
Merge branch 'v1.15' into coherence
tmiddlet2666 Jun 27, 2025
6b51f38
Update daprdocs/content/en/reference/components-reference/supported-s…
tmiddlet2666 Jul 3, 2025
470b0c5
Update daprdocs/content/en/reference/components-reference/supported-s…
tmiddlet2666 Jul 3, 2025
0cc5dbf
Update daprdocs/content/en/reference/components-reference/supported-s…
tmiddlet2666 Jul 3, 2025
13148c8
Update daprdocs/data/components/state_stores/generic.yaml
tmiddlet2666 Jul 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
},
"ghcr.io/devcontainers/features/hugo:1": {
"extended": true,
"version": "latest"
"version": "0.100.2"
},
"ghcr.io/devcontainers/features/node:1": {
"nodeGypDependencies": true,
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/stale-pr-monitor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ jobs:
stale-pr-message: 'Stale PR, paging all reviewers'
stale-pr-label: 'stale'
exempt-pr-labels: 'question,"help wanted",do-not-merge,waiting-on-code-pr'
days-before-stale: 5
days-before-stale: 90
2 changes: 1 addition & 1 deletion daprdocs/content/en/concepts/dapr-services/sidecar.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ For a detailed list of all available arguments run `daprd --help` or see this [t
1. Specify the port your application is listening to

```bash
daprd --app-id --app-port 5000
daprd --app-id myapp --app-port 5000
```

1. If you are using several custom resources and want to specify the location of the resource definition files, use the `--resources-path` argument:
Expand Down
26 changes: 14 additions & 12 deletions daprdocs/content/en/contributing/presentations.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@ weight: 20
description: How to give a presentation on Dapr and examples
---

We welcome community members giving presentations on Dapr and spreading the word about all the awesome Dapr features! We offer a template PowerPoint file to get started.
We encourage community members to give presentations on Dapr. To get you started quickly, we offer two PowerPoint files:

{{< button text="Download the Dapr Presentation Deck" link="/presentations/dapr-slidedeck.pptx.zip" >}}
- *dapr-slidedeck.pptx*, this is a 150+ page slide deck and contains; an overview of Dapr, all of its building block APIs, cross-cutting concerns, hosting options, and assets to create your own architecture diagrams.
- *dapr-workflow.pptx*, this is a dedicated slide deck about Dapr workflow and contains; durable execution concept, workflow authoring, workflow patterns, workflow management, and challenges & tips.

There is a downloadable zip file contains both slide decks.

{{< button text="Download the Dapr Presentation Decks" link="/presentations/dapr-slidedecks.zip" >}}

{{% alert color="primary" %}}
If you're using the PowerPoint template with MacOS, please install the Space Grotesk font to ensure the text is rendered properly:
Expand All @@ -19,19 +24,16 @@ brew install --cask font-space-grotesk

## Giving a Dapr presentation

- Begin by downloading the [Dapr Presentation Deck](/presentations/dapr-slidedeck.pptx.zip). This contains slides and diagrams needed to give a Dapr presentation.
- Begin by downloading the [Dapr Presentation Decks](/presentations/dapr-slidedecks.zip). These contain slides, diagrams, and graphical assets needed to give a Dapr presentation.
- Next, review the docs to make sure you understand the [concepts]({{< ref concepts >}}).
- Use the Dapr [quickstarts](https://github.com/dapr/quickstarts) repo and [samples](https://github.com/dapr/samples) repo to show demos of how to use Dapr.
- Use the Dapr [quickstarts](https://github.com/dapr/quickstarts) repo to show demos of how to use Dapr.
- Once you've done a Dapr presentation, claim the *Dapr Presenter* badge by adding your presentation to [this table](https://github.com/dapr/community/tree/master/presentations) in the Dapr Community repository.

## Dapr presentations from the community

## Previous Dapr presentations
If you need some inspiration, watch these Dapr presentations by the community via this [Dapr YouTube playlist](https://youtube.com/playlist?list=PLcip_LgkYwztNWGLdO6yROA3zKl-uUu7h&si=dLMS2CPPyMsfl-QQ):

| Presentation | Recording | Deck |
|--------------|-----------|------|
| Running Event-Driven Pub/Sub Microservices In Kubernetes With Dapr | [Link](https://youtu.be/-4sHUvfk2Eg) | N/A
| Ignite 2019: Mark Russinovich Presents the Future of Cloud Native Applications | [Link](https://www.youtube.com/watch?v=LAUDVk8PaCY) | [Link](/presentations/2019IgniteCloudNativeApps.pdf)
| Azure Community Live: Build microservice applications using DAPR with Mark Fussell | [Link](https://www.youtube.com/watch?v=CgqI7nen-Ng) | N/A
| Ready 2020: Mark Russinovich Presents Cloud Native Applications | [Link](https://youtu.be/eJCu6a-x9uo?t=1614) | [Link](/presentations/2020ReadyCloudNativeApps.pdf)
| Ignite 2021: Mark Russinovich Presents Dapr v1.0 Release | [Link](https://youtu.be/69PrhWQorEM?t=3789) | N/A
<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?si=0atWXnp3ikvuqao7&amp;list=PLcip_LgkYwztNWGLdO6yROA3zKl-uUu7h" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## Additional resources

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,12 +195,8 @@ func configHandler(w http.ResponseWriter, r *http.Request) {

{{< /tabs >}}

## Next steps

{{< button text="Enable actor reminder partitioning >>" page="howto-actors-partitioning.md" >}}

## Related links

- Refer to the [Dapr SDK documentation and examples]({{< ref "developing-applications/sdks/#sdk-languages" >}}).
- [Actors API reference]({{< ref actors_api.md >}})
- [Actors overview]({{< ref actors-overview.md >}})
- [Actors overview]({{< ref actors-overview.md >}})
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ aliases:
- "/developing-applications/building-blocks/actors/actors-background"
---

{{% alert title="Warning" color="warning" %}}
This feature is only relevant when using state store actor reminders, no longer enabled by default.
As of v1.15, Dapr uses the far more performant [Scheduler Actor Reminders]({{< ref "scheduler.md#actor-reminders" >}}) by default.
This page is only relevant if you are using the legacy state store actor reminders, enabled via setting the [`SchedulerReminders` feature flag]({{< ref "support-preview-features.md#current-preview-features" >}}) to false.
It is highly recommended you use using the Scheduler Actor Reminders feature.
{{% /alert %}}

[Actor reminders]({{< ref "actors-timers-reminders.md#actor-reminders" >}}) are persisted and continue to be triggered after sidecar restarts. Applications with multiple reminders registered can experience the following issues:

- Low throughput on reminders registration and de-registration
Expand Down Expand Up @@ -193,4 +200,4 @@ Watch [this video for a demo of actor reminder partitioning](https://youtu.be/Zw
## Related links

- [Actors API reference]({{< ref actors_api.md >}})
- [Actors overview]({{< ref actors-overview.md >}})
- [Actors overview]({{< ref actors-overview.md >}})
Original file line number Diff line number Diff line change
Expand Up @@ -110,40 +110,30 @@ The code examples below leverage Dapr SDKs to invoke the output bindings endpoin

{{% codetab %}}

Here's an example of using a console app with top-level statements in .NET 6+:

```csharp
//dependencies
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Dapr.Client;
using Microsoft.AspNetCore.Mvc;
using System.Threading;

//code
namespace EventService
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDaprClient();
var app = builder.Build();

const string BINDING_NAME = "checkout";
const string BINDING_OPERATION = "create";

var random = new Random();
using var daprClient = app.Services.GetRequiredService<DaprClient>();

while (true)
{
class Program
{
static async Task Main(string[] args)
{
string BINDING_NAME = "checkout";
string BINDING_OPERATION = "create";
while(true)
{
System.Threading.Thread.Sleep(5000);
Random random = new Random();
int orderId = random.Next(1,1000);
using var client = new DaprClientBuilder().Build();
//Using Dapr SDK to invoke output binding
await client.InvokeBindingAsync(BINDING_NAME, BINDING_OPERATION, orderId);
Console.WriteLine("Sending message: " + orderId);
}
}
}
await Task.Delay(TimeSpan.FromSeconds(5));
var orderId = random.Next(1, 1000);
await client.InvokeBindingAsync(BINDING_NAME, BINDING_OPERATION, orderId);
Console.WriteLine($"Sending message: {orderId}");
}

```

{{% /codetab %}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,34 +113,41 @@ Configure your application to receive incoming events. If you're using HTTP, you
- Listen on a `POST` endpoint with the name of the binding, as specified in `metadata.name` in the `binding.yaml` file.
- Verify your application allows Dapr to make an `OPTIONS` request for this endpoint.

Below are code examples that leverage Dapr SDKs to demonstrate an output binding.
Below are code examples that leverage Dapr SDKs to demonstrate an input binding.

{{< tabs ".NET" Java Python Go JavaScript>}}

{{% codetab %}}

The following example demonstrates how to configure an input binding using ASP.NET Core controllers.

```csharp
//dependencies
using System.Collections.Generic;
using System.Threading.Tasks;
using System;
using Microsoft.AspNetCore.Mvc;

//code
namespace CheckoutService.controller
namespace CheckoutService.controller;

[ApiController]
public sealed class CheckoutServiceController : ControllerBase
{
[ApiController]
public class CheckoutServiceController : Controller
[HttpPost("/checkout")]
public ActionResult<string> getCheckout([FromBody] int orderId)
{
[HttpPost("/checkout")]
public ActionResult<string> getCheckout([FromBody] int orderId)
{
Console.WriteLine("Received Message: " + orderId);
return "CID" + orderId;
}
Console.WriteLine($"Received Message: {orderId}");
return $"CID{orderId}";
}
}
```

The following example demonstrates how to configure the same input binding using a minimal API approach:
```csharp
app.MapPost("checkout", ([FromBody] int orderId) =>
{
Console.WriteLine($"Received Message: {orderId}");
return $"CID{orderId}"
});
```

{{% /codetab %}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,27 +76,21 @@ The following example shows how to get a saved configuration item using the Dapr
{{% codetab %}}

```csharp
//dependencies
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Dapr.Client;

//code
namespace ConfigurationApi
{
public class Program
{
private static readonly string CONFIG_STORE_NAME = "configstore";

public static async Task Main(string[] args)
{
using var client = new DaprClientBuilder().Build();
var configuration = await client.GetConfiguration(CONFIG_STORE_NAME, new List<string>() { "orderId1", "orderId2" });
Console.WriteLine($"Got key=\n{configuration[0].Key} -> {configuration[0].Value}\n{configuration[1].Key} -> {configuration[1].Value}");
}
}
}
const string CONFIG_STORE_NAME = "configstore";

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDaprClient();
var app = builder.Build();

using var client = app.Services.GetRequiredServices<DaprClient>();

var configuration = await client.GetConfiguration(CONFIG_STORE_NAME, [ "orderId1", "orderId2" ]);
Console.WriteLine($"Got key=\n{configuration[0].Key} -> {configuration[0].Value}\n{configuration[1].Key} -> {configuration[1].Value}");
```

{{% /codetab %}}
Expand Down Expand Up @@ -261,13 +255,19 @@ using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Dapr.Client;
using System.Text.Json;

const string DAPR_CONFIGURATION_STORE = "configstore";
var CONFIGURATION_KEYS = new List<string> { "orderId1", "orderId2" };
var client = new DaprClientBuilder().Build();
var CONFIGURATION_ITEMS = new List<string> { "orderId1", "orderId2" };

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDaprClient();
var app = builder.Build();

var client = app.Services.GetRequiredService<DaprClient>();

// Subscribe for configuration changes
SubscribeConfigurationResponse subscribe = await client.SubscribeConfiguration(DAPR_CONFIGURATION_STORE, CONFIGURATION_ITEMS);
var subscribe = await client.SubscribeConfiguration(DAPR_CONFIGURATION_STORE, CONFIGURATION_ITEMS);

// Print configuration changes
await foreach (var items in subscribe.Source)
Expand All @@ -279,7 +279,7 @@ await foreach (var items in subscribe.Source)
subscriptionId = subscribe.Id;
continue;
}
var cfg = System.Text.Json.JsonSerializer.Serialize(items);
var cfg = JsonSerializer.Serialize(items);
Console.WriteLine("Configuration update " + cfg);
}
```
Expand All @@ -303,40 +303,23 @@ using Dapr.Extensions.Configuration;
using System.Collections.Generic;
using System.Threading;

namespace ConfigurationApi
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Starting application.");
CreateHostBuilder(args).Build().Run();
Console.WriteLine("Closing application.");
}

/// <summary>
/// Creates WebHost Builder.
/// </summary>
/// <param name="args">Arguments.</param>
/// <returns>Returns IHostbuilder.</returns>
public static IHostBuilder CreateHostBuilder(string[] args)
{
var client = new DaprClientBuilder().Build();
return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config =>
{
// Get the initial value and continue to watch it for changes.
config.AddDaprConfigurationStore("configstore", new List<string>() { "orderId1","orderId2" }, client, TimeSpan.FromSeconds(20));
config.AddStreamingDaprConfigurationStore("configstore", new List<string>() { "orderId1","orderId2" }, client, TimeSpan.FromSeconds(20));

})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
}
Console.WriteLine("Starting application.");
var builder = WebApplication.CreateBuilder(args);

// Unlike most other situations, we build a `DaprClient` here using its factory because we cannot rely on `IConfiguration`
// or other injected services to configure it because we haven't yet built the DI container.
var client = new DaprClientBuilder().Build();

// In a real-world application, you'd also add the following line to register the `DaprClient` with the DI container so
// it can be injected into other services. In this demonstration, it's not necessary as we're not injecting it anywhere.
// builder.Services.AddDaprClient();

// Get the initial value and continue to watch it for changes
builder.Configuration.AddDaprConfigurationStore("configstore", new List<string>() { "orderId1","orderId2" }, client, TimeSpan.FromSeconds(20));
builder.Configuration.AddStreamingDaprConfigurationStore("configstore", new List<string>() { "orderId1","orderId2" }, client, TimeSpan.FromSeconds(20));

await builder.Build().RunAsync();
Console.WriteLine("Closing application.");
```

Navigate to the directory containing the above code, then run the following command to launch both a Dapr sidecar and the subscriber application:
Expand Down Expand Up @@ -524,29 +507,23 @@ Following are the code examples showing how you can unsubscribe to configuration
{{< tabs ".NET" Java Python Go JavaScript "HTTP API (BASH)" "HTTP API (Powershell)">}}

{{% codetab %}}

```csharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Dapr.Client;

var builder = WebApplication.CreateBuilder();
builder.Services.AddDaprClient();
var app = builder.Build();

const string DAPR_CONFIGURATION_STORE = "configstore";
var client = new DaprClientBuilder().Build();
const string SubscriptionId = "abc123"; //Replace with the subscription identifier to unsubscribe from
var client = app.Services.GetRequiredService<DaprClient>();

// Unsubscribe to config updates and exit the app
async Task unsubscribe(string subscriptionId)
{
try
{
await client.UnsubscribeConfiguration(DAPR_CONFIGURATION_STORE, subscriptionId);
Console.WriteLine("App unsubscribed from config changes");
Environment.Exit(0);
}
catch (Exception ex)
{
Console.WriteLine("Error unsubscribing from config updates: " + ex.Message);
}
}
await client.UnsubscribeConfiguration(DAPR_CONFIGURATION_STORE, SubscriptionId);
Console.WriteLine("App unsubscribed from config changes");
```
{{% /codetab %}}

Expand Down
Loading