为了避免在队列读取器进程崩溃的情况下数据丢失,我们需要从RabbitMQ获取未确认的消息 . 对于每1000条消息,我们将消息数据提交到磁盘,然后可以将这些消息标记为已确认和已消耗 . 有没有办法让他们不被承认,然后专门针对那些我们刚刚得到的?例如,我们可以将它们添加到列表中,然后遍历该列表以查找消息吗?这是在RabbitMQ .net FYI .
是的,您可以使用来自RabbitMQ的消息并明确地确认您成功处理的消息 . 您可以在the second tutorial on RabbitMQ website中找到完整的示例 . 但这是本教程的相关部分:
noAck
channel.BasicConsume(queue: "task_queue", noAck: false, consumer: consumer);
channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
您可以确认一条消息( multiple 为false),或者包含此消息的所有消息( multiple 为真) .
multiple
您也可以"unacknowledge" messages,因此RabbitMQ可以将其重新排队并将其发送给另一名工作人员 . 与确认一样,您可以判断是否要取消确认一条或所有消息 . 此外,您可以将 requeue 标志设置为true或false,以指示是否应该重新排队或删除该消息 .
requeue
1 回答
是的,您可以使用来自RabbitMQ的消息并明确地确认您成功处理的消息 . 您可以在the second tutorial on RabbitMQ website中找到完整的示例 . 但这是本教程的相关部分:
noAck
("no manual ack")设置为false,这样.NET客户端库就不会自动获取消息:您可以确认一条消息(
multiple
为false),或者包含此消息的所有消息(multiple
为真) .您也可以"unacknowledge" messages,因此RabbitMQ可以将其重新排队并将其发送给另一名工作人员 . 与确认一样,您可以判断是否要取消确认一条或所有消息 . 此外,您可以将
requeue
标志设置为true或false,以指示是否应该重新排队或删除该消息 .