public class SimpleMessageListenerContainer extends AbstractMessageListenerContainer implements ExceptionListenerEE
MessageConsumer.setMessageListener()
メソッドを使用して、指定されたリスナー用の同時 MessageConsumers を作成するメッセージリスナーコンテナー。これは、メッセージリスナコンテナーの最も単純な形式です。リスナーを呼び出すための一定数の JMS セッションを作成しますが、ランタイムの要求に動的に適応させることはできません。その主な利点は、その低レベルの複雑さと JMS プロバイダーの最小要件です。ServerSessionPool 機能さえ必要ありません。
確認モードとトランザクションオプションの詳細については、AbstractMessageListenerContainer
javadoc を参照してください。このコンテナーは、デフォルトの "AUTO_ACKNOWLEDGE" モードの標準 JMS 動作を公開していることに注意してください。つまり、リスナー実行後の自動配信、ユーザー例外が発生した場合の再配信はありません。
別のスタイルの MessageListener 処理については、メッセージのトランザクション受信(XA トランザクションへの登録)も可能にするループ MessageConsumer.receive()
呼び出しを介して、DefaultMessageListenerContainer
を参照してください。
MessageConsumer.setMessageListener(javax.jms.MessageListener)
EE, DefaultMessageListenerContainer
, JmsMessageEndpointManager
AbstractJmsListeningContainer.SharedConnectionNotInitializedException
lifecycleMonitor, sharedConnectionMonitor
RECEIVE_TIMEOUT_INDEFINITE_WAIT, RECEIVE_TIMEOUT_NO_WAIT
logger
DEFAULT_PHASE
コンストラクターと説明 |
---|
SimpleMessageListenerContainer() |
修飾子と型 | メソッドと説明 |
---|---|
protected MessageConsumerEE | createListenerConsumer(SessionEE session) 指定された JMS セッションの MessageConsumer を作成し、指定されたリスナーの MessageListener を登録します。 |
protected void | doInitialize() JMS セッションと関連する MessageConsumer の形式で、指定された数の同時コンシューマーを作成します。 |
protected void | doShutdown() 登録済みの JMS セッションと関連する MessageConsumers を破棄します。 |
protected void | doStart() まだ初期化されていない場合、このコンテナーの JMS メッセージコンシューマーを再初期化します。 |
protected void | initializeConsumers() このコンテナーの JMS セッションと MessageConsumers を初期化します。 |
void | onException(JMSExceptionEE ex) 接続に失敗した場合に JMS プロバイダーによって呼び出される JMS ExceptionListener 実装。 |
protected void | prepareSharedConnection(ConnectionEE connection) このリスナーコンテナーを共有接続の JMS ExceptionListener として登録します。 |
protected void | processMessage(MessageEE message, SessionEE session) プロバイダーから受信したメッセージを処理します。 |
void | setConcurrency(StringSE concurrency) "lower-upper" 文字列を介して同時実行制限を指定します。 |
void | setConcurrentConsumers(int concurrentConsumers) 作成する同時コンシューマーの数を指定します。 |
void | setConnectLazily(boolean connectLazily) 遅延接続するかどうか、つまり |
void | setRecoverOnException(boolean recoverOnException) JMSException が報告されるたびに、共有 JMS 接続と関連するセッションおよび MessageConsumers を明示的に回復するかどうかを指定します。 |
void | setTaskExecutor(ExecutorSE taskExecutor) プロバイダーがメッセージを受信した後、リスナーの実行に使用する Spring TaskExecutor を設定します。 |
protected boolean | sharedConnectionEnabled() 常に共有 JMS 接続を使用します。 |
protected void | validateConfiguration() このコンテナーの構成を検証します。 |
checkMessageListener, commitIfNecessary, createConsumer, doExecuteListener, doInvokeListener, doInvokeListener, executeListener, getDefaultSubscriptionName, getDestination, getDestinationDescription, getDestinationName, getDurableSubscriptionName, getErrorHandler, getExceptionListener, getMessageConverter, getMessageListener, getMessageSelector, getReplyQosSettings, getSubscriptionName, handleListenerException, invokeErrorHandler, invokeExceptionListener, invokeListener, isAcceptMessagesWhileStopping, isExposeListenerSession, isPubSubNoLocal, isReplyPubSubDomain, isSessionLocallyTransacted, isSubscriptionDurable, isSubscriptionShared, rollbackIfNecessary, rollbackOnExceptionIfNecessary, setAcceptMessagesWhileStopping, setDestination, setDestinationName, setDurableSubscriptionName, setErrorHandler, setExceptionListener, setExposeListenerSession, setMessageConverter, setMessageListener, setMessageSelector, setPubSubNoLocal, setReplyPubSubDomain, setReplyQosSettings, setSubscriptionDurable, setSubscriptionName, setSubscriptionShared, setupMessageListener
afterPropertiesSet, createSharedConnection, destroy, doRescheduleTask, doStop, establishSharedConnection, getBeanName, getClientId, getPausedTaskCount, getPhase, getSharedConnection, initialize, isActive, isAutoStartup, isRunning, logRejectedTask, refreshSharedConnection, rescheduleTaskIfNecessary, resumePausedTasks, runningAllowed, setAutoStartup, setBeanName, setClientId, setPhase, shutdown, start, startSharedConnection, stop, stopSharedConnection
getDestinationResolver, isPubSubDomain, receiveFromConsumer, resolveDestinationName, setDestinationResolver, setPubSubDomain
convertJmsAccessException, createConnection, createSession, getConnectionFactory, getSessionAcknowledgeMode, isClientAcknowledge, isSessionTransacted, obtainConnectionFactory, setConnectionFactory, setSessionAcknowledgeMode, setSessionAcknowledgeModeName, setSessionTransacted
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
getDestinationResolver, isPubSubDomain
getPhase, isAutoStartup, stop
public void setConnectLazily(boolean connectLazily)
デフォルトは「false」: 早い段階、つまり Bean の初期化段階で接続します。ターゲットブローカーがまだ起動していない可能性が高く、接続を試行しないことを希望する場合は、遅延接続に切り替えるには、このフラグを "true" に設定します。
public void setRecoverOnException(boolean recoverOnException)
デフォルトは「true」: 接続がリスナーに例外を伝播するたびに、共有接続をリフレッシュし、コンシューマーを再初期化します。既存の接続とコンシューマーハンドルを保持したまま、プロバイダー内の自動回復に依存するには、このフラグを "false" に設定します。
public void setConcurrency(StringSE concurrency)
このリスナーコンテナーは、スケーリングできないため、常に最大数のコンシューマー setConcurrentConsumers(int)
を保持します。
このプロパティは、DefaultMessageListenerContainer
との構成互換性のために主にサポートされています。このローカルリスナーコンテナーには、通常、代わりに setConcurrentConsumers(int)
を使用します。
AbstractMessageListenerContainer
の setConcurrency
public void setConcurrentConsumers(int concurrentConsumers)
同時コンシューマーの数を増やすことは、キューから入ってくるメッセージの消費を拡大するために推奨されます。ただし、複数のコンシューマーが登録されると、順序付けの保証は失われます。一般に、少量のキューの場合は 1 つのコンシューマーに固執します。
トピックの同時コンシューマーの数を上げないでください。これにより、同じメッセージが同時に消費されることになり、望ましくありません。
public void setTaskExecutor(ExecutorSE taskExecutor)
デフォルトは none です。つまり、JMS プロバイダーの独自の受信スレッドで実行され、リスナーの実行中にプロバイダーの受信エンドポイントをブロックします。
通常、既存のスレッドプールと統合する JMS プロバイダーをブロックするのではなく、別のスレッドでリスナーを実行するために TaskExecutor を指定します。これにより、メッセージを同時に処理している間(受信から切り離されている! )、同時に使用するコンシューマーの数を少なくすることができます。(1)。
注: リスナーの実行に TaskExecutor を指定すると、確認応答のセマンティクスに影響します。その場合、メッセージはリスナーの実行前に常に確認され、基礎となるセッションは次のメッセージを受信するためにすぐに再利用されます。これをトランザクションセッションまたはクライアント確認応答と組み合わせて使用すると、不特定の結果につながります。
注: TaskExecutor を介した同時リスナー実行は、同じ基礎となる Session によって受信されたメッセージの同時処理につながります。結果として、少なくとも SessionAwareMessageListener
がこのセッションで実際の作業を実行する場合は、この設定を SessionAwareMessageListener
で使用することはお勧めしません。一般的に、標準の MessageListener
EE は正常に機能します。
protected void validateConfiguration()
AbstractJmsListeningContainer
デフォルトの実装は空です。サブクラスでオーバーライドされます。
AbstractMessageListenerContainer
の validateConfiguration
protected final boolean sharedConnectionEnabled()
protected void doInitialize() throws JMSExceptionEE
AbstractJmsListeningContainer
の doInitialize
JMSExceptionEE
- 登録に失敗した場合 createListenerConsumer(javax.jms.Session)
protected void doStart() throws JMSExceptionEE
AbstractJmsListeningContainer
の doStart
JMSExceptionEE
- JMS API メソッドによってスローされた場合 AbstractJmsListeningContainer.startSharedConnection()
protected void prepareSharedConnection(ConnectionEE connection) throws JMSExceptionEE
AbstractJmsListeningContainer
の prepareSharedConnection
connection
- 準備する接続 JMSExceptionEE
- 準備作業が失敗した場合 AbstractJmsListeningContainer.getClientId()
public void onException(JMSExceptionEE ex)
ExceptionListenerEE
の onExceptionEE
ex
- 報告された接続例外 setRecoverOnException(boolean)
, AbstractJmsListeningContainer.refreshSharedConnection()
, initializeConsumers()
protected void initializeConsumers() throws JMSExceptionEE
JMSExceptionEE
- セットアップが失敗した場合 protected MessageConsumerEE createListenerConsumer(SessionEE session) throws JMSExceptionEE
session
- 作業する JMS セッション JMSExceptionEE
- JMS メソッドによってスローされた場合 AbstractMessageListenerContainer.executeListener(javax.jms.Session, javax.jms.Message)
protected void processMessage(MessageEE message, SessionEE session)
リスナーを実行し、現在の JMS セッションをスレッドバインドリソースとして公開します ( "exposeListenerSession" が "true" の場合)。
message
- 受信した JMS メッセージ session
- 操作する JMS セッション AbstractMessageListenerContainer.executeListener(javax.jms.Session, javax.jms.Message)
, AbstractMessageListenerContainer.setExposeListenerSession(boolean)
protected void doShutdown() throws JMSExceptionEE
AbstractJmsListeningContainer
の doShutdown
JMSExceptionEE
- シャットダウンに失敗した場合 AbstractJmsListeningContainer.shutdown()