c# - 如何在 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)。但我不知道它是如何工作的。欢迎大家讨论和学习。如果我错了请纠正我,谢谢
解决方案
推荐阅读
- vba - 如何在 Power BI 中制作条件列
- javascript - 将数据属性添加到 select2 中的实际选择选项中
- javascript - 动态更新 Vue 路由参数
- python-3.x - 为什么不在 Python 中显示我的图像根目录?
- javascript - 关于 AWS Lambda RDS + dynamoDB 在同一个函数中查询的基本 JS 问题
- java - java - 如何在java中将字符串从字符串中的一个特定单词拆分为同一字符串中的另一个特定单词?
- python - print() IndentationError: python 语言
- currency - 欧洲央行对欧元的官方美元汇率
- node.js - 在nodejs中使用(mocha,chai)进行错误单元测试
- entity-framework-6 - Enable-Migrations 命令导致 Entity Framework 6.4.0 出错