我在Windows Server 2012 64位上安装了 RabbitMQ 。
我测试了发布和使用大量数据的部件一切都很好,我面临的唯一问题是RabbitMQServer重启后队列中的消息会丢失。
我正在使用RabbitMQ的VB.Net SDK。
我将Queue Declare的"Durable"
属性设置为true,将DeliveryMode BasicQueueProperties to "2"
设置为使Message持久化。但是在服务器重启后,消息仍然丢失了。
我怎样才能克服这个?
答案 0 :(得分:4)
https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html
在这个页面上,RabbitMQ上的消息持久性表现良好:
此时我们确定task_queue队列甚至不会丢失 如果RabbitMQ重新启动。现在我们需要将我们的消息标记为持久性 - 通过将IBasicProperties.SetPersistent设置为true。
var properties = channel.CreateBasicProperties();
properties.SetPersistent(true);
关于消息持久性的注释
将消息标记为持久性并不能完全保证消息 不会迷路。虽然它告诉RabbitMQ将消息保存到磁盘, RabbitMQ接受了一个短暂的时间窗口 消息并没有保存它。另外,RabbitMQ不做fsync(2) 对于每条消息 - 它可能只是保存到缓存而不是真的 写入磁盘。持久性保证并不强大,但是 它对我们简单的任务队列来说已经绰绰有余了。如果你需要一个 更强的保证然后您可以使用发布者确认。