-
Notifications
You must be signed in to change notification settings - Fork 345
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into workflow-ex-monitor
Signed-off-by: Whit Waldo <whit.waldo@innovian.net>
- Loading branch information
Showing
20 changed files
with
966 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
examples/Client/PublishSubscribe/StreamingSubscriptionExample/Program.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
using System.Text; | ||
using Dapr.Messaging.PublishSubscribe; | ||
using Dapr.Messaging.PublishSubscribe.Extensions; | ||
|
||
var builder = WebApplication.CreateBuilder(args); | ||
builder.Services.AddDaprPubSubClient(); | ||
var app = builder.Build(); | ||
|
||
//Process each message returned from the subscription | ||
Task<TopicResponseAction> HandleMessageAsync(TopicMessage message, CancellationToken cancellationToken = default) | ||
{ | ||
try | ||
{ | ||
//Do something with the message | ||
Console.WriteLine(Encoding.UTF8.GetString(message.Data.Span)); | ||
return Task.FromResult(TopicResponseAction.Success); | ||
} | ||
catch | ||
{ | ||
return Task.FromResult(TopicResponseAction.Retry); | ||
} | ||
} | ||
|
||
var messagingClient = app.Services.GetRequiredService<DaprPublishSubscribeClient>(); | ||
|
||
//Create a dynamic streaming subscription and subscribe with a timeout of 30 seconds and 10 seconds for message handling | ||
var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30)); | ||
var subscription = await messagingClient.SubscribeAsync("pubsub", "myTopic", | ||
new DaprSubscriptionOptions(new MessageHandlingPolicy(TimeSpan.FromSeconds(10), TopicResponseAction.Retry)), | ||
HandleMessageAsync, cancellationTokenSource.Token); | ||
|
||
await Task.Delay(TimeSpan.FromMinutes(1)); | ||
|
||
//When you're done with the subscription, simply dispose of it | ||
await subscription.DisposeAsync(); |
14 changes: 14 additions & 0 deletions
14
.../Client/PublishSubscribe/StreamingSubscriptionExample/StreamingSubscriptionExample.csproj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
<Project Sdk="Microsoft.NET.Sdk.Web"> | ||
|
||
<PropertyGroup> | ||
<OutputType>Exe</OutputType> | ||
<TargetFramework>net6.0</TargetFramework> | ||
<ImplicitUsings>enable</ImplicitUsings> | ||
<Nullable>enable</Nullable> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\..\..\..\src\Dapr.Messaging\Dapr.Messaging.csproj" /> | ||
</ItemGroup> | ||
|
||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<Project Sdk="Microsoft.NET.Sdk"> | ||
|
||
<PropertyGroup> | ||
<Description>This package contains the reference assemblies for developing messaging services using Dapr.</Description> | ||
<ImplicitUsings>enable</ImplicitUsings> | ||
<Nullable>enable</Nullable> | ||
<PackageId>Dapr.Messaging</PackageId> | ||
<Title>Dapr Messaging SDK</Title> | ||
<Description>Dapr Messaging SDK for building applications that utilize messaging components.</Description> | ||
<VersionSuffix>alpha</VersionSuffix> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\Dapr.Common\Dapr.Common.csproj" /> | ||
<ProjectReference Include="..\Dapr.Protos\Dapr.Protos.csproj" /> | ||
</ItemGroup> | ||
|
||
</Project> |
31 changes: 31 additions & 0 deletions
31
src/Dapr.Messaging/PublishSubscribe/DaprPublishSubscribeClient.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
// ------------------------------------------------------------------------ | ||
// Copyright 2024 The Dapr Authors | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// ------------------------------------------------------------------------ | ||
|
||
namespace Dapr.Messaging.PublishSubscribe; | ||
|
||
/// <summary> | ||
/// The base implementation of a Dapr pub/sub client. | ||
/// </summary> | ||
public abstract class DaprPublishSubscribeClient | ||
{ | ||
/// <summary> | ||
/// Dynamically subscribes to a Publish/Subscribe component and topic. | ||
/// </summary> | ||
/// <param name="pubSubName">The name of the Publish/Subscribe component.</param> | ||
/// <param name="topicName">The name of the topic to subscribe to.</param> | ||
/// <param name="options">Configuration options.</param> | ||
/// <param name="messageHandler">The delegate reflecting the action to take upon messages received by the subscription.</param> | ||
/// <param name="cancellationToken">Cancellation token.</param> | ||
/// <returns></returns> | ||
public abstract Task<IAsyncDisposable> SubscribeAsync(string pubSubName, string topicName, DaprSubscriptionOptions options, TopicMessageHandler messageHandler, CancellationToken cancellationToken = default); | ||
} |
47 changes: 47 additions & 0 deletions
47
src/Dapr.Messaging/PublishSubscribe/DaprPublishSubscribeClientBuilder.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
// ------------------------------------------------------------------------ | ||
// Copyright 2024 The Dapr Authors | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// ------------------------------------------------------------------------ | ||
|
||
using Dapr.Common; | ||
using Microsoft.Extensions.Configuration; | ||
using Autogenerated = Dapr.Client.Autogen.Grpc.v1; | ||
|
||
namespace Dapr.Messaging.PublishSubscribe; | ||
|
||
/// <summary> | ||
/// Builds a <see cref="DaprPublishSubscribeClient"/>. | ||
/// </summary> | ||
public sealed class DaprPublishSubscribeClientBuilder : DaprGenericClientBuilder<DaprPublishSubscribeClient> | ||
{ | ||
/// <summary> | ||
/// Used to initialize a new instance of the <see cref="DaprPublishSubscribeClientBuilder"/>. | ||
/// </summary> | ||
/// <param name="configuration">An optional instance of <see cref="IConfiguration"/>.</param> | ||
public DaprPublishSubscribeClientBuilder(IConfiguration? configuration = null) : base(configuration) | ||
{ | ||
} | ||
|
||
/// <summary> | ||
/// Builds the client instance from the properties of the builder. | ||
/// </summary> | ||
/// <returns>The Dapr client instance.</returns> | ||
/// <summary> | ||
/// Builds the client instance from the properties of the builder. | ||
/// </summary> | ||
public override DaprPublishSubscribeClient Build() | ||
{ | ||
var daprClientDependencies = BuildDaprClientDependencies(); | ||
var client = new Autogenerated.Dapr.DaprClient(daprClientDependencies.channel); | ||
|
||
return new DaprPublishSubscribeGrpcClient(client); | ||
} | ||
} |
49 changes: 49 additions & 0 deletions
49
src/Dapr.Messaging/PublishSubscribe/DaprPublishSubscribeGrpcClient.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
// ------------------------------------------------------------------------ | ||
// Copyright 2024 The Dapr Authors | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// ------------------------------------------------------------------------ | ||
|
||
using P = Dapr.Client.Autogen.Grpc.v1.Dapr; | ||
|
||
namespace Dapr.Messaging.PublishSubscribe; | ||
|
||
/// <summary> | ||
/// A client for interacting with the Dapr endpoints. | ||
/// </summary> | ||
internal sealed class DaprPublishSubscribeGrpcClient : DaprPublishSubscribeClient | ||
{ | ||
private readonly P.DaprClient daprClient; | ||
|
||
/// <summary> | ||
/// Creates a new instance of a <see cref="DaprPublishSubscribeGrpcClient"/> | ||
/// </summary> | ||
public DaprPublishSubscribeGrpcClient(P.DaprClient client) | ||
{ | ||
daprClient = client; | ||
} | ||
|
||
/// <summary> | ||
/// Dynamically subscribes to a Publish/Subscribe component and topic. | ||
/// </summary> | ||
/// <param name="pubSubName">The name of the Publish/Subscribe component.</param> | ||
/// <param name="topicName">The name of the topic to subscribe to.</param> | ||
/// <param name="options">Configuration options.</param> | ||
/// <param name="messageHandler">The delegate reflecting the action to take upon messages received by the subscription.</param> | ||
/// <param name="cancellationToken">Cancellation token.</param> | ||
/// <returns></returns> | ||
public override async Task<IAsyncDisposable> SubscribeAsync(string pubSubName, string topicName, DaprSubscriptionOptions options, TopicMessageHandler messageHandler, CancellationToken cancellationToken = default) | ||
{ | ||
var receiver = new PublishSubscribeReceiver(pubSubName, topicName, options, messageHandler, daprClient); | ||
await receiver.SubscribeAsync(cancellationToken); | ||
return receiver; | ||
} | ||
} | ||
|
44 changes: 44 additions & 0 deletions
44
src/Dapr.Messaging/PublishSubscribe/DaprSubscriptionOptions.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
// ------------------------------------------------------------------------ | ||
// Copyright 2024 The Dapr Authors | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// ------------------------------------------------------------------------ | ||
|
||
namespace Dapr.Messaging.PublishSubscribe; | ||
|
||
/// <summary> | ||
/// Options used to configure the dynamic Dapr subscription. | ||
/// </summary> | ||
/// <param name="MessageHandlingPolicy">Describes the policy to take on messages that have not been acknowledged within the timeout period.</param> | ||
public sealed record DaprSubscriptionOptions(MessageHandlingPolicy MessageHandlingPolicy) | ||
{ | ||
/// <summary> | ||
/// Subscription metadata. | ||
/// </summary> | ||
public IReadOnlyDictionary<string, string> Metadata { get; init; } = new Dictionary<string, string>(); | ||
|
||
/// <summary> | ||
/// The optional name of the dead-letter topic to send unprocessed messages to. | ||
/// </summary> | ||
public string? DeadLetterTopic { get; init; } | ||
|
||
/// <summary> | ||
/// If populated, this reflects the maximum number of messages that can be queued for processing on the replica. By default, | ||
/// no maximum boundary is enforced. | ||
/// </summary> | ||
public int? MaximumQueuedMessages { get; init; } | ||
|
||
/// <summary> | ||
/// The maximum amount of time to take to dispose of acknowledgement messages after the cancellation token has | ||
/// been signaled. | ||
/// </summary> | ||
public TimeSpan MaximumCleanupTimeout { get; init; } = TimeSpan.FromSeconds(30); | ||
} | ||
|
38 changes: 38 additions & 0 deletions
38
...Dapr.Messaging/PublishSubscribe/Extensions/PublishSubscribeServiceCollectionExtensions.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
using Microsoft.Extensions.DependencyInjection; | ||
using Microsoft.Extensions.DependencyInjection.Extensions; | ||
|
||
namespace Dapr.Messaging.PublishSubscribe.Extensions; | ||
|
||
/// <summary> | ||
/// Contains extension methods for using Dapr Publish/Subscribe with dependency injection. | ||
/// </summary> | ||
public static class PublishSubscribeServiceCollectionExtensions | ||
{ | ||
/// <summary> | ||
/// Adds Dapr Publish/Subscribe support to the service collection. | ||
/// </summary> | ||
/// <param name="services">The <see cref="IServiceCollection"/>.</param> | ||
/// <param name="configure">Optionally allows greater configuration of the <see cref="DaprPublishSubscribeClient"/> using injected services.</param> | ||
/// <returns></returns> | ||
public static IServiceCollection AddDaprPubSubClient(this IServiceCollection services, Action<IServiceProvider, DaprPublishSubscribeClientBuilder>? configure = null) | ||
{ | ||
ArgumentNullException.ThrowIfNull(services, nameof(services)); | ||
|
||
//Register the IHttpClientFactory implementation | ||
services.AddHttpClient(); | ||
|
||
services.TryAddSingleton(serviceProvider => | ||
{ | ||
var httpClientFactory = serviceProvider.GetRequiredService<IHttpClientFactory>(); | ||
|
||
var builder = new DaprPublishSubscribeClientBuilder(); | ||
builder.UseHttpClientFactory(httpClientFactory); | ||
|
||
configure?.Invoke(serviceProvider, builder); | ||
|
||
return builder.Build(); | ||
}); | ||
|
||
return services; | ||
} | ||
} |
23 changes: 23 additions & 0 deletions
23
src/Dapr.Messaging/PublishSubscribe/MessageHandlingPolicy.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
// ------------------------------------------------------------------------ | ||
// Copyright 2024 The Dapr Authors | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
// ------------------------------------------------------------------------ | ||
|
||
|
||
namespace Dapr.Messaging.PublishSubscribe; | ||
|
||
/// <summary> | ||
/// Defines the policy for handling streaming message subscriptions, including retry logic and timeout settings. | ||
/// </summary> | ||
/// <param name="TimeoutDuration">The duration to wait before timing out a message handling operation.</param> | ||
/// <param name="DefaultResponseAction">The default action to take when a message handling operation times out.</param> | ||
public sealed record MessageHandlingPolicy(TimeSpan TimeoutDuration, TopicResponseAction DefaultResponseAction); | ||
|
Oops, something went wrong.