【问题标题】:How to programmatically resend messages that have faulted with EasyNetQ?如何以编程方式重新发送 EasyNetQ 出现故障的消息?
【发布时间】:2019-06-01 05:17:51
【问题描述】:

我想知道如何在不使用 HosePipe 的情况下以编程方式重新发送 EasyNetQ 出现故障的消息,即使用其原始发送交换重新发送到其原始目标队列。

有可能吗,怎么做?

【问题讨论】:

    标签: c# .net-core rabbitmq easynetq


    【解决方案1】:

    我想出的解决办法是:

    public static class AdvancedBusExtensions
    {
        public static async Task ResendErrorsAsync(this IAdvancedBus source, string errorQueueName)
        {
            var errorQueue = await source.QueueDeclareAsync(errorQueueName);
            var message = await source.GetMessageAsync(errorQueue);
            while (message != null)
            {
                var utf8Body = Encoding.UTF8.GetString(message.Body);
                var error = JsonConvert.DeserializeObject<Error>(utf8Body);
                var errorBodyBytes = Encoding.UTF8.GetBytes(error.Message);
                var exchange = await source.ExchangeDeclareAsync(error.Exchange, x =>
                {
                    // This can be adjusted to fit the exchange actual configuration 
                    x.AsDurable(true);
                    x.AsAutoDelete(false);
                    x.WithType("topic");
                });
                await source.PublishAsync(exchange, error.RoutingKey, true, error.BasicProperties, errorBodyBytes);
                message = await source.GetMessageAsync(errorQueue);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2015-09-25
      • 2018-09-14
      • 1970-01-01
      相关资源
      最近更新 更多