2016-11-24 17 views
0

粒子イベントを遅らせるためにdelay feature from activeMQを使用します。 AMQ_SCHEDULED_DELAYは内部でどのように動作しますか?ドキュメントでは、スケジューラに関する情報ですが、メッセージを遅延させるためにどのようなメカニズムが利用されているかについての情報はありません。その理由から、遅延がどのようにしてactiveMQに影響するかについてはわかりません。 activeMQはプール遅延または非同期遅延を使用しますか?ActiveMQ AMQ_SCHEDULED_DELAYメッセージはどのように機能しますか?

私の組織のメンバーは、異なる技術を採用したいので、この質問をします。私はactiveMQからの証明遅延はありません。

Hereはソースコードへのリンクです。私はコードを調べることを考えていましたが、私はJavaでうまくいきません。誰も助けることができますか?

答えて

1

activemq Webコンソールでパフォーマンステストを行うことができます。設定可能な遅延と送信するメッセージの数を含むメッセージを送信するオプションがあります。それは私の質問に答えることはありませんが、2つのアプローチを比較する最良の選択肢のようです。

1

ActiveMQのデフォルトの実装では、ポーリングが利用されます。

アクティブMQは、内部スケジューラスレッドによってスケジュールされた(または遅延した)メッセージのポーリングを保持します。このスレッドは、スケジュールされたイベント(またはメッセージ)のリストを読み取り、ジョブを起動し、ジョブイベントを発生させる前に必要に応じて繰り返すジョブを再スケジュールします。

スケジュールされたイベントのリストは、activemqの内部ストレージにソート順で格納されます。したがって、投票中は、最も早い処理が予定されているイベントを読み取るだけです。メッセージはenquing中に永続化されるため、多くのスケジューリングでは処理中にパフォーマンスの影響が目に見えません。

しかし、採用する前に、パフォーマンス/ SLA要件が満たされていることを確認するために、内部実装の詳細を気にせずにベンチマークを設定できます。

ジョブスケジューラAPIのJavadocを参照してください。デフォルト実装では、the codeを参照できます。

これが役に立ちます。

+0

この機能を担当するコードを検索していただきありがとうございます。スティーブのように非同期的だと指摘されている –

1

@skadyaに記載されているソースコードを見ると、「ポーリング」という用語は私が解釈するものではありません。 Java Objectクラスのwait(long timeout)メソッドを使用して、ジョブを実行するスレッドをいつ起動するかを判断するようです。

私はそれをポーリングと呼んでいません。私は、次のスケジュールされたジョブに適切な値に設定されたタイムアウトを介してスレッドが目覚める(例えば、適切な時間に次のスケジュールされたジョブを実行する)ように、遅延/タイムアウトが設定される非同期メカニズムと呼ぶ開始。

のJavadocはObject.waitの実装は、特定のプラットフォーム用にJDK/JRE/JVMによって提供されるネイティブ(すなわち、非Java)実装であることObject.wait(long timeout)

注。それは価値があるもののために。

+0

私はJavaではうまくないが、それはあなたのように私には思われる。 –

関連する問題