elsa-core/src/modules/Elsa.MassTransit/Implementations/MassTransitWorkflowDispatcher.cs
Sipke Schoorstra 21e438bdd1
Add Azure Service Bus for MassTransit (#4624)
* Split RabbitMQ from MassTransit and add Azure Service Bus package

* Use Send topology for commands
2023-11-15 20:47:11 +01:00

80 lines
2.6 KiB
C#

using Elsa.MassTransit.Messages;
using Elsa.Workflows.Runtime.Contracts;
using Elsa.Workflows.Runtime.Requests;
using MassTransit;
namespace Elsa.MassTransit.Implementations;
/// <summary>
/// Implements <see cref="IWorkflowDispatcher"/> by leveraging MassTransit.
/// </summary>
public class MassTransitWorkflowDispatcher : IWorkflowDispatcher
{
private readonly IBus _bus;
/// <summary>
/// Constructor.
/// </summary>
public MassTransitWorkflowDispatcher(IBus bus)
{
_bus = bus;
}
/// <inheritdoc />
public async Task<DispatchWorkflowDefinitionResponse> DispatchAsync(DispatchWorkflowDefinitionRequest request, CancellationToken cancellationToken = default)
{
await _bus.Send(new DispatchWorkflowDefinition(
request.DefinitionId,
request.VersionOptions,
request.Input,
request.CorrelationId,
request.InstanceId,
request.TriggerActivityId
), cancellationToken);
return new();
}
/// <inheritdoc />
public async Task<DispatchWorkflowInstanceResponse> DispatchAsync(DispatchWorkflowInstanceRequest request, CancellationToken cancellationToken = default)
{
await _bus.Send(new DispatchWorkflowInstance(
request.InstanceId,
request.BookmarkId,
request.ActivityId,
request.ActivityNodeId,
request.ActivityInstanceId,
request.ActivityHash,
request.Input,
request.CorrelationId
), cancellationToken);
return new();
}
/// <inheritdoc />
public async Task<DispatchTriggerWorkflowsResponse> DispatchAsync(DispatchTriggerWorkflowsRequest request, CancellationToken cancellationToken = default)
{
await _bus.Send(new DispatchTriggerWorkflows(
request.ActivityTypeName,
request.BookmarkPayload,
request.CorrelationId,
request.WorkflowInstanceId,
request.ActivityInstanceId,
request.Input
), cancellationToken);
return new();
}
/// <inheritdoc />
public async Task<DispatchResumeWorkflowsResponse> DispatchAsync(DispatchResumeWorkflowsRequest request, CancellationToken cancellationToken = default)
{
await _bus.Send(new DispatchResumeWorkflows(
request.ActivityTypeName,
request.BookmarkPayload,
request.CorrelationId,
request.WorkflowInstanceId,
request.ActivityInstanceId,
request.Input
), cancellationToken);
return new();
}
}