Exemplo n.º 1
0
        /// <summary>
        /// Run service bus and start input endpoint observing
        /// </summary>
        public void Run()
        {
            // Registration of endpoints
            foreach (var endpoint in _endpointMapping.Endpoints)
            {
                if (TransportRegistry.GetQueueProvider(endpoint.Address) == null)
                {
                    TransportRegistry.Register(endpoint.Address, endpoint.Transport ?? _provider);
                }
            }

            // Check existence of input and error endpoint and create them if needed
            PrepareQueues();

            // Create dispatcher
            _dispatcher = new Dispatcher(_configuration.DispatcherConfiguration);

            // Open error queue
            _errorTransportEndpoint = _provider.OpenEndpoint(_errorTransportEndpointAddress);

            // Create and configure observer of input queue
            _transportEndpointObserver = _provider.CreateObserver(_inputTransportEndpointAddress);
            _transportEndpointObserver.MessageReceived += EndpointObserverMessageReceived;
            _transportEndpointObserver.Start();

            // Set servise bus state into Running state
            _status = ServiceBusStatus.Running;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Handle messages that were received from input endpoint
        /// Method can be called from different threads.
        /// </summary>
        private void EndpointObserverMessageReceived(TransportMessage transportMessage, ITransportEndpointObserver transportEndpointObserver)
        {
            try
            {
                // Translate to Transport message
                var serviceBusMessage = transportEndpointObserver.Transport.TranslateToServiceBusMessage(transportMessage);

                // Ignore transport messages without messages
                if (serviceBusMessage.Messages == null && serviceBusMessage.Messages.Length < 1)
                {
                    return;
                }

                // Dispatch each message (synchronously)
                foreach (var message in serviceBusMessage.Messages)
                {
                    _dispatcher.Dispatch(message);
                }
            }
            catch (DispatchingException dispatchingException)
            {
                _lastException = dispatchingException;
                _log.ErrorException("Dispatching exception. See logs for more details.", dispatchingException);
                _errorTransportEndpoint.Send(transportMessage);
            }
            catch (HandlerException handlerException)
            {
                _lastException = handlerException;
                _log.ErrorException("Message handling failed.", handlerException);
                _errorTransportEndpoint.Send(transportMessage);
            }
            catch (TransportMessageDeserializationException deserializationException)
            {
                _lastException = deserializationException;
                _log.ErrorException("Unable to deserialize message #" + transportMessage.MessageId, deserializationException);
                _errorTransportEndpoint.Send(transportMessage);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Run service bus and start input endpoint observing
        /// </summary>
        public void Run()
        {
            // Registration of endpoints
            foreach (var endpoint in _endpointMapping.Endpoints)
            {
                if (TransportRegistry.GetQueueProvider(endpoint.Address) == null)
                    TransportRegistry.Register(endpoint.Address, endpoint.Transport ?? _provider);
            }

            // Check existence of input and error endpoint and create them if needed
            PrepareQueues();

            // Create dispatcher
            _dispatcher = new Dispatcher(_configuration.DispatcherConfiguration);

            // Open error queue
            _errorTransportEndpoint = _provider.OpenEndpoint(_errorTransportEndpointAddress);

            // Create and configure observer of input queue
            _transportEndpointObserver = _provider.CreateObserver(_inputTransportEndpointAddress);
            _transportEndpointObserver.MessageReceived += EndpointObserverMessageReceived;
            _transportEndpointObserver.Start();

            // Set servise bus state into Running state 
            _status = ServiceBusStatus.Running;
        }
Exemplo n.º 4
0
        /// <summary>
        /// Handle messages that were received from input endpoint
        /// Method can be called from different threads.
        /// </summary>
        private void EndpointObserverMessageReceived(TransportMessage transportMessage, ITransportEndpointObserver transportEndpointObserver)
        {
            try
            {
                // Translate to Transport message
                var serviceBusMessage = transportEndpointObserver.Transport.TranslateToServiceBusMessage(transportMessage);

                // Ignore transport messages without messages
                if (serviceBusMessage.Messages == null && serviceBusMessage.Messages.Length < 1)
                    return;

                // Dispatch each message (synchronously)
                foreach (var message in serviceBusMessage.Messages)
                {
                    _dispatcher.Dispatch(message);
                }
            }
            catch (DispatchingException dispatchingException)
            {
                _lastException = dispatchingException;
                _log.ErrorException("Dispatching exception. See logs for more details.", dispatchingException);
                _errorTransportEndpoint.Send(transportMessage);
            }
            catch (HandlerException handlerException)
            {
                _lastException = handlerException;
                _log.ErrorException("Message handling failed.", handlerException);
                _errorTransportEndpoint.Send(transportMessage);
            }
            catch (TransportMessageDeserializationException deserializationException)
            {
                _lastException = deserializationException;
                _log.ErrorException("Unable to deserialize message #" + transportMessage.MessageId, deserializationException);
                _errorTransportEndpoint.Send(transportMessage);
            }
        }