首页 > 解决方案 > 如何在 RabbitMQ .NET 中处理发布确认

问题描述

我是 RabbitMQ 的新手。我需要知道如何在 .NET 中发布确认,因为我需要发送和接收来自客户端/服务器的响应。问题是我不知道如何正确处理发布确认。

 channel.ConfirmSelect();
 var outstandingConfirms = new ConcurrentDictionary<ulong, string>();

            void cleanOutstandingConfirms(ulong sequenceNumber, bool multiple)
            {
                if (multiple)
                {
                    var confirmed = outstandingConfirms.Where(k => k.Key <= sequenceNumber);
                    foreach (var entry in confirmed)
                        outstandingConfirms.TryRemove(entry.Key, out _);
                }
                else
                    outstandingConfirms.TryRemove(sequenceNumber, out _);
            }

            channel.BasicAcks += (sender, ea) => cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple);
            channel.BasicNacks += (sender, ea) =>
            {
                outstandingConfirms.TryGetValue(ea.DeliveryTag, out string body);
                Console.WriteLine($"Message with body {body} has been nack-ed. Sequence number: {ea.DeliveryTag}, multiple: {ea.Multiple}");
                cleanOutstandingConfirms(ea.DeliveryTag, ea.Multiple);
            };

            for (int i = 0; i < MESSAGE_COUNT; i++)
            {
                var body = i.ToString();
                outstandingConfirms.TryAdd(channel.NextPublishSeqNo, i.ToString());
                channel.BasicPublish("",
                routingKey: "****",
                basicProperties: null,
                body: Encoding.UTF8.GetBytes(body)); 
            }

消息已经到达后,我需要从客户端服务器接收响应。像“成功添加数据”

我从 rabbitmq 文档中得到这个(Handling Publisher Confirms Asynchronously)。但我不知道它是如何工作的。欢迎大家讨论和学习。如果我错了请纠正我,谢谢

标签: c#.netrabbitmqmessage-queueamqp

解决方案


推荐阅读