7

私は、RabbitMQ を使用してメッセージを送受信する小さなアプリを作成しています。すべて正常に動作していますが、メッセージの持続性に苦労しています。

サーバーを再起動してもメッセージがキューに残るようにしたい。交換レベルとキュー レベルでの持続性の概念を理解し、それらを true に設定しました (むしろ、デフォルトで true になっています)。したがって、RabbitMQ サーバーを再起動すると、交換とキューはそのまま残りますが、キュー内のメッセージは削除されます。

EasyNetQ.IBus インターフェイスを使用してメッセージを送信しています。

ありがとう

4

3 に答える 3

7

RabbitMQ.Client を使用すると、IModel.CreateBasicProperties() メソッドを使用して取得できる IBasicProperties を使用して配信モードを設定できます。

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.Persistent = true; // or props.DeliveryMode = 2;

    channel.BasicPublish(exchange, routingKey, props, Encoding.Default.GetBytes(message));
}
于 2016-11-22T17:58:56.010 に答える