2017-12-01 6 views
1

私は以下のプロデューサーコードを持っています。RabbitMQ basic_publishは非同期ですか?

メッセージは、いくつかの計算後に得られたdictデータです。私はメッセージをキューに公開したいと思います。その後、というメッセージを他の計算のために空のdictにリセットしました。しかし、消費者は常にキューから空のdictを得ています。私はメッセージが公開される前にリセットされていると感じています(非同期ですか?)。どのように同期させるには?

message = {a big dict ...} 
channel.basic_publish(exchange='', 
          routing_key='my_queue', 
          body=json.dumps(message)) 
message = {} 

答えて

1

はい、channel.basic_publishは非同期です。このように正しいです。

channel.basic_publish挿入時間を待っていません。それ以外の場合は遅くなります。

メッセージを処理する方法を変更する必要があります。 ただし、としたい場合はトランザクションを使用できます。

channel.tx_select 
channel.basic_publish(exchange='', 
          routing_key='my_queue', 
          body=json.dumps(message)) 
channel.tx_commit 

トランザクションはパフォーマンスを落とすことができます。

のようなものでなければなりません。

Read here詳細

関連する問題