/// <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; }
/// <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)); }); }