public Task <IEnumerable <TResponse> > MulticastRequest <TRequest, TResponse>(IBusMulticastRequest <TRequest, TResponse> busRequest, TimeSpan timeout) where TRequest : IBusMulticastRequest <TRequest, TResponse> where TResponse : IBusMulticastResponse { return(Task.Run(() => _multicastRequestSender.SendRequest(busRequest, timeout)).ConfigureAwaitFalse()); }
public virtual Task OnMulticastRequestHandlerSuccess <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, NimbusMessage nimbusMessage) where TBusRequest : IBusMulticastRequest <TBusRequest, TBusResponse> where TBusResponse : IBusMulticastResponse { return(CompletedTask); }
public virtual Task OnMulticastRequestHandlerError <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, NimbusMessage nimbusMessage, Exception exception) where TBusRequest : IBusMulticastRequest <TBusRequest, TBusResponse> where TBusResponse : IBusMulticastResponse { return(CompletedTask); }
public virtual async Task OnMulticastRequestSent <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, NimbusMessage nimbusMessage) where TBusRequest : IBusMulticastRequest <TBusRequest, TBusResponse> where TBusResponse : IBusMulticastResponse { }
public virtual async Task OnMulticastRequestSendingError <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, NimbusMessage nimbusMessage, Exception exception) where TBusRequest : IBusMulticastRequest <TBusRequest, TBusResponse> where TBusResponse : IBusMulticastResponse { }
public async Task <IEnumerable <TResponse> > SendRequest <TRequest, TResponse>(IBusMulticastRequest <TRequest, TResponse> busRequest, TimeSpan timeout) where TRequest : IBusMulticastRequest <TRequest, TResponse> where TResponse : IBusMulticastResponse { var requestType = busRequest.GetType(); _knownMessageTypeVerifier.AssertValidMessageType(requestType); var topicPath = _router.Route(requestType, QueueOrTopic.Topic, _pathFactory); var nimbusMessage = (await _nimbusMessageFactory.Create(topicPath, busRequest)) .WithRequestTimeout(timeout) .DestinedForTopic(topicPath) ; DispatchLoggingContext.NimbusMessage = nimbusMessage; var expiresAfter = _clock.UtcNow.AddSafely(timeout); var responseCorrelationWrapper = _requestResponseCorrelator.RecordMulticastRequest <TResponse>(nimbusMessage.MessageId, expiresAfter); var sw = Stopwatch.StartNew(); using (var scope = _dependencyResolver.CreateChildScope()) { Exception exception; var interceptors = _outboundInterceptorFactory.CreateInterceptors(scope, nimbusMessage); try { _logger.LogDispatchAction("Sending", topicPath, sw.Elapsed); var sender = _transport.GetTopicSender(topicPath); foreach (var interceptor in interceptors) { await interceptor.OnMulticastRequestSending(busRequest, nimbusMessage); } await sender.Send(nimbusMessage); foreach (var interceptor in interceptors.Reverse()) { await interceptor.OnMulticastRequestSent(busRequest, nimbusMessage); } _logger.LogDispatchAction("Sent", topicPath, sw.Elapsed); _logger.LogDispatchAction("Waiting for responses to", topicPath, sw.Elapsed); var responsesEnumerable = responseCorrelationWrapper.ReturnResponsesOpportunistically(timeout); return(responsesEnumerable); } catch (Exception exc) { exception = exc; } foreach (var interceptor in interceptors.Reverse()) { await interceptor.OnMulticastRequestSendingError(busRequest, nimbusMessage, exception); } _logger.LogDispatchError("sending", topicPath, sw.Elapsed, exception); ExceptionDispatchInfo.Capture(exception).Throw(); return(null); } }
public virtual Task OnMulticastRequestHandlerExecuting <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, BrokeredMessage brokeredMessage) where TBusRequest : IBusMulticastRequest <TBusRequest, TBusResponse> where TBusResponse : IBusMulticastResponse { return(CompletedTask); }
public Task <IEnumerable <TResponse> > MulticastRequest <TRequest, TResponse>(IBusMulticastRequest <TRequest, TResponse> busRequest, TimeSpan timeout) where TRequest : IBusMulticastRequest <TRequest, TResponse> where TResponse : IBusMulticastResponse { return(_taskFactory.StartNew(() => _multicastRequestSender.SendRequest(busRequest, timeout), TaskContext.Send).Unwrap()); }
public virtual async Task OnMulticastRequestSending <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, BrokeredMessage brokeredMessage) where TBusRequest : IBusMulticastRequest <TBusRequest, TBusResponse> where TBusResponse : IBusMulticastResponse { }
public override async Task OnMulticastRequestSent <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, NimbusMessage nimbusMessage) { var auditEvent = CreateAuditEvent(busRequest, nimbusMessage); await Bus.Publish(auditEvent); }