Пример #1
0
        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);
        }
Пример #2
0
        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()
                                                                         ));
        }
Пример #3
0
        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()
                                     ));
        }
Пример #4
0
        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);
        }
Пример #5
0
        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));
        }
Пример #6
0
        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);
        }