Fix rebus message type queue mixup

This commit is contained in:
Sipke Schoorstra 2021-07-01 12:18:41 +02:00
parent cc70e4fb2f
commit a0ade4a984
5 changed files with 26 additions and 22 deletions

View file

@ -15,6 +15,7 @@ using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using NodaTime;
using Rebus.Persistence.InMem;
using Rebus.Routing.TypeBased;
using Rebus.Transport.InMem;
using Storage.Net;
using Storage.Net.Blobs;
@ -25,12 +26,15 @@ namespace Elsa
public class ElsaOptions
{
public static string FormatChannelQueueName<TMessage>(string? channel = default)
public static string FormatChannelQueueName<TMessage>(string channel) => FormatChannelQueueName(typeof(TMessage), channel);
public static string FormatChannelQueueName(Type messageType, string channel)
{
var queue = !string.IsNullOrWhiteSpace(channel) ? $"{typeof(TMessage).Name}{channel}" : typeof(TMessage).Name;
return queue.Dehumanize().Underscore().Dasherize();
var queue = !string.IsNullOrWhiteSpace(channel) ? $"{messageType.Name}{channel}" : messageType.Name;
return FormatQueueName(queue);
}
public static string FormatQueueName(string queue) => queue.Dehumanize().Underscore().Dasherize();
internal ElsaOptions()
{

View file

@ -66,7 +66,7 @@ namespace Elsa.Services.Dispatch
}
var channel = _workflowChannelOptions.GetChannelOrDefault(workflowBlueprint.Channel);
var queue = ElsaOptions.FormatChannelQueueName<ExecuteWorkflowInstanceRequest>(channel);
var queue = ElsaOptions.FormatChannelQueueName<ExecuteWorkflowDefinitionRequest>(channel);
await _commandSender.SendAsync(request, queue, default, cancellationToken);
}
}

View file

@ -33,19 +33,19 @@ namespace Elsa.Services.Messaging
public async Task<IBus> GetServiceBusAsync(Type messageType, string? queueName = default, CancellationToken cancellationToken = default)
{
if (string.IsNullOrWhiteSpace(queueName))
queueName = messageType.Name;
queueName = ElsaOptions.FormatChannelQueueName(messageType, _elsaOptions.WorkflowChannelOptions.Default);
var formattedQueueName = FormatQueueName(queueName);
var prefixedQueueName = PrefixQueueName(queueName);
await _semaphore.WaitAsync(cancellationToken);
try
{
if (_serviceBuses.TryGetValue(formattedQueueName, out var bus))
if (_serviceBuses.TryGetValue(prefixedQueueName, out var bus))
return bus;
var configurer = Configure.With(_handlerActivator);
var map = new Dictionary<Type, string> { [messageType] = formattedQueueName };
var configureContext = new ServiceBusEndpointConfigurationContext(configurer, formattedQueueName, map, _serviceProvider);
var map = new Dictionary<Type, string> { [messageType] = prefixedQueueName };
var configureContext = new ServiceBusEndpointConfigurationContext(configurer, prefixedQueueName, map, _serviceProvider);
// Default options.
configurer
@ -58,7 +58,7 @@ namespace Elsa.Services.Messaging
_elsaOptions.ConfigureServiceBusEndpoint(configureContext);
var newBus = configurer.Start();
_serviceBuses.TryAdd(formattedQueueName, newBus);
_serviceBuses.TryAdd(prefixedQueueName, newBus);
return newBus;
}
@ -68,6 +68,6 @@ namespace Elsa.Services.Messaging
}
}
private string FormatQueueName(string name) => $"{_elsaOptions.ServiceBusOptions.QueuePrefix}{name}";
private string PrefixQueueName(string name) => $"{_elsaOptions.ServiceBusOptions.QueuePrefix}{name}";
}
}

View file

@ -1,6 +1,6 @@
{
"name": "@elsa-workflows/elsa-workflows-studio",
"version": "2.1.0",
"version": "2.1.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View file

@ -6,18 +6,18 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Text.Encodings.Web" Version="5.0.1"/>
<PackageReference Include="System.Text.Encodings.Web" Version="5.0.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj"/>
<ProjectReference Include="..\..\..\..\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj"/>
<ProjectReference Include="..\..\..\..\activities\Elsa.Activities.Temporal.Quartz\Elsa.Activities.Temporal.Quartz.csproj"/>
<ProjectReference Include="..\..\..\..\core\Elsa\Elsa.csproj"/>
<ProjectReference Include="..\..\..\..\designer\bindings\aspnet\Elsa.Designer.Components.Web\Elsa.Designer.Components.Web.csproj"/>
<ProjectReference Include="..\..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.Sqlite\Elsa.Persistence.EntityFramework.Sqlite.csproj"/>
<ProjectReference Include="..\..\..\..\server\Elsa.Server.Api\Elsa.Server.Api.csproj"/>
<ProjectReference Include="..\..\..\persistence\Elsa.Samples.Persistence.EntityFramework\Elsa.Samples.Persistence.EntityFramework.csproj"/>
<ProjectReference Include="..\..\..\..\activities\Elsa.Activities.Email\Elsa.Activities.Email.csproj" />
<ProjectReference Include="..\..\..\..\activities\Elsa.Activities.Http\Elsa.Activities.Http.csproj" />
<ProjectReference Include="..\..\..\..\activities\Elsa.Activities.Temporal.Quartz\Elsa.Activities.Temporal.Quartz.csproj" />
<ProjectReference Include="..\..\..\..\core\Elsa\Elsa.csproj" />
<ProjectReference Include="..\..\..\..\designer\bindings\aspnet\Elsa.Designer.Components.Web\Elsa.Designer.Components.Web.csproj" />
<ProjectReference Include="..\..\..\..\persistence\Elsa.Persistence.EntityFramework\Elsa.Persistence.EntityFramework.Sqlite\Elsa.Persistence.EntityFramework.Sqlite.csproj" />
<ProjectReference Include="..\..\..\..\server\Elsa.Server.Api\Elsa.Server.Api.csproj" />
<ProjectReference Include="..\..\..\persistence\Elsa.Samples.Persistence.EntityFramework\Elsa.Samples.Persistence.EntityFramework.csproj" />
</ItemGroup>
</Project>