クラス AbstractBrokerMessageHandler
- 実装されたすべてのインターフェース:
Aware
、ApplicationEventPublisherAware
、Lifecycle
、Phased
、SmartLifecycle
、MessageHandler
MessageHandler
の抽象基本クラス。- 導入:
- 4.0
- 作成者:
- Rossen Stoyanchev
フィールドサマリー
インターフェース org.springframework.context.SmartLifecycle から継承されたフィールド
DEFAULT_PHASE
コンストラクターのサマリー
コンストラクター説明AbstractBrokerMessageHandler
(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel) 宛先プレフィックスのないコンストラクター(すべての宛先に一致)。AbstractBrokerMessageHandler
(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel, CollectionSE<StringSE> destinationPrefixes) メッセージの宛先に一致する宛先プレフィックスを持つコンストラクター。方法の概要
修飾子と型メソッド説明protected boolean
checkDestinationPrefix
(StringSE destination) 指定された宛先のメッセージを処理する必要があるかどうか。protected MessageChannel
getClientOutboundChannelForSession
(StringSE sessionId) クライアントへのメッセージ送信に使用する MessageChannel を取得します。preservePublishOrder=true
の場合はセッションごとのラッパーです。ブローカーに転送するメッセージをフィルタリングするために使用する宛先プレフィックスを返します。int
getPhase()
このライフサイクルオブジェクトが実行されるはずのフェーズを返します。void
handleMessage
(Message<?> message) 指定されたメッセージを処理します。protected abstract void
handleMessageInternal
(Message<?> message) boolean
boolean
メッセージブローカーが現在利用可能で、メッセージを処理できるかどうか。boolean
メッセージが公開順に受信されるようにするかどうか。final boolean
このメッセージハンドラーが現在実行されているかどうかを確認します。protected void
protected void
void
このオブジェクトが実行される ApplicationEventPublisher を設定します。void
setAutoStartup
(boolean autoStartup) void
setPhase
(int phase) このハンドラーが実行されるフェーズを設定します。void
setPreservePublishOrder
(boolean preservePublishOrder) クライアントが発行順にメッセージを受信する必要があるかどうか。void
setUserDestinationPredicate
(PredicateSE<StringSE> predicate) ユーザーの宛先でメッセージを識別するように述語を構成します。void
start()
このコンポーネントを起動します。protected void
void
stop()
このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。final void
stop
(RunnableSE callback) Lifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。protected void
フィールドの詳細
logger
コンストラクターの詳細
AbstractBrokerMessageHandler
public AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel) 宛先プレフィックスのないコンストラクター(すべての宛先に一致)。- パラメーター:
inboundChannel
- クライアントからメッセージを受信するためのチャネル (たとえば、WebSocket クライアント)outboundChannel
- クライアントにメッセージを送信するためのチャネル (たとえば、WebSocket クライアント)brokerChannel
- アプリケーションがブローカーにメッセージを送信するためのチャネル
AbstractBrokerMessageHandler
public AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel, @Nullable CollectionSE<StringSE> destinationPrefixes) メッセージの宛先に一致する宛先プレフィックスを持つコンストラクター。- パラメーター:
inboundChannel
- クライアントからメッセージを受信するためのチャネル (たとえば、WebSocket クライアント)outboundChannel
- クライアントにメッセージを送信するためのチャネル (たとえば、WebSocket クライアント)brokerChannel
- アプリケーションがブローカーにメッセージを送信するためのチャネルdestinationPrefixes
- メッセージを除外するために使用するプレフィックス
メソッドの詳細
getClientInboundChannel
getClientOutboundChannel
getBrokerChannel
getDestinationPrefixes
ブローカーに転送するメッセージをフィルタリングするために使用する宛先プレフィックスを返します。宛先があり、宛先が一致しないメッセージは無視されます。デフォルトでは、これは設定されていません。
setUserDestinationPredicate
ユーザーの宛先でメッセージを識別するように述語を構成します。destination prefixes
が構成されていない場合、これは、ブローカーに到達する前にUserDestinationMessageHandler
によって前処理される必要があるユーザー宛先メッセージを認識してスキップできます。- パラメーター:
predicate
- null 以外の宛先を持つユーザーメッセージをユーザー宛先を持つメッセージとして識別するための述語。- 導入:
- 5.3.4
setPreservePublishOrder
public void setPreservePublishOrder(boolean preservePublishOrder) クライアントが発行順にメッセージを受信する必要があるかどうか。デフォルトでは、
"clientOutboundChannel"
に送信されたメッセージは同じ順序で処理されない場合があります。これは、チャネルが ThreadPoolExecutor によってサポートされているため、順番に処理が保証されないためです。このフラグが
true
に設定されている場合、同じセッション内のメッセージは、公開順序を維持するために一度に 1 つずつ"clientOutboundChannel"
に送信されます。- パラメーター:
preservePublishOrder
- 順番に公開するかどうか- 導入:
- 5.1
isPreservePublishOrder
public boolean isPreservePublishOrder()メッセージが公開順に受信されるようにするかどうか。- 導入:
- 5.1
setApplicationEventPublisher
インターフェースからコピーされた説明:ApplicationEventPublisherAware
このオブジェクトが実行される ApplicationEventPublisher を設定します。通常の Bean プロパティの設定後、InitializingBean の afterPropertiesSet などの init コールバックやカスタム init メソッドの前に呼び出されます。ApplicationContextAware の setApplicationContext の前に呼び出されます。
- 次で指定:
- インターフェース
ApplicationEventPublisherAware
のsetApplicationEventPublisher
- パラメーター:
publisher
- このオブジェクトによって使用されるイベント発行元
getApplicationEventPublisher
setAutoStartup
public void setAutoStartup(boolean autoStartup) isAutoStartup
public boolean isAutoStartup()インターフェースからコピーされた説明:SmartLifecycle
true
が含まれるApplicationContext
がリフレッシュされるときに、このLifecycle
コンポーネントがコンテナーによって自動的に開始される場合、true
を返します。false
の値は、プレーンLifecycle
実装に類似した、明示的なLifecycle.start()
呼び出しを介してコンポーネントが開始されることを意図していることを示します。デフォルトの実装は
true
を返します。setPhase
public void setPhase(int phase) このハンドラーが実行されるフェーズを設定します。デフォルトでは
SmartLifecycle.DEFAULT_PHASE
ですが、@EnableWebSocketMessageBroker
構成では 0 に設定されます。- 導入:
- 6.1.4
getPhase
public int getPhase()インターフェースからコピーされた説明:SmartLifecycle
このライフサイクルオブジェクトが実行されるはずのフェーズを返します。デフォルトの実装は、通常の
Lifecycle
実装の前にstop()
コールバックを実行できるようにするためにSmartLifecycle.DEFAULT_PHASE
を返します。- 次で指定:
- インターフェース
Phased
のgetPhase
- 次で指定:
- インターフェース
SmartLifecycle
のgetPhase
- 関連事項:
start
public void start()インターフェースからコピーされた説明:Lifecycle
このコンポーネントを起動します。コンポーネントがすでに実行されている場合は、例外をスローしないでください。
コンテナーの場合、これは適用されるすべてのコンポーネントに開始シグナルを伝播します。
startInternal
protected void startInternal()stop
public void stop()インターフェースからコピーされた説明:Lifecycle
このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。非同期停止動作が必要な場合は、SmartLifecycle
とそのstop(Runnable)
バリアントの実装を検討してください。この停止通知は破棄前に送信されるとは限らないことに注意してください。通常のシャットダウンでは、一般的な破棄コールバックが伝播される前に、
Lifecycle
Bean は最初に停止通知を受信します。ただし、コンテキストの存続期間中のホットリフレッシュまたは中断されたリフレッシュ試行では、特定の Bean の destroy メソッドが、停止シグナルを事前に考慮することなく呼び出されます。コンポーネントが実行されていない(まだ開始されていない)場合は、例外をスローしないでください。
コンテナーの場合、これは停止シグナルを適用するすべてのコンポーネントに伝播します。
stopInternal
protected void stopInternal()stop
インターフェースからコピーされた説明:SmartLifecycle
Lifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。提供されたコールバックは、
LifecycleProcessor
によって使用され、共通のシャットダウン順序値を持つすべてのコンポーネントの順序付けられた、潜在的に同時のシャットダウンをサポートします。コールバック は、SmartLifecycle
コンポーネントが実際に停止した後に実行する必要があります。LifecycleProcessor
は、stop
メソッドのこのバリアントのみを呼び出します。つまり、SmartLifecycle
実装では、このメソッドの実装内に明示的に委譲されない限り、Lifecycle.stop()
は呼び出されません。デフォルトの実装は
Lifecycle.stop()
に委譲し、呼び出しスレッドで指定されたコールバックをすぐにトリガーします。2 つの間に同期がないことに注意してください。カスタム実装では、少なくとも共通のライフサイクルモニター(存在する場合)内に同じ手順を入れたい場合があります。- 次で指定:
- インターフェース
SmartLifecycle
のstop
- 関連事項:
isRunning
public final boolean isRunning()このメッセージハンドラーが現在実行されているかどうかを確認します。このメッセージハンドラーが実行されている場合でも、具象サブクラスの実装に応じて、
isBrokerAvailable()
フラグが独立してオンとオフを交互に繰り返す場合があることに注意してください。isBrokerAvailable
public boolean isBrokerAvailable()メッセージブローカーが現在利用可能で、メッセージを処理できるかどうか。これは、このメッセージハンドラーが実行されているかどうかを示す
isRunning()
フラグに追加されることに注意してください。言い換えると、メッセージハンドラーが最初に実行されている必要があり、その後、具象サブクラスの実装に応じて、#isBrokerAvailable()
フラグがオンとオフを個別に切り替える場合があります。アプリケーションコンポーネントは、
org.springframework.context.ApplicationListener<BrokerAvailabilityEvent>
を実装して、ブローカーが使用可能および使用不可になったときに通知を受け取ることができます。handleMessage
インターフェースからコピーされた説明:MessageHandler
指定されたメッセージを処理します。- 次で指定:
- インターフェース
MessageHandler
のhandleMessage
- パラメーター:
message
- 処理するメッセージ
handleMessageInternal
checkDestinationPrefix
指定された宛先のメッセージを処理する必要があるかどうか。これは、次の条件のいずれかが当てはまる場合に当てはまります。- 宛先は、構成された
destination prefixes
の 1 つで始まります。 - プレフィックスが設定されておらず、宛先が
userDestinationPredicate
と一致していません。 - メッセージには宛先がありません。
- パラメーター:
destination
- 確認する宛先- 戻り値:
- 宛先を処理する(true)かスキップする(false)か
- 宛先は、構成された
publishBrokerAvailableEvent
protected void publishBrokerAvailableEvent()getClientOutboundChannelForSession
クライアントへのメッセージ送信に使用する MessageChannel を取得します。preservePublishOrder=true
の場合はセッションごとのラッパーです。- 導入:
- 5.1