AMQP にメッセージを送信するときに、交換が存在しないかどうかを検出できるようにしたいと考えています。
次の例を検討してください。
#!/usr/bin/python
import amqp
from time import sleep
conn = amqp.Connection(host="localhost:5672", userid="guest", password="guest", virtual_host="/")
outgoing = conn.channel()
message = amqp.Message("x")
while True:
print "publish message."
outgoing.basic_publish(message,exchange="non-existing",routing_key="fubar")
sleep(1)
このスクリプトは取引所への公開を続けますが、取引所が存在しない場合でもエラーは発生しません。交換が存在する場合、メッセージが到着します。
#!/usr/bin/python
import amqp
from time import sleep
conn = amqp.Connection(host="localhost:5672", userid="guest", password="guest", virtual_host="/")
outgoing = conn.channel()
message = amqp.Message("x")
while True:
print "publish message."
outgoing.basic_publish(message,exchange="non-existing",routing_key="fubar")
outgoing.wait()
sleep(1)
私が Outing.wait() を追加すると、 amqp.exceptions.NotFound が発生します。これは私が望むものです。ただし、問題は、この場合に交換が存在する場合、メッセージは到着しますが、outinging.wait() がループをブロックすることです。(別のスレッドで outside.wait() を実行することもできますが、実行したくありません。)
これに対処する方法は?
アドバイスのヒントポインタは大歓迎です
ありがとう、
ジェイ