public abstract class AbstractBrokerMessageHandler extends ObjectSE implements MessageHandler, ApplicationEventPublisherAware, SmartLifecycle
MessageHandler
の抽象基本クラス。修飾子と型 | フィールドと説明 |
---|---|
protected Log | logger |
DEFAULT_PHASE
コンストラクターと説明 |
---|
AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel) 宛先プレフィックスのないコンストラクター(すべての宛先に一致)。 |
AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel, CollectionSE<StringSE> destinationPrefixes) メッセージの宛先に一致する宛先プレフィックスを持つコンストラクター。 |
修飾子と型 | メソッドと説明 |
---|---|
protected boolean | checkDestinationPrefix(StringSE destination) |
ApplicationEventPublisher | getApplicationEventPublisher() |
SubscribableChannel | getBrokerChannel() |
SubscribableChannel | getClientInboundChannel() |
MessageChannel | getClientOutboundChannel() |
protected MessageChannel | getClientOutboundChannelForSession(StringSE sessionId) クライアントへのメッセージ送信に使用する MessageChannel を取得します。 preservePublishOrder=true の場合はセッションごとのラッパーです。 |
CollectionSE<StringSE> | getDestinationPrefixes() |
void | handleMessage(Message<?> message) 指定されたメッセージを処理します。 |
protected abstract void | handleMessageInternal(Message<?> message) |
boolean | isAutoStartup() |
boolean | isBrokerAvailable() メッセージブローカーが現在利用可能で、メッセージを処理できるかどうか。 |
boolean | isPreservePublishOrder() メッセージが公開順に受信されるようにするかどうか。 |
boolean | isRunning() このメッセージハンドラーが現在実行されているかどうかを確認します。 |
protected void | publishBrokerAvailableEvent() |
protected void | publishBrokerUnavailableEvent() |
void | setApplicationEventPublisher(ApplicationEventPublisher publisher) このオブジェクトが実行される ApplicationEventPublisher を設定します。 |
void | setAutoStartup(boolean autoStartup) |
void | setPreservePublishOrder(boolean preservePublishOrder) クライアントが発行順にメッセージを受信する必要があるかどうか。 |
void | start() このコンポーネントを起動します。 |
protected void | startInternal() |
void | stop() このメソッドを返すとコンポーネントが完全に停止するように、通常は同期的にこのコンポーネントを停止します。 |
void | stop(RunnableSE callback) Lifecycle コンポーネントが現在実行中の場合、停止する必要があることを示します。 |
protected void | stopInternal() |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
getPhase
protected final Log logger
public AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel)
inboundChannel
- クライアントからメッセージを受信するためのチャネル (たとえば WebSocket クライアント)outboundChannel
- クライアントにメッセージを送信するためのチャネル (たとえば WebSocket クライアント)brokerChannel
- アプリケーションがブローカーにメッセージを送信するためのチャネル public AbstractBrokerMessageHandler(SubscribableChannel inboundChannel, MessageChannel outboundChannel, SubscribableChannel brokerChannel, @Nullable CollectionSE<StringSE> destinationPrefixes)
inboundChannel
- クライアントからメッセージを受信するためのチャネル (たとえば WebSocket クライアント)outboundChannel
- クライアントにメッセージを送信するためのチャネル (たとえば WebSocket クライアント)brokerChannel
- アプリケーションがブローカーにメッセージを送信するためのチャネル destinationPrefixes
- メッセージを除外するために使用するプレフィックス public SubscribableChannel getClientInboundChannel()
public MessageChannel getClientOutboundChannel()
public SubscribableChannel getBrokerChannel()
public CollectionSE<StringSE> getDestinationPrefixes()
public void setPreservePublishOrder(boolean preservePublishOrder)
デフォルトでは、"clientOutboundChannel"
に送信されたメッセージは同じ順序で処理されない場合があります。これは、チャネルが ThreadPoolExecutor によってサポートされているため、順番に処理が保証されないためです。
このフラグを true
に設定すると、同じセッション内のメッセージが一度に 1 つずつ "clientOutboundChannel"
に送信され、公開の順序が保持されます。メッセージを正しい順序で保持するためのパフォーマンスのオーバーヘッドがあるため、必要な場合にのみこれを有効にしてください。
preservePublishOrder
- 順番に公開するかどうか public boolean isPreservePublishOrder()
public void setApplicationEventPublisher(@Nullable ApplicationEventPublisher publisher)
ApplicationEventPublisherAware
通常の Bean プロパティの設定後、InitializingBean の afterPropertiesSet などの init コールバックやカスタム init メソッドの前に呼び出されます。ApplicationContextAware の setApplicationContext の前に呼び出されます。
ApplicationEventPublisherAware
の setApplicationEventPublisher
publisher
- このオブジェクトによって使用されるイベント発行元 @Nullable public ApplicationEventPublisher getApplicationEventPublisher()
public void setAutoStartup(boolean autoStartup)
public boolean isAutoStartup()
SmartLifecycle
true
が含まれる ApplicationContext
がリフレッシュされるときに、この Lifecycle
コンポーネントがコンテナーによって自動的に開始される場合、true
を返します。false
の値は、プレーン Lifecycle
実装に類似した、明示的な Lifecycle.start()
呼び出しを介してコンポーネントが開始されることを意図していることを示します。
デフォルトの実装は true
を返します。
public void start()
Lifecycle
コンポーネントがすでに実行されている場合は、例外をスローしないでください。
コンテナーの場合、これは適用されるすべてのコンポーネントに開始シグナルを伝播します。
Lifecycle
の start
SmartLifecycle.isAutoStartup()
protected void startInternal()
public void stop()
Lifecycle
SmartLifecycle
とその stop(Runnable)
バリアントの実装を検討してください。 この停止通知は破棄前に送信されるとは限らないことに注意してください。通常のシャットダウンでは、一般的な破棄コールバックが伝播される前に、Lifecycle
Bean は最初に停止通知を受信します。ただし、コンテキストの存続期間中のホットリフレッシュまたは中断されたリフレッシュ試行では、特定の Bean の destroy メソッドが、停止シグナルを事前に考慮することなく呼び出されます。
コンポーネントが実行されていない(まだ開始されていない)場合は、例外をスローしないでください。
コンテナーの場合、これは停止シグナルを適用するすべてのコンポーネントに伝播します。
Lifecycle
の stop
SmartLifecycle.stop(Runnable)
, DisposableBean.destroy()
protected void stopInternal()
public final void stop(RunnableSE callback)
SmartLifecycle
提供されたコールバックは、LifecycleProcessor
によって使用され、共通のシャットダウン順序値を持つすべてのコンポーネントの順序付けられた、潜在的に同時のシャットダウンをサポートします。コールバック は、SmartLifecycle
コンポーネントが実際に停止した後に実行する必要があります。
LifecycleProcessor
は、stop
メソッドのこのバリアントのみを呼び出します。つまり、SmartLifecycle
実装では、このメソッドの実装内に明示的に委譲されない限り、Lifecycle.stop()
は呼び出されません。
デフォルトの実装は Lifecycle.stop()
に委譲し、呼び出しスレッドで指定されたコールバックをすぐにトリガーします。2 つの間に同期がないことに注意してください。カスタム実装では、少なくとも共通のライフサイクルモニター(存在する場合)内に同じ手順を入れたい場合があります。
SmartLifecycle
の stop
Lifecycle.stop()
, SmartLifecycle.getPhase()
public final boolean isRunning()
このメッセージハンドラーが実行されている場合でも、isBrokerAvailable()
フラグは、具象サブクラスの実装によっては、オンとオフを交互に切り替える場合があります。
public boolean isBrokerAvailable()
これは、このメッセージハンドラーが実行されているかどうかを示す isRunning()
フラグに追加されることに注意してください。つまり、メッセージハンドラーを最初に実行しておく必要があります。その後、具象サブクラスの実装に応じて、#isBrokerAvailable()
フラグをオンとオフの間で個別に切り替えることができます。
アプリケーションコンポーネントは、org.springframework.context.ApplicationListener<BrokerAvailabilityEvent>
を実装して、ブローカーが使用可能および使用不可になったときに通知を受け取ることができます。
public void handleMessage(Message<?> message)
MessageHandler
MessageHandler
の handleMessage
message
- 処理するメッセージ protected abstract void handleMessageInternal(Message<?> message)
protected void publishBrokerAvailableEvent()
protected void publishBrokerUnavailableEvent()
protected MessageChannel getClientOutboundChannelForSession(StringSE sessionId)
preservePublishOrder=true
の場合はセッションごとのラッパーです。