【问题标题】:rabbitmq queue clear after restart重启后rabbitmq队列清除
【发布时间】:2015-06-13 18:03:57
【问题描述】:

我已经在 windows server 2012 64 Bit 上安装了 RabbitMQ

我用大数据测试了发布和消费部件一切都很好,我面临的唯一问题是 RabbitMQServer 重启后队列中的消息丢失了。

我正在使用 RabbitMQ 的 VB.Net SDK。

我将 Queue Declare 的 "Durable" 属性设置为 true,并将 DeliveryMode BasicQueueProperties to "2" 设置为持久消息。但是在我的服务器重新启动后,消息仍然丢失。

我该如何克服这个问题?

【问题讨论】:

  • 你在声明你的队列channel.QueueDeclare("queue", true, false, false, null); 即。独占和自动删除设置为假?如果是,请尝试使用 Web 控制台或 rabbitmqctl 检查您的队列属性

标签: vb.net rabbitmq queue restart


【解决方案1】:

https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html

在 RabbitMQ 上的这个页面消息持久性中,解释得很好:

此时我们确定即使 RabbitMQ 重启,task_queue 队列也不会丢失。现在我们需要将我们的消息标记为持久 - 通过将 IBasicProperties.Persistent 设置为 true。

var properties = channel.CreateBasicProperties();
properties.Persistent = true;
关于消息持久性的注意事项

将消息标记为持久性并不能完全保证消息 不会丢失。虽然它告诉 RabbitMQ 将消息保存到磁盘, 当 RabbitMQ 接受一个 消息,尚未保存。此外,RabbitMQ 不执行 fsync(2) 对于每条消息——它可能只是保存到缓存中而不是真的 写入磁盘。持久性保证并不强,但是 对于我们简单的任务队列来说已经绰绰有余了。如果你需要一个 更强的保证,然后您可以使用发布者确认。

【讨论】:

  • 感谢您与我们分享此内容。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 2018-08-04
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多