2016-11-29 20 views
0

私はこのPHPライブラリhttps://github.com/jakubkulhan/bunnyの助けを借りてRabbitMQを使用していますが、今のところ私のコードは次のように動作します:キューには新しいメッセージを追加するクラスがあります。 :SmsQueueとSmsWorker。私は待ち行列ワーカー (例えばSmsWorker)をcronから実行しますが、それはすでに実行されていない場合にのみワーカーを実行したいということです。私は、RabbitMQに現在キューのアクティブな消費者がいるかどうかを確認する方法があると思っていましたが、見つけられませんでした。ここで解決策は何ですか、私はそれを正しくやっていますか?RabbitMQキューあたり1つのコンシューマ

P.S.私はちょうどRabbitMQを使い始めていて、それについてはあまり知らないので、それはちょっとした疑問です。

答えて

0

ノー、直接

、RabbitMQのは、キューのアクティブな消費者が現在あるかどうかを確認するにはいくつかの方法を持っていることはないと思いました。

管理ツールのHTTP APIでこれを照会する方法が見つかるかもしれませんが、それはしません。実行中のクエリとコードを開始する間の時間によって、複数のアプリケーションインスタンスが作成される可能性があります。

代わりに、私は2つの選択肢を見てみます:

1)は、消費者(あなたのライブラリーがわからないため、キューへの排他的アクセスを要求するが、それはAMQP仕様の一部です:https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.consume.exclusive

2)アプリケーションでミューテックスを使用してアプリケーションが1回だけ実行されていることを確認する

また、コンシューマアプリケーションを1つだけ設定し、常に実行するようにコンシューマアプリケーションを設定します。新しいインスタンスを動的に開始していない場合は、複数のインスタンスが存在することはありません。

関連する問題