Beispiel #1
0
 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());
 }
Beispiel #2
0
 public virtual Task OnMulticastRequestHandlerSuccess <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, NimbusMessage nimbusMessage)
     where TBusRequest : IBusMulticastRequest <TBusRequest, TBusResponse>
     where TBusResponse : IBusMulticastResponse
 {
     return(CompletedTask);
 }
Beispiel #3
0
 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);
            }
        }
Beispiel #7
0
 public virtual Task OnMulticastRequestHandlerExecuting <TBusRequest, TBusResponse>(IBusMulticastRequest <TBusRequest, TBusResponse> busRequest, BrokeredMessage brokeredMessage)
     where TBusRequest : IBusMulticastRequest <TBusRequest, TBusResponse>
     where TBusResponse : IBusMulticastResponse
 {
     return(CompletedTask);
 }
Beispiel #8
0
 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());
 }
Beispiel #9
0
 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);
 }