gpt4 book ai didi

c# - 在 C# 中,如何处理当前队列中的所有 RabbitMQ 消息?

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:30 25 4
gpt4 key购买 nike

The basic RabbitMQ tutorial给出了如何从队列中连续检索消息的示例:

var factory = new ConnectionFactory() { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("hello", false, false, false, null);

var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("hello", true, consumer);

Console.WriteLine(" [*] Waiting for messages." +
"To exit press CTRL+C");
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();

var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
}
}

我想做的是检索所有已放入队列的消息,然后停止。

这里有两个例子可以解决我的问题

  1. 如果我在下午 1 点开始我的代码,我想处理在下午 1 点之前放入队列的所有消息。

  1. 如果我在 13:00:00 开始我的代码,我的代码运行需要 10 秒,我不介意它是否包含在 13:00:00 和 13:00 之间放置在队列中的消息: 10、只要队列一空就停止。

我意识到我可以在我的消息中放置一个时间戳并检查它,或者我可以摆弄超时值,但我想知道是否有任何内置方法可以正确地做到这一点。

提前致谢。

最佳答案

从评论来看,RabbitMQ 似乎不适用于批处理,因此它并不是为此目的而设计的。

我还注意到,在测试 DequeueNoWait 方法或尝试使用零超时出队时,它们根本不起作用,只是返回 null。

以下解决方案使用 QueueDeclare 来获取现有消息的计数并且不需要时间戳或 hacky 超时:

var factory = new ConnectionFactory { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
var queueDeclareResponse = channel.QueueDeclare(Constants.QueueName, false, false, false, null);

var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume(Constants.QueueName, true, consumer);

Console.WriteLine(" [*] Processing existing messages.");

for (int i = 0; i < queueDeclareResponse.MessageCount; i++)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(" [x] Received {0}", message);
}
Console.WriteLine("Finished processing {0} messages.", queueDeclareResponse.MessageCount);
Console.ReadLine();
}
}

关于c# - 在 C# 中,如何处理当前队列中的所有 RabbitMQ 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25763439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com