Exemplo n.º 1
0
        /// <summary>
        /// Reads messages off a queue as they arrive, deserializes them into the
        /// specified type T and invokes registered handlers. This operation is
        /// asynchnronous meaning registered handlers will be invoked on the
        /// background thread.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public void ReceiveAsync <T>()
        {
            if (_readQueue == null || !_readQueue.IsInitialized)
            {
                throw new BusException("Bus has not been configured for receiving messages. Did you forget to call DefineReadQueue on BusBuilder?");
            }

            _readQueue.ReceiveAsync(message => {
                var context = new ReadMessageContext(_errorQueue, _readQueue);
                var receiveMessageHandler     = new ReceiveMessageHandler <T>(_handlers, _config, _logger);
                var retryAspect               = new RetryAspect(receiveMessageHandler, _config, _logger);
                var removeFromReadQueueAspect = new RemoveFromReadQueueAspect(retryAspect, context, _config, _logger);
                var moveToErrorQueueAspect    = new MoveToErrorQueueAspect(removeFromReadQueueAspect, context, _config, _logger);
                var loggingAspect             = new LoggingAspect(moveToErrorQueueAspect, ReceiveOperation, _logger);
                var transactionAspect         = new TransactionAspect(loggingAspect, _logger);
                var discardAspect             = new DiscardFailuresAspect(transactionAspect, _config, _logger);
                var failFastAspect            = new FailFastAspect(discardAspect, _config, _logger);
                failFastAspect.Handle(message);

                if (failFastAspect.Failed)
                {
                    _readQueue.StopReceiveAsync();
                }
            });
        }
Exemplo n.º 2
0
        /// <summary>
        /// Read messages containg the given type T off the defined
        /// error queue and moves them to the user defined read queue
        /// </summary>
        public void ReturnErrorMessages()
        {
            if ((_errorQueue == null || !_errorQueue.IsInitialized) || (_readQueue == null || !_readQueue.IsInitialized))
            {
                throw new BusException("Bus has not been configured for returning messages to the read queue. Did you forget to call DefineReadQueue and/or DeineErrorQueue on BusBuilder?");
            }

            foreach (Message message in _errorQueue.GetAllMessages())
            {
                var context = new ReadMessageContext(_errorQueue, _readQueue);
                var returnToSourceHandler = new ReturnToSourceHandler(context, _logger);
                var loggingAspect         = new LoggingAspect(returnToSourceHandler, ReturnOperation, _logger);
                loggingAspect.Handle(message);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Reads messages off a queue, deserializes them into the
        /// specified type T and invokes registered handlers. Useful when
        /// you want to control when messages are processed i.e. at a set
        /// time every day, for example.
        /// </summary>
        public void Receive <T>()
        {
            if (_readQueue == null || !_readQueue.IsInitialized)
            {
                throw new BusException("Bus has not been configured for receiving messages. Did you forget to call DefineReadQueue on BusBuilder?");
            }

            foreach (Message message in _readQueue.GetAllMessages())
            {
                var context = new ReadMessageContext(_errorQueue, _readQueue);
                var receiveMessageHandler     = new ReceiveMessageHandler <T>(_handlers, _config, _logger);
                var retryAspect               = new RetryAspect(receiveMessageHandler, _config, _logger);
                var removeFromReadQueueAspect = new RemoveFromReadQueueAspect(retryAspect, context, _logger);
                var moveToErrorQueueAspect    = new MoveToErrorQueueAspect(removeFromReadQueueAspect, context, _logger);
                var loggingAspect             = new LoggingAspect(moveToErrorQueueAspect, ReceiveOperation, _logger);
                var transactionAspect         = new TransactionAspect(loggingAspect, _logger);
                transactionAspect.Handle(message);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Read specific message off the defined error queue and move it to the user defined read queue
        /// </summary>
        public void ReturnErrorMessage(string id)
        {
            if ((_errorQueue == null || !_errorQueue.IsInitialized) || (_readQueue == null || !_readQueue.IsInitialized))
            {
                throw new BusException("Bus has not been configured for returning messages to the read queue. Did you forget to call DefineReadQueue and/or DeineErrorQueue on BusBuilder?");
            }

            try
            {
                Message message = _errorQueue.GetMessageBy(id);
                var     context = new ReadMessageContext(_errorQueue, _readQueue);
                var     returnToSourceHandler = new ReturnToSourceHandler(context, _logger);
                var     loggingAspect         = new LoggingAspect(returnToSourceHandler, ReturnOperation, _logger);
                loggingAspect.Handle(message);
            }
            catch (Exception)
            {
                throw new BusException(String.Format("Message with id {0} was not found on the error queue", id));
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Read messages containing the given type T off the defined
        /// error queue and moves them to the user defined read queue
        /// </summary>
        public void ReturnAllErrorMessages()
        {
            if ((_errorQueue == null || !_errorQueue.IsInitialized) || (_readQueue == null || !_readQueue.IsInitialized))
            {
                throw new BusException("Bus has not been configured for returning messages to the read queue. Did you forget to call DefineReadQueue and/or DeineErrorQueue on BusBuilder?");
            }

            try
            {
                foreach (Message message in _errorQueue.GetAllMessages())
                {
                    var context = new ReadMessageContext(_errorQueue, _readQueue);
                    var returnToSourceHandler = new ReturnToSourceHandler(context, _logger);
                    var loggingAspect         = new LoggingAspect(returnToSourceHandler, ReturnOperation, _logger);
                    loggingAspect.Handle(message);
                }
            }
            catch (Exception ex)
            {
                throw new BusException(String.Format("A problem occurred retreiving messages from the error queue: {0}", ex));
            }
        }