必要なのは、実際にはキューとして機能し、これを行わないRabbitMQです。クライアントがメッセージを明示的にデキューするまで、メッセージはキューの先頭に留まる必要があります。
非常に単純なシナリオのように見えますが、何らかの理由で、それをサポートするブローカーが見つかりません。ブローカーはWindowsOSで実行する必要があります。
必要なのは、実際にはキューとして機能し、これを行わないRabbitMQです。クライアントがメッセージを明示的にデキューするまで、メッセージはキューの先頭に留まる必要があります。
非常に単純なシナリオのように見えますが、何らかの理由で、それをサポートするブローカーが見つかりません。ブローカーはWindowsOSで実行する必要があります。
問題となっているのが1つのメッセージだけである場合は、メッセージを処理する前に、メッセージをファイルに書き込んで(そしてファイルをフラッシュして)みませんか。メッセージを確認した後、ファイルを削除します。
また、メッセージブローカーのクラッシュが心配な場合、最初のステップは、ErlangR14B02で実行されているRabbitMQ2.4.1にアップグレードすることです。2番目のステップは、複数のサーバーがMQブローカーとして機能するようにクラスター化することです。そして、その場合にのみ、タイムスタンプまたはメッセージIDの保存によって、処理されたメッセージを追跡するようにアプリを変更します。次に、RabbitMQがメッセージを再キューイングする場合、メッセージはすでに存在し、処理して記憶します。二度目に来るとき、あなたはそれを無視するでしょう。
これを正しく機能させるには、プリフェッチを0に設定する必要がある場合があります。
そして、別の選択肢もあります。必要な動作を正確に提供するために、独自のRabbitMQプラグインを作成することを検討できます。Erlangは一見複雑に見えるかもしれませんが、すでにいくつかの言語を学んだ経験豊富なプログラマーにとって、学ぶのはそれほど難しいことではありません。特に、HaskellやCAMLのような言語で関数型プログラミングの経験がある人は、その仕事をするのに十分なアーランをすぐに習得します。
メッセージパッシングプロセスのErlangの内部モデルにより、RabbitMQプラグインは基本的に必要なことをすべて実行できます。準拠する必要のある特定の制限付きプラグインAPIはありません。
言い換えると、RabbitMQが必要なものの99%しか実行しない場合、少量の作業でその99%を活用して、必要なすべてを達成できることを幸運だと考えてください。ただし、これを行うには、RabbitMQがシステムのパッケージインストールツールを使用してインストールするもう1つのパッケージであるという考えから離れる必要があります。あなたのような場合、RabbitMQはミッションクリティカルなツールと見なされるべきであり、ErlangとRabbitMQをソースからインストールし、OSに制限されることなくニーズに合わせて構成する必要があります。
ApacheQpidはおそらくあなたの最良の選択肢です。すべてのメッセージキューの中で、これには厳密な順序付けなど、多くの興味深いことがあります。
RabbitMQは、リリース2.7.0以降、厳密な順序付けもサポートしているため、シナリオのオプションとして再度使用する必要があります。