コード例 #1
0
        private bool CheckRetryLimit(long retryLimit, RabbitWorkMessage msg)
        {
            IBasicProperties properties = msg.BasicProperties;

            if (retryLimit <= 0)
            {
                return(true);
            }

            // check dead-letter counter (number of times the message was dlx)
            long count = msg.GetRetryCount();

            // check dlx count against our threshold
            if (count >= retryLimit)
            {
                // move message to dead-letter queue
                if (String.IsNullOrEmpty(deadLetterQueue))
                {
                    // create dead letter queue
                    lock (QueueName)
                    {
                        deadLetterQueue = QueueName + ".dead-letter";
                        deadLetterQueue = EnsureQueueExists(deadLetterQueue, Mode);
                    }
                }
                // publish message to the deadletter queue
                PublishChannel.BasicPublish("", deadLetterQueue, (IBasicProperties)properties.Clone(), msg.Body);
                // delete message
                Ack(msg);
                return(false);
            }
            return(true);
        }