RabbitMQ中的消息持久性

时间:2015-09-22 14:28:54

标签: c# rabbitmq easynetq

我正在编写一个小应用程序,我正在使用RabbitMQ发送/接收消息。一切正常,但我正在努力解决消息持久性问题。

我希望即使在服务器重启中,消息也会保留在队列中。我理解交换和队列级别的持久性概念,并将它们设置为true(而不是默认为true)。因此,当我重新启动RabbitMQ服务器时,交换和队列保持不变,但队列中的消息将被删除。

我正在使用EasyNetQ.IBus接口发送消息。

谢谢

2 个答案:

答案 0 :(得分:5)

使用RabbitMQ.Client,您可以使用IBasicProperties设置传递模式,可以使用IModel.CreateBasicProperties()方法获取。

        using (IConnection conn = factory.CreateConnection())
        using (IModel channel = conn.CreateModel())
        {
            channel.ExchangeDeclare(exchange, ExchangeType.Direct, durable: true);
            channel.QueueDeclare(queue, durable: true, exclusive: false, autoDelete: false, arguments: null);
            channel.QueueBind(queue, exchange, routingKey, null);

            var props = channel.CreateBasicProperties();
            props.DeliveryMode = 2;

            channel.BasicPublish(exchange, routingKey, props, Encoding.Default.GetBytes(message));
        }

答案 1 :(得分:2)

为了让你的消息在RabbitMQ中持久化。

您需要在代码中添加MessageProperties.PERSISTENT_TEXT_PLAIN

import com.rabbitmq.client.MessageProperties;

channel.basicPublish("", "task_queue",
        MessageProperties.PERSISTENT_TEXT_PLAIN,
        message.getBytes());