Added .NET implementation detail for streaming subscription support

Signed-off-by: Whit Waldo <whit.waldo@innovian.net>
This commit is contained in:
Whit Waldo 2024-09-16 14:47:24 -05:00
parent 90c0906c01
commit 8aa121259f
1 changed files with 41 additions and 1 deletions

View File

@ -204,7 +204,47 @@ As messages are sent to the given message handler code, there is no concept of r
The example below shows the different ways to stream subscribe to a topic.
{{< tabs Go>}}
{{< tabs ".NET" Go>}}
{{% codetab %}}
```csharp
using Dapr.Messaging.PublishSubscribe;
var clientBuilder = new DaprPublishSubscribeClientBuilder();
var daprMessagingClient = clientBuilder.Build();
async Task<TopicResponseAction> HandleMessage(TopicMessage message, CancellationToken cancellationToken = default)
{
try
{
//Do something with the message
Console.WriteLine(Encoding.UTF8.GetString(message.Data.Span));
return await Task.FromResult(TopicResponseAction.Success);
}
catch
{
return await Task.FromResult(TopicResponseAction.Retry);
}
}
//Create a dynamic streaming subscription
var subscription = daprMessagingClient.Register("pubsub", "myTopic",
new DaprSubscriptionOptions(new MessageHandlingPolicy(TimeSpan.FromSeconds(15), TopicResponseAction.Retry)),
HandleMessage, CancellationToken.None);
//Subscribe to messages on it with a timeout of 30 seconds
var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30));
await subscription.SubscribeAsync(cancellationTokenSource.Token);
await Task.Delay(TimeSpan.FromMinutes(1));
//When you're done with the subscription, simply dispose of it
await subscription.DisposeAsync();
```
{{% /codetab %}}
{{% codetab %}}