RabbitMQの永続性メカニズムには、キューの永続性、メッセージの永続性、および交換の永続性が含まれています。メッセージが永続的であるかどうかにかかわらず、ディスクに書き込むことができます。

永続メッセージはディスクとメモリの両方に書き込まれます(読み取りを高速化するため)。一方、非永続メッセージは、メモリが不足している場合にディスクに書き込まれます(RabbitMQが再起動されると失われます)。

RabbitMQキューの永続性

キューを宣言する際、キューが永続化される必要があるかどうかを設定できます。Golangでは、キューは次のように宣言されます:

q, err := ch.QueueDeclare(
  "hello", // キュー名
  true,   // キューを永続化するかどうか
  false,
  false,
  false,
  nil,
)

ヒント:他のプログラミング言語と同様に、キューは宣言する際に設定できます。

RabbitMQ交換の永続性

交換を宣言する際、プロパティを使用してそれが永続化されるかどうかを設定できます。Golangでは、以下のように宣言されます:

err = ch.ExchangeDeclare(
        "tizi365",   // 交換名
        "fanout", // 交換タイプ
        true,     // 永続化するかどうか
        false,    
        false,   
        false, 
        nil, 
    )

ヒント:他のプログラミング言語と同様に、交換を宣言する際に永続性を設定できます。

RabbitMQメッセージの永続性

メッセージを発行する際、メッセージのプロパティを使用してメッセージが永続化されるかどうかを設定できます。

ヒント:キューの永続性は、メッセージが自動的に永続的であることを意味しません。

Golangでは、メッセージは次のように発行されます:

err = ch.Publish(
			"tizi365",     // 交換
			"", // ルーティングキー
			false, 
			false,
			amqp.Publishing{
				DeliveryMode:2,  // メッセージの配信モード、1は非永続、2は永続
				ContentType: "text/plain",
				Body:        []byte(body),
			})