private async Task TriggerWorkflowsAsync(ServiceBusMessage message, CancellationToken cancellationToken) { var correlationId = message.CorrelationId; var model = new MessageModel { Body = message.Body.ToArray(), CorrelationId = message.CorrelationId, ContentType = message.ContentType, Label = message.Subject, To = message.To, MessageId = message.MessageId, PartitionKey = message.PartitionKey, ViaPartitionKey = message.TransactionPartitionKey, ReplyTo = message.ReplyTo, SessionId = message.SessionId, TimeToLive = message.TimeToLive, ReplyToSessionId = message.ReplyToSessionId, ScheduledEnqueueTimeUtc = message.ScheduledEnqueueTime.UtcDateTime, UserProperties = new Dictionary <string, object>(message.ApplicationProperties), }; var bookmark = new MessageReceivedBookmark(QueueOrTopic, Subscription); var launchContext = new WorkflowsQuery(ActivityType, bookmark, correlationId); using var scope = _serviceScopeFactory.CreateScope(); var workflowLaunchpad = scope.ServiceProvider.GetRequiredService <IWorkflowLaunchpad>(); await workflowLaunchpad.CollectAndDispatchWorkflowsAsync(launchContext, new WorkflowInput(model), cancellationToken); }
public async Task Consume(ConsumeContext <T> context) { var message = context.Message; var correlationId = default(Guid?); foreach (var item in CorrelationIdSelectors) { if (item.TryGetCorrelationId(message, out correlationId)) { break; } } var bookmark = new MessageReceivedBookmark { MessageType = message.GetType().Name, CorrelationId = correlationId.ToString() }; var trigger = new MessageReceivedBookmark { MessageType = message.GetType().Name }; await _workflowLaunchpad.CollectAndExecuteWorkflowsAsync(new CollectWorkflowsContext( nameof(ReceiveMassTransitMessage), bookmark, trigger, correlationId.ToString() )); }
public async Task Consume(ConsumeContext <T> context) { var message = context.Message; var correlationId = default(Guid?); foreach (var item in CorrelationIdSelectors) { if (item.TryGetCorrelationId(message, out correlationId)) { break; } } var bookmark = new MessageReceivedBookmark { MessageType = message.GetType().Name, CorrelationId = correlationId.ToString() }; var trigger = new MessageReceivedBookmark { MessageType = message.GetType().Name }; await _mediator.Send(new TriggerWorkflowsRequest( nameof(ReceiveMassTransitMessage), bookmark, trigger, message, correlationId.ToString() )); }
public async Task Consume(ConsumeContext <T> context) { var message = context.Message; var correlationId = default(Guid?); foreach (var item in CorrelationIdSelectors) { if (item.TryGetCorrelationId(message, out correlationId)) { break; } } var bookmark = new MessageReceivedBookmark { MessageType = message.GetType().Name }; var workflowQuery = new WorkflowsQuery( nameof(ReceiveMassTransitMessage), bookmark, correlationId.ToString() ); var workflowInput = new WorkflowInput { Input = message }; await _workflowLaunchpad.CollectAndExecuteWorkflowsAsync(workflowQuery, workflowInput, context.CancellationToken); }
private async Task TriggerWorkflowsAsync(TransportMessage message, CancellationToken cancellationToken) { //avoid handler being triggered earlier than workflow is suspended await Task.Delay(_delay, cancellationToken); var config = _client.Configuration; var bookmark = new MessageReceivedBookmark(config.ExchangeName, config.RoutingKey, config.ConnectionString, config.Headers); var launchContext = new WorkflowsQuery(ActivityType, bookmark); await _workflowLaunchpad.UseServiceAsync(service => service.CollectAndDispatchWorkflowsAsync(launchContext, new WorkflowInput(message), cancellationToken)); }
private async Task TriggerWorkflowsAsync(TransportMessage message, CancellationToken cancellationToken) { //avoid handler being triggered earlier than workflow is suspended await Task.Delay(_delay, cancellationToken); var config = _client.Configuration; var bookmark = new MessageReceivedBookmark(config.ExchangeName, config.RoutingKey, config.ConnectionString, config.Headers); var launchContext = new WorkflowsQuery(ActivityType, bookmark); using var scope = _scopeFactory.CreateScope(); var workflowLaunchpad = scope.ServiceProvider.GetRequiredService <IWorkflowLaunchpad>(); await workflowLaunchpad.CollectAndDispatchWorkflowsAsync(launchContext, new WorkflowInput(message), cancellationToken); }