2017-03-02 5 views
1

WebSocket接続(PHP AMQP pecl拡張v1.7.1 & RabbitMQ 3.6.6)を使用して、RabbitMQから接続されたデバイスにメッセージを転送するPHPアプリケーションがあります。RabbitMQ PRECONDITION_FAILED - 不明な配信タグ

メッセージはキューの配列(websocket接続ごとに1つ)から消費され、メッセージが受信されたことを確認したときにコンシューマーによって確認されます(メッセージは配信されません。受け入れ可能な時間枠)。これはノンブロッキング方式で行われます。

99%の時間は完全に動作しますが、非常に時々 "RabbitMQ PRECONDITION_FAILED - 不明な配信タグ"というエラーが発生することがあります。これによりチャンネルが閉じます。

  1. メッセージがすでにがACKされたり拒否された:私の理解では、この例外は、次の条件のいずれかの結果があります。
  2. メッセージが配信されなかったチャネルでackが試行されます。
  3. メッセージタイムアウト(ttl)の期限が切れた後にackが試行されます。

私たちは上記のケースごとに保護を実装しましたが、それでも問題は続きます。

これに影響を与える可能性のある実装の詳細が多数あることは認識していますが、概念レベルでは、考慮していない、処理する必要があるその他の障害ケースがありますか?または上記の機能を実現するためのより良い方法がありますか?

答えて

0

「PRECONDITION_FAILED - 不明な配信タグ」は、通常、ダブルアクイジション、間違ったチャンネルでの受信、または拒否されるべきでない肯定的なメッセージのために発生します。あなたが他のチャンネル

を使用して basic.ack 2回または basic.ackを実行するために抱き合わせている同じ場合はそう

関連する問題