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