2

Javaで記述されたカスタムメッセージングシステムがあり、基本的に高負荷の下で一連のプッシュ応答を単一のプッシュ応答に集約する基本的なバッチ処理/圧縮機能を実装したいと思います。

基本的に:

  • 過去1秒間に3つのメッセージが送信されたことを検出した場合は、応答のバッチ処理を開始し、5秒以内に起動するようにタイマーをスケジュールします。
  • タイマーは、次の5秒間に受信したすべてのメッセージ応答を1つのメッセージに集約します

Javaでの最良の例を探す前に、これは実装されていると確信しています。私は本格的なメッセージングレイヤーを探していません。基本的な1秒あたりのメッセージの検出と、いくつかのタスクのスケジュールを設定します(もちろん、これは自分で簡単に作成できます。既存のアルゴリズムと比較して、欠落していないことを確認したいだけです。エッジケースまたは問題を可能な限り単純化したこと)。

基本的なQoSバッチ処理/スロットリング/圧縮の実装を構築するための優れたオープンソースの例はありますか?

4

1 に答える 1

0

高負荷に対して非常によく似たメカニズムを使用しています。

あなたが説明したように動作します * 特定の間隔でメッセージを集約します * その後、単一のメッセージの代わりにリストを送信します。* 再度集計を開始します。

次の落とし穴に注意する必要があります: * JMS のようなトランザクション型メッセージング システムを使用している場合、実装が JMS トランザクション内で送信できず、集計が継続するため、問題が発生する可能性があります。メッセージを保持するためのデータ構造のサイズによっては、スペースが不足する可能性があります。多くのメッセージを送信する非常に長いトランザクションがある場合、これは問題を引き起こす可能性があります。* 別のスレッドがメッセージを送信し、send() メソッドを呼び出すスレッドはそれをデータ構造に入れるだけであるため、このような方法でのメッセージの送信は非同期で行われます。* JMS の例に固執すると、メッセージが消費される方法もこのアプローチによって変更されることに留意する必要があります。JMS からメッセージのリストを 1 つのメッセージとして受け取るためです。したがって、この単一の JMS メッセージをコミットすると、メッセージのリスト全体がコミットされたことになります。これが要件に問題があるかどうかを確認する必要があります。

于 2011-03-24T11:13:42.497 に答える