1

私は最近、メッセージを遅らせることができるRabbitMQ機能を発見しました。必要なものに似た例は見つかりませんでしたが、うまく機能します。

A、B、C の 3 種類のメッセージがあるとします。1 時間と 2 時間の値を持つ 2 つの delay_queue があり'x-message-ttlます。また、destination_queues には 3 つのタイプがあり、それぞれが特定のメッセージ タイプに対応しています。

私が達成したいのは、delay_queues の 1 つのメッセージが TTL に達した後、そのタイプに応じて destination_queues の 1 つにルーティングされることです。このようなもの:

ここに画像の説明を入力

これは、RabbitMQ メッセージ プロパティを使用しても可能ですか? 何か案は?メッセージを遅延キューに送信するコード (有効期限が切れると、hello キューに送信されます):

#!/usr/bin/env python
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters(
               'localhost'))

channel = connection.channel()
channel.confirm_delivery()
channel.queue_declare(queue='hello', durable=True)

channel.queue_bind(exchange='amq.direct',
                   queue='hello')

delay_channel = connection.channel()
delay_channel.confirm_delivery()

delay_channel.queue_declare(queue='hello_delay', durable=True,  arguments={
  'x-message-ttl' : 3600000,
  'x-dead-letter-exchange' : 'amq.direct',
  'x-dead-letter-routing-key' : 'hello'
})

while 1 :
        delay_channel.basic_publish(exchange='',
                      routing_key='hello_delay',
                      body="test",
                      properties=pika.BasicProperties(delivery_mode=2))
        print "Sent to delay queue"
4

3 に答える 3

2

課された TTL に達したためにメッセージが期限切れになると、デッドレター交換にリダイレクトできます。これは、期限切れになった後にメッセージを別のキューに移動するために暗黙的に使用していると思います。

メッセージの元のルーティング キー、または最終的には "CC" および "BCC" メッセージ ヘッダーを使用して、さまざまな宛先キューを選択できます。

于 2015-05-28T08:27:06.290 に答える