クラス SimpleMessageListenerContainer
- 実装されているすべてのインターフェース:
jakarta.jms.ExceptionListener, Aware, BeanNameAware, DisposableBean, InitializingBean, Lifecycle, Phased, SmartLifecycle, MessageListenerContainer
MessageConsumer.setMessageListener() メソッドを使用して、指定されたリスナー用の同時 MessageConsumers を作成するメッセージリスナーコンテナー。これは、メッセージリスナコンテナーの最も単純な形式です。リスナーを呼び出すための一定数の JMS セッションを作成しますが、ランタイムの要求に動的に適応させることはできません。その主な利点は、その低レベルの複雑さと JMS プロバイダーの最小要件です。ServerSessionPool 機能さえ必要ありません。
確認モードとトランザクションオプションの詳細については、AbstractMessageListenerContainer javadoc を参照してください。このコンテナーは、デフォルトの "AUTO_ACKNOWLEDGE" モードの標準 JMS 動作を公開していることに注意してください。つまり、リスナー実行後の自動配信、ユーザー例外が発生した場合の再配信はありません。
メッセージのトランザクション受信 (XA トランザクションでのメッセージの登録) も可能にするループされた MessageConsumer.receive() 呼び出しを介した、異なるスタイルの MessageListener 処理については、DefaultMessageListenerContainer を参照してください。
- 導入:
- 2.0
- 作成者:
- Juergen Hoeller
- 関連事項:
ネストされたクラスの要約
クラス AbstractJmsListeningContainer から継承されたネストクラス / インターフェース
AbstractJmsListeningContainer.SharedConnectionNotInitializedExceptionフィールドのサマリー
クラス AbstractJmsListeningContainer から継承されたフィールド
lifecycleCondition, lifecycleLock, sharedConnectionLockクラス JmsDestinationAccessor から継承されたフィールド
RECEIVE_TIMEOUT_INDEFINITE_WAIT, RECEIVE_TIMEOUT_NO_WAITクラス JmsAccessor から継承されたフィールド
loggerインターフェース SmartLifecycle から継承されたフィールド
DEFAULT_PHASEコンストラクターの概要
コンストラクター方法の概要
修飾子と型メソッド説明protected jakarta.jms.MessageConsumercreateListenerConsumer(jakarta.jms.Session session) 指定された JMS セッションの MessageConsumer を作成し、指定されたリスナーの MessageListener を登録します。protected voidJMS セッションと関連する MessageConsumer の形式で、指定された数の同時コンシューマーを作成します。protected void登録済みの JMS セッションと関連する MessageConsumers を破棄します。protected voiddoStart()まだ初期化されていない場合、このコンテナーの JMS メッセージコンシューマーを再初期化します。protected voidこのコンテナーの JMS セッションと MessageConsumers を初期化します。voidonException(jakarta.jms.JMSException ex) 接続に失敗した場合に JMS プロバイダーによって呼び出される JMS ExceptionListener 実装。protected voidprepareSharedConnection(jakarta.jms.Connection connection) このリスナーコンテナーを共有接続の JMS ExceptionListener として登録します。protected voidprocessMessage(jakarta.jms.Message message, jakarta.jms.Session session) プロバイダーから受信したメッセージを処理します。voidsetConcurrency(StringSE concurrency) 同時実行制限は、"5-10" などの「下限 - 上限」文字列、または "10" などの単純な上限文字列で指定します。voidsetConcurrentConsumers(int concurrentConsumers) 作成する同時コンシューマーの数を指定します。voidsetConnectLazily(boolean connectLazily) 遅延接続するかどうか、つまりvoidsetRecoverOnException(boolean recoverOnException) JMSException が報告されるたびに、共有 JMS 接続と関連するセッションおよび MessageConsumers を明示的に回復するかどうかを指定します。voidsetTaskExecutor(ExecutorSE taskExecutor) プロバイダーがメッセージを受信した後、リスナーの実行に使用する Spring TaskExecutor を設定します。protected final boolean常に共有 JMS 接続を使用します。protected voidこのコンテナーの構成を検証します。クラス AbstractMessageListenerContainer から継承されたメソッド
checkMessageListener, commitIfNecessary, createConsumer, createObservation, doExecuteListener, doInvokeListener, doInvokeListener, executeListener, getDefaultSubscriptionName, getDestination, getDestinationDescription, getDestinationName, getDurableSubscriptionName, getErrorHandler, getExceptionListener, getMessageConverter, getMessageListener, getMessageSelector, getObservationRegistry, getReplyQosSettings, getSubscriptionName, handleListenerException, invokeErrorHandler, invokeExceptionListener, invokeListener, isAcceptMessagesWhileStopping, isAcknowledgeAfterListener, isExposeListenerSession, isPubSubNoLocal, isReplyPubSubDomain, isSessionLocallyTransacted, isSubscriptionDurable, isSubscriptionShared, rollbackIfNecessary, rollbackOnExceptionIfNecessary, setAcceptMessagesWhileStopping, setAcknowledgeAfterListener, setDestination, setDestinationName, setDurableSubscriptionName, setErrorHandler, setExceptionListener, setExposeListenerSession, setMessageConverter, setMessageListener, setMessageSelector, setObservationRegistry, setPubSubNoLocal, setReplyPubSubDomain, setReplyQosSettings, setSubscriptionDurable, setSubscriptionName, setSubscriptionShared, setupMessageListenerクラス AbstractJmsListeningContainer から継承されたメソッド
afterPropertiesSet, createSharedConnection, destroy, doRescheduleTask, doStop, establishSharedConnection, getBeanName, getClientId, getPausedTaskCount, getPhase, getSharedConnection, initialize, isActive, isAutoStartup, isRunning, logRejectedTask, refreshSharedConnection, releaseSharedConnection, rescheduleTaskIfNecessary, resumePausedTasks, runningAllowed, setAutoStartup, setBeanName, setClientId, setPhase, shutdown, start, startSharedConnection, stop, stopSharedConnectionクラス JmsDestinationAccessor から継承されたメソッド
getDestinationResolver, isPubSubDomain, receiveFromConsumer, resolveDestinationName, setDestinationResolver, setPubSubDomainクラス JmsAccessor から継承されたメソッド
convertJmsAccessException, createConnection, createSession, getConnectionFactory, getSessionAcknowledgeMode, isClientAcknowledge, isSessionTransacted, obtainConnectionFactory, setConnectionFactory, setSessionAcknowledgeMode, setSessionAcknowledgeModeName, setSessionTransactedクラス ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSEインターフェース MessageListenerContainer から継承されたメソッド
getDestinationResolver, isPubSubDomainインターフェース SmartLifecycle から継承されたメソッド
getPhase, isAutoStartup, isPauseable, stop
コンストラクターの詳細
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
同時実行制限は、"5-10" などの「下限 - 上限」文字列、または "10" などの単純な上限文字列で指定します。このリスナーコンテナーは、スケーリングできないため、常に最大数のコンシューマー
setConcurrentConsumers(int)を保持します。このプロパティは、
DefaultMessageListenerContainerとの構成互換性のために主にサポートされています。このローカルリスナーコンテナーには、通常、代わりにsetConcurrentConsumers(int)を使用します。- 次で指定:
- クラス
AbstractMessageListenerContainerのsetConcurrency
setConcurrentConsumers
public void setConcurrentConsumers(int concurrentConsumers) 作成する同時コンシューマーの数を指定します。デフォルトは 1 です。同時コンシューマーの数を増やすことは、キューから入ってくるメッセージの消費を拡大するために推奨されます。ただし、複数のコンシューマーが登録されると、順序付けの保証は失われます。一般に、少量のキューの場合は 1 つのコンシューマーに固執します。
トピックの同時コンシューマーの数を上げないでください。これにより、同じメッセージが同時に消費されることになり、望ましくありません。
setTaskExecutor
プロバイダーがメッセージを受信した後、リスナーの実行に使用する Spring TaskExecutor を設定します。デフォルトは none です。つまり、JMS プロバイダーの独自の受信スレッドで実行され、リスナーの実行中にプロバイダーの受信エンドポイントをブロックします。
通常、既存のスレッドプールと統合する JMS プロバイダーをブロックするのではなく、別のスレッドでリスナーを実行するために TaskExecutor を指定します。これにより、メッセージを同時に処理している間(受信から切り離されている! )、同時に使用するコンシューマーの数を少なくすることができます。(1)。
注: リスナーの実行に TaskExecutor を指定すると、確認応答のセマンティクスに影響します。その場合、メッセージはリスナーの実行前に常に確認され、基礎となるセッションは次のメッセージを受信するためにすぐに再利用されます。これをトランザクションセッションまたはクライアント確認応答と組み合わせて使用すると、不特定の結果につながります。
注意: TaskExecutor を介した同時リスナー実行は、同じ基盤となる Session で受信されたメッセージの同時処理につながります。少なくとも後者が特定の Session で実際の処理を実行する場合は、この設定を
SessionAwareMessageListenerで使用することは推奨されません。一般的には、標準的なMessageListenerで問題なく動作します。- 関連事項:
validateConfiguration
protected void validateConfiguration()クラスからコピーされた説明:AbstractJmsListeningContainerこのコンテナーの構成を検証します。デフォルトの実装は空です。サブクラスでオーバーライドされます。
- オーバーライド:
- クラス
AbstractMessageListenerContainerのvalidateConfiguration
doInitialize
protected void doInitialize() throws jakarta.jms.JMSExceptionJMS セッションと関連する MessageConsumer の形式で、指定された数の同時コンシューマーを作成します。- 次で指定:
- クラス
AbstractJmsListeningContainerのdoInitialize - 例外:
jakarta.jms.JMSException- 登録に失敗した場合- 関連事項:
doStart
protected void doStart() throws jakarta.jms.JMSExceptionまだ初期化されていない場合、このコンテナーの JMS メッセージコンシューマーを再初期化します。- オーバーライド:
- クラス
AbstractJmsListeningContainerのdoStart - 例外:
jakarta.jms.JMSException- JMS API メソッドによってスローされた場合- 関連事項:
onException
public void onException(jakarta.jms.JMSException ex) 接続に失敗した場合に JMS プロバイダーによって呼び出される JMS ExceptionListener 実装。必要に応じて、このリスナーコンテナーの共有接続とそのセッションおよびコンシューマーを再初期化します。- 次で指定:
- インターフェース
jakarta.jms.ExceptionListenerのonException - パラメーター:
ex- 報告された接続例外- 関連事項:
initializeConsumers
protected void initializeConsumers() throws jakarta.jms.JMSExceptionこのコンテナーの JMS セッションと MessageConsumers を初期化します。- 例外:
jakarta.jms.JMSException- セットアップが失敗した場合
createListenerConsumer
protected jakarta.jms.MessageConsumer createListenerConsumer(jakarta.jms.Session session) throws jakarta.jms.JMSException 指定された JMS セッションの MessageConsumer を作成し、指定されたリスナーの MessageListener を登録します。- パラメーター:
session- 作業する JMS セッション- 戻り値:
- MessageConsumer
- 例外:
jakarta.jms.JMSException- JMS メソッドによってスローされた場合- 関連事項:
processMessage
protected void processMessage(jakarta.jms.Message message, jakarta.jms.Session session) プロバイダーから受信したメッセージを処理します。リスナーを実行し、現在の JMS セッションをスレッドバインドリソースとして公開します ( "exposeListenerSession" が "true" の場合)。
- パラメーター:
message- 受信した JMS メッセージsession- 操作する JMS セッション- 関連事項:
doShutdown
protected void doShutdown() throws jakarta.jms.JMSException登録済みの JMS セッションと関連する MessageConsumers を破棄します。- 次で指定:
- クラス
AbstractJmsListeningContainerのdoShutdown - 例外:
jakarta.jms.JMSException- シャットダウンに失敗した場合- 関連事項: