Ejemplo 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();
                }
            });
        }
Ejemplo n.º 2
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);
            }
        }
Ejemplo n.º 3
0
 public void RegisterReceiveMessageHandler(ReceiveMessageHandler handler)
 {
     this.MessageSentEvent += handler;
 }
Ejemplo n.º 4
0
            /// <summary>
            /// Initialize a new receiver
            /// </summary>
            /// <param name="queue">MSMQ Queue to listen to</param>
            /// <param name="handler">Delegate to call once we receive a message</param>
            public Receiver(MessageQueue queue, ReceiveMessageHandler handler)
            {
                _refcount++;
                _queue = queue;
                _queue.ReceiveCompleted += OnMessageReceived;
                _queue.MessageReadPropertyFilter.DestinationQueue = true;
                _handler = handler;

                ReceiveMessage();
            }
 protected virtual void OnMessageReceived(MessageReceiveEventArgs args)
 {
     ReceiveMessageHandler?.Invoke(this, args);
 }