Esempio n. 1
0
            /// <summary>
            /// Initializes a new instance of the <see cref="SagaFlow"/> class.
            /// </summary>
            /// <param name="repository">Saga repository</param>
            /// <param name="log">Log service</param>
            /// <param name="messageQueue">Message queue service</param>
            public SagaFlow(IEsRepository <ISaga> repository, ILog log, IMessageQueue messageQueue)
                : base(Configuration.DataflowOptions)
            {
                _repository = repository;
                _log        = log;

                var block = new ActionBlock <IEvent>(
                    async e =>
                {
                    await Handle(e);
                    await messageQueue.CompleteMessage(e);
                }, DataflowOptions.ToDataflowBlockOptions(false));     // .ToExecutionBlockOption());

                RegisterChild(block);
                InputBlock = block;
            }
Esempio n. 2
0
        /// <inheritdoc />
        public async Task Handle(RequestJson command)
        {
            command.EventType = "JsonRequest";
            var res = await _connector.SubmitRequest(command.Url);

            var alert = new JsonRequestSubmitted(command.Target, command.Url)
            {
                Timeline = command.Timeline
            };

            _messageQueue.Alert(alert);
            _messageQueue.UncompleteMessage(alert);
            res.ContinueWith(r =>
            {
                _messageQueue.CompleteMessage(alert);
                _messageQueue.Alert(new JsonRequestCompleted(command.Target, command.Url, r.Result));
            });
        }