クラス SimpleMessageListenerContainer

実装されたすべてのインターフェース:
ExceptionListenerEEAwareBeanNameAwareDisposableBeanInitializingBeanLifecyclePhasedSmartLifecycleMessageListenerContainer

public class SimpleMessageListenerContainer extends AbstractMessageListenerContainer implements ExceptionListenerEE
プレーン JMS クライアント API の MessageConsumer.setMessageListener() メソッドを使用して、指定されたリスナー用の同時 MessageConsumers を作成するメッセージリスナーコンテナー。

これは、メッセージリスナコンテナーの最も単純な形式です。リスナーを呼び出すための一定数の JMS セッションを作成しますが、ランタイムの要求に動的に適応させることはできません。その主な利点は、その低レベルの複雑さと JMS プロバイダーの最小要件です。ServerSessionPool 機能さえ必要ありません。

確認モードとトランザクションオプションの詳細については、AbstractMessageListenerContainer javadoc を参照してください。このコンテナーは、デフォルトの "AUTO_ACKNOWLEDGE" モードの標準 JMS 動作を公開していることに注意してください。つまり、リスナー実行後の自動配信、ユーザー例外が発生した場合の再配信はありません。

別のスタイルの MessageListener 処理については、メッセージのトランザクション受信(XA トランザクションへの登録)も可能にするループ MessageConsumer.receive() 呼び出しを介して、DefaultMessageListenerContainer を参照してください。

導入:
2.0
作成者:
Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • SimpleMessageListenerContainer

      public SimpleMessageListenerContainer()
  • メソッドの詳細

    • setConnectLazily

      public void setConnectLazily(boolean connectLazily)
      遅延接続するかどうか、つまり、このコンテナーの開始段階で、JMS 接続および対応するセッションと MessageConsumers をできるだけ遅く確立するかどうかを指定します。

      デフォルトは「false」: 早い段階、つまり Bean の初期化段階で接続します。ターゲットブローカーがまだ起動していない可能性が高く、接続を試行しないことを希望する場合は、遅延接続に切り替えるには、このフラグを "true" に設定します。

      関連事項:
    • setRecoverOnException

      public void setRecoverOnException(boolean recoverOnException)
      JMSException が報告されるたびに、共有 JMS 接続と関連するセッションおよび MessageConsumers を明示的に回復するかどうかを指定します。

      デフォルトは「true」: 接続がリスナーに例外を伝播するたびに、共有接続をリフレッシュし、コンシューマーを再初期化します。既存の接続とコンシューマーハンドルを保持したまま、プロバイダー内の自動回復に依存するには、このフラグを "false" に設定します。

      導入:
      5.1.8
      関連事項:
    • setConcurrency

      public void setConcurrency(StringSE concurrency)
      "lower-upper" 文字列を介して同時実行制限を指定します。"5-10"、または単純な上限文字列、たとえば "10"。

      このリスナーコンテナーは、スケーリングできないため、常に最大数のコンシューマー setConcurrentConsumers(int) を保持します。

      このプロパティは、DefaultMessageListenerContainer との構成互換性のために主にサポートされています。このローカルリスナーコンテナーには、通常、代わりに setConcurrentConsumers(int) を使用します。

      次で指定:
      クラス AbstractMessageListenerContainersetConcurrency 
    • setConcurrentConsumers

      public void setConcurrentConsumers(int concurrentConsumers)
      作成する同時コンシューマーの数を指定します。デフォルトは 1 です。

      同時コンシューマーの数を増やすことは、キューから入ってくるメッセージの消費を拡大するために推奨されます。ただし、複数のコンシューマーが登録されると、順序付けの保証は失われます。一般に、少量のキューの場合は 1 つのコンシューマーに固執します。

      トピックの同時コンシューマーの数を上げないでください。これにより、同じメッセージが同時に消費されることになり、望ましくありません。

    • setTaskExecutor

      public void setTaskExecutor(ExecutorSE taskExecutor)
      プロバイダーがメッセージを受信した後、リスナーの実行に使用する Spring TaskExecutor を設定します。

      デフォルトは none です。つまり、JMS プロバイダーの独自の受信スレッドで実行され、リスナーの実行中にプロバイダーの受信エンドポイントをブロックします。

      通常、既存のスレッドプールと統合する JMS プロバイダーをブロックするのではなく、別のスレッドでリスナーを実行するために TaskExecutor を指定します。これにより、メッセージを同時に処理している間(受信から切り離されている! )、同時に使用するコンシューマーの数を少なくすることができます。(1)。

      注: リスナーの実行に TaskExecutor を指定すると、確認応答のセマンティクスに影響します。その場合、メッセージはリスナーの実行前に常に確認され、基礎となるセッションは次のメッセージを受信するためにすぐに再利用されます。これをトランザクションセッションまたはクライアント確認応答と組み合わせて使用すると、不特定の結果につながります。

      注: TaskExecutor を介した同時リスナー実行は、同じ基礎となる Session によって受信されたメッセージの同時処理につながります。結果として、少なくとも SessionAwareMessageListener がこのセッションで実際の作業を実行する場合は、この設定を SessionAwareMessageListener で使用することはお勧めしません。一般的に、標準の MessageListenerEE は正常に機能します。

      関連事項:
    • validateConfiguration

      protected void validateConfiguration()
      クラスからコピーされた説明: AbstractJmsListeningContainer
      このコンテナーの構成を検証します。

      デフォルトの実装は空です。サブクラスでオーバーライドされます。

      オーバーライド:
      クラス AbstractMessageListenerContainervalidateConfiguration 
    • sharedConnectionEnabled

      protected final boolean sharedConnectionEnabled()
      常に共有 JMS 接続を使用します。
      次で指定:
      クラス AbstractJmsListeningContainersharedConnectionEnabled 
      関連事項:
    • doInitialize

      protected void doInitialize() throws JMSExceptionEE
      JMS セッションと関連する MessageConsumer の形式で、指定された数の同時コンシューマーを作成します。
      次で指定:
      クラス AbstractJmsListeningContainerdoInitialize 
      例外:
      JMSExceptionEE - 登録に失敗した場合
      関連事項:
    • doStart

      protected void doStart() throws JMSExceptionEE
      まだ初期化されていない場合、このコンテナーの JMS メッセージコンシューマーを再初期化します。
      オーバーライド:
      クラス AbstractJmsListeningContainerdoStart 
      例外:
      JMSExceptionEE - JMS API メソッドによってスローされた場合
      関連事項:
    • prepareSharedConnection

      protected void prepareSharedConnection(ConnectionEE connection) throws JMSExceptionEE
      このリスナーコンテナーを共有接続の JMS ExceptionListener として登録します。
      オーバーライド:
      クラス AbstractJmsListeningContainerprepareSharedConnection 
      パラメーター:
      connection - 準備する接続
      例外:
      JMSExceptionEE - 準備作業が失敗した場合
      関連事項:
    • onException

      public void onException(JMSExceptionEE ex)
      接続に失敗した場合に JMS プロバイダーによって呼び出される JMS ExceptionListener 実装。必要に応じて、このリスナーコンテナーの共有接続とそのセッションおよびコンシューマーを再初期化します。
      次で指定:
      インターフェース ExceptionListenerEEonExceptionEE 
      パラメーター:
      ex - 報告された接続例外
      関連事項:
    • initializeConsumers

      protected void initializeConsumers() throws JMSExceptionEE
      このコンテナーの JMS セッションと MessageConsumers を初期化します。
      例外:
      JMSExceptionEE - セットアップが失敗した場合
    • createListenerConsumer

      protected MessageConsumerEE createListenerConsumer(SessionEE session) throws JMSExceptionEE
      指定された JMS セッションの MessageConsumer を作成し、指定されたリスナーの MessageListener を登録します。
      パラメーター:
      session - 作業する JMS セッション
      戻り値:
      MessageConsumer
      例外:
      JMSExceptionEE - JMS メソッドによってスローされた場合
      関連事項:
    • processMessage

      protected void processMessage(MessageEE message, SessionEE session)
      プロバイダーから受信したメッセージを処理します。

      リスナーを実行し、現在の JMS セッションをスレッドバインドリソースとして公開します( "exposeListenerSession" が "true" の場合)。

      パラメーター:
      message - 受信した JMS メッセージ
      session - 操作する JMS セッション
      関連事項:
    • doShutdown

      protected void doShutdown() throws JMSExceptionEE
      登録済みの JMS セッションと関連する MessageConsumers を破棄します。
      次で指定:
      クラス AbstractJmsListeningContainerdoShutdown 
      例外:
      JMSExceptionEE - シャットダウンに失敗した場合
      関連事項: