Beispiel #1
0
        /// <inheritdoc />
        public virtual void DisposeMessageHandler(IMqMessageHandler messageHandler)
        {
            lock (this._handlerMap) {
                if (!this._isRunning)
                {
                    return;
                }

                var allHandlersAreDisposed = true;
                for (var i = 0; i < this._messageHandlers.Length; i++)
                {
                    if (this._messageHandlers[i] == messageHandler)
                    {
                        this._messageHandlers[i] = null;
                    }

                    allHandlersAreDisposed = allHandlersAreDisposed && this._messageHandlers[i] == null;
                }

                if (allHandlersAreDisposed)
                {
                    this.Stop();
                }
            }
        }
Beispiel #2
0
 public RabbitMqWorker(RabbitMqMessageFactory mqFactory,
                       IMqMessageHandler messageHandler, string queueName,
                       Action <RabbitMqWorker, Exception> errorHandler,
                       bool autoConnect = true)
 {
     this._mqFactory      = mqFactory;
     this._messageHandler = messageHandler;
     this.QueueName       = queueName;
     this.ErrorHandler    = errorHandler;
     this.AutoReconnect   = autoConnect;
 }
Beispiel #3
0
        private void DefaultInExceptionHandler(IMqMessageHandler mqHandler, IMqMessage <T> message, Exception ex)
        {
            this._logger.Error(ex, "Message exception handler threw an error.");

            var requeue = !(ex is UnRetryableMqMessagingException) &&
                          message.RetryAttempts < this._retryCount;

            if (requeue)
            {
                message.RetryAttempts++;
                this.TotalRetries++;
            }

            message.Error = new MqErrorStatus(ex);
            mqHandler.MqClient.Nak(message, requeue, ex);
        }