using Elsa.MassTransit.Activities; using Elsa.Workflows.Helpers; using Elsa.Workflows.Runtime.Contracts; using Elsa.Workflows.Runtime.Requests; using MassTransit; namespace Elsa.MassTransit.Consumers; /// /// A consumer of various dispatch message types to asynchronously execute workflows. /// public class WorkflowMessageConsumer : IConsumer where T : class { private readonly IWorkflowDispatcher _workflowRuntime; /// /// Constructor. /// public WorkflowMessageConsumer(IWorkflowDispatcher workflowRuntime) { _workflowRuntime = workflowRuntime; } /// public async Task Consume(ConsumeContext context) { var cancellationToken = context.CancellationToken; var messageType = typeof(T); var message = context.Message; var activityTypeName = ActivityTypeNameHelper.GenerateTypeName(messageType); var bookmark = new MessageReceivedBookmarkPayload(messageType); var correlationId = context.CorrelationId?.ToString(); var input = new Dictionary { [MessageReceived.InputKey] = message }; var request = new DispatchTriggerWorkflowsRequest(activityTypeName, bookmark) { CorrelationId = correlationId, Input = input }; await _workflowRuntime.DispatchAsync(request, cancellationToken: cancellationToken); } }