The basic RabbitMQ tutorial给出了如何从队列中不断获取消息的示例:在C#中,如何处理当前队列中的所有RabbitMQ消息?
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点的消息。
OR
- 如果我在13:00:00开始我的代码,它需要10秒钟,我的代码运行,我不介意,如果它包括在13:00:00和13:00:10之间放置在队列中的消息,只要队列一空就停止。
我意识到我可能会在我的邮件中添加一个时间戳并检查该邮件,或者我可以摆弄超时值,但我想知道是否有任何内置方法可以正确执行此操作。
在此先感谢。
从你的描述,它听起来就像排队是不正确的工具,队列为了缓冲消息,使得它们的生成速度比它们可以消耗的速度更快,队列不会被设计为在你决定处理它们之前持续消息。尽管RabitMQ支持持久队列,但这更多的是容错。您应该始终在队列中立即处理消息。如果您稍后想要对消息进行处理,则可以从某个持久性数据存储库(如数据库)中保存并检索它们。 – 2014-09-10 10:59:09
感谢您的评论,本。 – 2014-09-10 11:04:36
它听起来像一个MQ不是你的问题的解决方案。你可以做的是创建一个名为processQueue的布尔变量并将其设置为true。然后,进行处理并将该变量更新为false。 while循环将改为:while(processQueue){// ...} – 2014-09-10 11:10:41