現在、アプリケーションサーバーのようなフレームワークにJMSサポートを追加しています。JMSはHornetQ(スタンドアロンブローカー、サーバークラスパス上のhornetq jar)によって実装されますが、JBossもSpringも、MDBを提供するものもありません。
次のステップは、着信メッセージの並列処理を可能にするメッセージリスナーをxaキューに追加することです。一部のメッセージは長時間実行されるタスクを開始するため、基本的な考え方はonMessage
メソッドからワーカースレッドを生成することです。
インターネットを介した長い旅の中で、参加者の1人がこのディスカッションに出くわしました。彼はそれを行わず、タスクに追加の内部キューを使用します。(シングルスレッドの)メッセージリスナーは、インバウンドキューを作成し、内部キューの新しいメッセージを作成します。内部キューのもう一方の端では、一部のワーカースレッドが着信メッセージを求めて戦います。インバウンドメッセージは、内部キューに「コピー」されると確認応答されます(これは私にとっては問題ありません)。
残念ながら、彼らは、メソッドからワーカースレッドを生成しない方がよい理由onMessage
を述べていません。おそらく、プールからのすべてのスレッドがビジーの場合、リスナーがブロックするためです。だから私はデザインの決定のための賛否両論を探しています:
- メッセージリスナーのonMessageメソッドからワーカースレッドを開始します
- 内部キューを使用して「ワーカースレッドにメッセージを送信」する