Browse Source

Make `IAbpDaprClientFactory` async.

Resolve #18090
pull/18117/head
maliming 3 years ago
parent
commit
2d05d9b68d
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 4
      framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj
  2. 31
      framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs
  3. 14
      framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprModule.cs
  4. 5
      framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/IAbpDaprClientFactory.cs
  5. 2
      framework/src/Volo.Abp.DistributedLocking.Dapr/Volo/Abp/DistributedLocking/Dapr/DaprAbpDistributedLock.cs
  6. 2
      framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs

4
framework/src/Volo.Abp.Dapr/Volo.Abp.Dapr.csproj

@ -11,12 +11,14 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Volo.Abp.Http.Client\Volo.Abp.Http.Client.csproj" />
<ProjectReference Include="..\Volo.Abp.Json\Volo.Abp.Json.csproj" /> <ProjectReference Include="..\Volo.Abp.Json\Volo.Abp.Json.csproj" />
<ProjectReference Include="..\Volo.Abp.MultiTenancy.Abstractions\Volo.Abp.MultiTenancy.Abstractions.csproj" /> <ProjectReference Include="..\Volo.Abp.MultiTenancy.Abstractions\Volo.Abp.MultiTenancy.Abstractions.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Dapr.Client" /> <PackageReference Include="Dapr.Client" />
<PackageReference Include="IdentityModel" />
</ItemGroup> </ItemGroup>
</Project> </Project>

31
framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprClientFactory.cs

@ -3,9 +3,13 @@ using System.Globalization;
using System.Net.Http; using System.Net.Http;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks;
using Dapr.Client; using Dapr.Client;
using IdentityModel.Client;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.Authentication;
using Volo.Abp.Json.SystemTextJson; using Volo.Abp.Json.SystemTextJson;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.Abp.Tracing; using Volo.Abp.Tracing;
@ -20,23 +24,26 @@ public class AbpDaprClientFactory : IAbpDaprClientFactory, ISingletonDependency
protected ICurrentTenant CurrentTenant { get; } protected ICurrentTenant CurrentTenant { get; }
protected ICorrelationIdProvider CorrelationIdProvider { get; } protected ICorrelationIdProvider CorrelationIdProvider { get; }
protected IOptions<AbpCorrelationIdOptions> AbpCorrelationIdOptions { get; } protected IOptions<AbpCorrelationIdOptions> AbpCorrelationIdOptions { get; }
protected IRemoteServiceHttpClientAuthenticator RemoteServiceHttpClientAuthenticator { get; }
public AbpDaprClientFactory( public AbpDaprClientFactory(
IOptions<AbpDaprOptions> options, IOptions<AbpDaprOptions> options,
IOptions<AbpSystemTextJsonSerializerOptions> systemTextJsonSerializerOptions, IOptions<AbpSystemTextJsonSerializerOptions> systemTextJsonSerializerOptions,
IDaprApiTokenProvider daprApiTokenProvider, IDaprApiTokenProvider daprApiTokenProvider,
ICurrentTenant currentTenant, ICorrelationIdProvider correlationIdProvider, ICurrentTenant currentTenant, ICorrelationIdProvider correlationIdProvider,
IOptions<AbpCorrelationIdOptions> abpCorrelationIdOptions) IOptions<AbpCorrelationIdOptions> abpCorrelationIdOptions,
IRemoteServiceHttpClientAuthenticator remoteServiceHttpClientAuthenticator)
{ {
DaprApiTokenProvider = daprApiTokenProvider; DaprApiTokenProvider = daprApiTokenProvider;
CurrentTenant = currentTenant; CurrentTenant = currentTenant;
CorrelationIdProvider = correlationIdProvider; CorrelationIdProvider = correlationIdProvider;
AbpCorrelationIdOptions = abpCorrelationIdOptions; AbpCorrelationIdOptions = abpCorrelationIdOptions;
RemoteServiceHttpClientAuthenticator = remoteServiceHttpClientAuthenticator;
DaprOptions = options.Value; DaprOptions = options.Value;
JsonSerializerOptions = CreateJsonSerializerOptions(systemTextJsonSerializerOptions.Value); JsonSerializerOptions = CreateJsonSerializerOptions(systemTextJsonSerializerOptions.Value);
} }
public virtual DaprClient Create(Action<DaprClientBuilder>? builderAction = null) public virtual Task<DaprClient> CreateAsync(Action<DaprClientBuilder>? builderAction = null)
{ {
var builder = new DaprClientBuilder() var builder = new DaprClientBuilder()
.UseJsonSerializationOptions(JsonSerializerOptions); .UseJsonSerializationOptions(JsonSerializerOptions);
@ -59,10 +66,10 @@ public class AbpDaprClientFactory : IAbpDaprClientFactory, ISingletonDependency
builderAction?.Invoke(builder); builderAction?.Invoke(builder);
return builder.Build(); return Task.FromResult(builder.Build());
} }
public virtual HttpClient CreateHttpClient( public virtual async Task<HttpClient> CreateHttpClientAsync(
string? appId = null, string? appId = null,
string? daprEndpoint = null, string? daprEndpoint = null,
string? daprApiToken = null) string? daprApiToken = null)
@ -81,6 +88,22 @@ public class AbpDaprClientFactory : IAbpDaprClientFactory, ISingletonDependency
AddHeaders(httpClient); AddHeaders(httpClient);
var request = new HttpRequestMessage();
await RemoteServiceHttpClientAuthenticator.Authenticate(
new RemoteServiceHttpClientAuthenticateContext(
httpClient,
request,
new RemoteServiceConfiguration("/"),
string.Empty
)
);
var bearerToken = request.Headers.Authorization?.Parameter;
if (!bearerToken.IsNullOrWhiteSpace())
{
httpClient.SetBearerToken(bearerToken);
}
return httpClient; return httpClient;
} }

14
framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/AbpDaprModule.cs

@ -2,13 +2,19 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Http.Client;
using Volo.Abp.Json; using Volo.Abp.Json;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
using Volo.Abp.RemoteServices;
namespace Volo.Abp.Dapr; namespace Volo.Abp.Dapr;
[DependsOn(typeof(AbpJsonModule), typeof(AbpMultiTenancyAbstractionsModule))] [DependsOn(
typeof(AbpJsonModule),
typeof(AbpMultiTenancyAbstractionsModule),
typeof(AbpHttpClientModule)
)]
public class AbpDaprModule : AbpModule public class AbpDaprModule : AbpModule
{ {
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)
@ -16,12 +22,6 @@ public class AbpDaprModule : AbpModule
var configuration = context.Services.GetConfiguration(); var configuration = context.Services.GetConfiguration();
ConfigureDaprOptions(configuration); ConfigureDaprOptions(configuration);
context.Services.TryAddSingleton(
serviceProvider => serviceProvider
.GetRequiredService<IAbpDaprClientFactory>()
.Create()
);
} }
private void ConfigureDaprOptions(IConfiguration configuration) private void ConfigureDaprOptions(IConfiguration configuration)

5
framework/src/Volo.Abp.Dapr/Volo/Abp/Dapr/IAbpDaprClientFactory.cs

@ -1,14 +1,15 @@
using System; using System;
using System.Net.Http; using System.Net.Http;
using System.Threading.Tasks;
using Dapr.Client; using Dapr.Client;
namespace Volo.Abp.Dapr; namespace Volo.Abp.Dapr;
public interface IAbpDaprClientFactory public interface IAbpDaprClientFactory
{ {
DaprClient Create(Action<DaprClientBuilder>? builderAction = null); Task<DaprClient> CreateAsync(Action<DaprClientBuilder>? builderAction = null);
HttpClient CreateHttpClient( Task<HttpClient> CreateHttpClientAsync(
string? appId = null, string? appId = null,
string? daprEndpoint = null, string? daprEndpoint = null,
string? daprApiToken = null string? daprApiToken = null

2
framework/src/Volo.Abp.DistributedLocking.Dapr/Volo/Abp/DistributedLocking/Dapr/DaprAbpDistributedLock.cs

@ -31,7 +31,7 @@ public class DaprAbpDistributedLock : IAbpDistributedLock, ITransientDependency
{ {
name = DistributedLockKeyNormalizer.NormalizeKey(name); name = DistributedLockKeyNormalizer.NormalizeKey(name);
var daprClient = DaprClientFactory.Create(); var daprClient = await DaprClientFactory.CreateAsync();
var lockResponse = await daprClient.Lock( var lockResponse = await daprClient.Lock(
DistributedLockDaprOptions.StoreName, DistributedLockDaprOptions.StoreName,
name, name,

2
framework/src/Volo.Abp.EventBus.Dapr/Volo/Abp/EventBus/Dapr/DaprDistributedEventBus.cs

@ -255,7 +255,7 @@ public class DaprDistributedEventBus : DistributedEventBusBase, ISingletonDepend
protected virtual async Task PublishToDaprAsync(string eventName, object eventData, Guid? messageId = null, string? correlationId = null) protected virtual async Task PublishToDaprAsync(string eventName, object eventData, Guid? messageId = null, string? correlationId = null)
{ {
var client = DaprClientFactory.Create(); var client = await DaprClientFactory.CreateAsync();
var data = new AbpDaprEventData(DaprEventBusOptions.PubSubName, eventName, (messageId ?? GuidGenerator.Create()).ToString("N"), Serializer.SerializeToString(eventData), correlationId); var data = new AbpDaprEventData(DaprEventBusOptions.PubSubName, eventName, (messageId ?? GuidGenerator.Create()).ToString("N"), Serializer.SerializeToString(eventData), correlationId);
await client.PublishEventAsync(pubsubName: DaprEventBusOptions.PubSubName, topicName: eventName, data: data); await client.PublishEventAsync(pubsubName: DaprEventBusOptions.PubSubName, topicName: eventName, data: data);
} }

Loading…
Cancel
Save