public static void CloseMessageConsumer(RC.IModel channel, List <string> consumerTags, bool transactional, ILogger logger = null) { if (!channel.IsOpen) { return; } try { foreach (var consumerTag in consumerTags) { Cancel(channel, consumerTag); } if (transactional) { // Re-queue in-flight messages if any (after the consumer is cancelled to prevent the broker from simply // sending them back to us). Does not require a tx.commit. channel.BasicRecover(true); } // If not transactional then we are auto-acking (at least as of 1.0.0.M2) so there is nothing to recover. // Messages are going to be lost in general. } catch (Exception ex) { logger?.LogError(ex, "Exception during CloseMessageConsumer"); throw RabbitExceptionTranslator.ConvertRabbitAccessException(ex); } }