2011-09-15 3 views
1

AMQPを納品順序が重要な用途に使用することを検討しています。納品書を保存する

したがって、通常の再配信機能を使用できません。配信されなかったメッセージは、順序どおりに再キューに入れられません。

メッセージを処理してから削除するまで、キューにメッセージを残しておく必要があります。それで、同じメッセージが2回の順序で処理される可能性がありますが、それはトラップして対処するのが簡単です。

しかし、これを行う方法はわかりません。私が探しているのは、いくつかの種類のピークと削除のメッセージメソッドで、私に直接制御を与えていますが、存在していないようです。

何かが見つからない、または間違った方法で問題を解決しようとしていますか?

答えて

0

AMQPでのピークの削除はできません。実際には、メッセージを消費せずにキュー上のメッセージをブラウズすることはできず、Rabbitはこれを有効にする拡張機能を提供していません。

問題への一般的な対応は、実際にその順序制約が必要な場合は非常に慎重に考えることです。たとえば、その制約があるため、複数のコンシューマをキューに入れることはできません。

+0

残念ながら注文の保存が本当に必要です。ドキュメントを見ると、非ackされたメッセージをコンシューマーが開始時にチェックする個別のリカバリーキューに置くことが可能なように見えますが、それはまだ理解していません。 – Roger

+0

あなたは、デッド・レター・キューから消費するときに消費者が死亡した場合、あなたは何をしますか?別の*キューを追加すると、元の問題が他の場所に移動します。 – scvalex

0

私は同じ問題を解決しています。私の解決策では、私は私はラップの順序で残りの内側のメッセージを処理した外側のメッセージその後、最初に処理されている単一のメッセージメッセージをラップされています。これにはいくつかの欠点があります。例えば大きなメッセージ(ラッピング階層には多くのメッセージが含まれています)、より難しいシリアル化などですが、私にとっては解決策が十分に適していました。

関連する問題