0

REST API の特定のエンドポイントが呼び出されるたびに、時間がかかり、エラーが発生しやすいタスク (たとえば、SMS の配信をトリガーする SOAP エンドポイントの呼び出し) を処理する必要がありますが、ユーザーを作成したくありません。応答を返す前にそれを待ちます。Spring AMQP は既に私のスタックの一部であるため、それを利用して「ワーク キュー」を確立し、キューから多くのワーカー プロセスを消費して「ワーク ユニット」を処理することを考えました。ただし、次の要件があります。

  1. 作業単位は配信されることが保証され、厳密に 1 人のワーカーに配信されます。
  2. なんらかの理由でワークユニットが完了できなかった場合、別のワーカーが後でそれを取得できるように、キューに戻す必要があります。
  3. 作業単位は、サーバーの再起動やクラッシュに耐えます。それらを保存するためにいかなる種類のDBも使用しないため、これは必須です。

これら 3 つの要件を満たすように RabbitMQ と Spring AMQP を構成できることは知っていますが、RPC を実現するためにしか使用したことがないため、それ以外のことはあまり知りません。私が従うかもしれない例はありますか?注意すべき落とし穴にはどのようなものがありますか?

4

1 に答える 1

0

キューを作成する際、rabbitmq には 2 つのオプションがあります。一時的または永続的。永続的なメッセージは、確認するまで利用できます。また、キューに ttl を指定しないと、メッセージは期限切れになりません。手始めに、rabbitmq 管理プラグインを有効にして、少し遊んでみてください。

しかし、ハード リセットやハードウェアの問題に対してメッセージの安全性を本当に保証したい場合は、rabbitmq クラスターを使用する必要があると思います。

Rabbitmq クラスタリングと、ページの右側にある高可用性の件名を見つけることができます。

この男はクラスタ化の方法を説明します

ちなみにbeanstalkdも好きです。メッセージをディスクに書き込むようにすることができ、ディスク障害を除いて安全です。

于 2015-03-29T22:20:44.280 に答える