0

優先度の高い JMS メッセージが 1 日を通してロードされるキューがあり、それらをすぐに外に出したい。キューには、優先度の低いメッセージが大きなバッチで定期的にロードされています。忙しい日に私が目にする問題は、キューの前に常に十分な優先度の高いメッセージがあり、その量が減るまで優先度の低いメッセージが選択されないことです。多くの場合、彼らは真夜中まで列に並びます。アプリは多数のサーバーに分散されていますが、CPU は激しく動いていません。JMS が問題になっているようです。

私の推測では、非常に長い間キューに入れられていたメッセージの優先度を上げるある種のエージング アルゴリズムを実装することですが、もちろん、それはミドルウェアが私に代わって行うべきことです。JMS プロバイダー (IBM WebsphereMQ) やアプリケーション サーバー (TIBCO BusinessWorks) に、これに対処する何らかの機能が備わっていないとは思えません。コードを書く前に、この問題を解決するためにこれらのテクノロジのいずれかを取得する方法はありますか?

キューを読み取る BusinessWorks アクティビティは JMS SOAP イベント ソースですが、これを JMS キュー レシーバ アクティビティなどに変えることができます。

これを解決する方法についてのすべての考えは大歓迎です:-) TIA

4

3 に答える 3

1

それは、片方の手を背中の後ろで縛って、うまく泳げないと不平を言うようなものです. ああ!まず第一に、メッセージをミックスするというのは誰の素晴らしいアイデアでしたか。何かができるからといって、そうしなければならないわけではありません。

アプリは多数のサーバーに分散されていますが、CPU は激しく動いていません。JMS が問題になっているようです。

さて、解決策は簡単です。優先度の高いメッセージをキュー "A" (既存のキュー) に入れ、優先度の低いメッセージを新しいキュー "B" に入れます。次に、JMS アプリケーションの別のインスタンスを起動して、キュー「B」からメッセージを読み取ります。

また、JMS はおそらくチョーク ポイントではありません。これは、JMS レイヤーがメッセージを取得した後に、アプリケーションがメッセージ データに対して行っている処理であり、時間がかかっています (つまり、バックエンド作業)。

最後に、既存のキューに対して実行されている JMS アプリケーションのインスタンスの数は? 実行しているインスタンスが 1 つだけの場合、なぜですか? CPU キャパシティが大きい場合は、JMS アプリケーションのインスタンスを 10 個実行してみませんか。メッセージのいくつかの真の並列処理を行います。

于 2014-12-12T21:57:43.057 に答える