春の統合の流れは、加入者を失います

ioreskovic:

私は消費SIフロー持ってorg.springframework.web.reactive.socket.WebSocketMessage網状のを使用して、それのペイロードを処理含みそれにいくつかの作業を、行いを、ByteBufある時点で、例外は私の流れの中で発生しました:

org.springframework.messaging.MessageHandlingException:エラーメッセージハンドラ[_org.springframework.integration.errorLogger.handler]で発生しました。ネストされた例外はio.netty.util.IllegalReferenceCountExceptionある:REFCNT:0 
    org.springframework.integration.support.utils.IntegrationUtils.wrapInHandlingExceptionIfNecessaryで(IntegrationUtils.java:184)〜[ばね統合コア5.0.5.RELEASE.jar !/:5.0.5.RELEASE] 
    org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:175)で〜[春-統合コア-5.0.5.RELEASE.jar /:!5.0.5。 RELEASE] 
    org.springframework.integration.dispatcher.BroadcastingDispatcher.invokeHandlerで(BroadcastingDispatcher.java:224)〜[春-統合コア-5.0.5.RELEASE.jar /:!5.0.5.RELEASE] 
    org.springframework.integration.dispatcher.BroadcastingDispatcher.dispatchで(BroadcastingDispatcher.java:180)〜[春-統合コア-5.0.5.RELEASE.jar /:!5.0.5.RELEASE]
    org.springframework.integration.channel.AbstractSubscribableChannel.doSendで(AbstractSubscribableChannel.java:73)〜:[春-統合コア5.0.5.RELEASE.jar /!5.0.5.RELEASE] 
    org.springframework.integrationで。 channel.AbstractMessageChannel.send(AbstractMessageChannel.java:445)〜[春-統合コア5.0.5.RELEASE.jar /:!5.0.5.RELEASE] 
    org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47時)〜[ジャンプ!メッセージング5.0.6.RELEASE.jar /:5.0.6.RELEASE] 
    org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:181時)〜[ !5.0.6.RELEASE.jar /ジャンプメッセージング:5.0.6.RELEASE]
    :org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:160)〜[5.0.6.RELEASE!春メッセージング-5.0.6.RELEASE.jar /]で
    org.springframework.messaging.coreで。 :[5.0.6.RELEASE春メッセージング-5.0.6.RELEASE.jar /!] AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:108)〜
    org.springframework.integration.channel.MessagePublishingErrorHandler.handleErrorで(MessagePublishingErrorHandler.java:93 )〜[春-統合コア-5.0.5.RELEASE.jar /:!5.0.5.RELEASE] 
... 
0:io.netty.util.IllegalReferenceCountException:REFCNTによって引き起こさ
    io.netty.buffer.AbstractByteBufで.ensureAccessible(AbstractByteBuf.java:1417)〜[ネッティーバッファ-4.1.24.Final.jar /:!4.1.24.Final] 
    :io.netty.buffer.AbstractByteBuf.checkIndex(AbstractByteBuf.java:1356)〜[!4.1.24.Finalネッティーバッファ-4.1.24.Final.jar /]で
    のio.netty.buffer.AbstractByteBuf.getInt (AbstractByteBuf.java:417)〜[ネッティーバッファ-4.1.24.Final.jar /:!4.1.24.Final]
    :io.netty.buffer.ByteBufUtil.hashCode(ByteBufUtil.java:175)〜[!4.1.24.Finalネッティーバッファ-4.1.24.Final.jar /]で
    io.netty.buffer.AbstractByteBuf.hashCodeで( AbstractByteBuf.java:1315)〜[ネッティーバッファ-4.1.24.Final.jar /:!4.1.24.Final] 
    org.springframework.core.io.buffer.NettyDataBuffer.hashCode(NettyDataBuffer.java:288)にて〜 [春・コア5.0.6.RELEASE.jar /:!5.0.6.RELEASE] 
    org.springframework.web.reactive.socket.WebSocketMessage.hashCodeで(WebSocketMessage.java:134)〜[春-webflux-5.0。 6.RELEASE.jar /:!5.0.6.RELEASE] 
    java.lang.Object.toString(Object.java:236)〜で、[:?1.8.0_161]
    [?:1.8.0_161] java.lang.String.valueOf(String.java:2994)〜で
    java.lang.StringBuilder.appendで(StringBuilder.java:131)〜[:?1.8.0_161]

その後、すべてのバイナリウェブソケットメッセージを処理すると、次の例外で失敗します。

2018-11-26T10:38:29133 ERROR --- [-server-ファイルディスクリプタ-7] osihLoggingHandler(:) org.springframework.messaging.MessageDeliveryException:チャネル'binaryWebSocketMessageChannel'にメッセージを送信することができませんでした。ネストされた例外はjava.lang.IllegalStateExceptionです:[binaryWebSocketMessageChannel]、メッセージを受け入れるための加入者を持っていませんfailedMessage = GenericMessage [ペイロード= MyPayload(payload=org.springframework.web.reactive.socket.WebSocketMessage@38552d5、セッション= ReactorNettyWebSocketSession [ ID = 3e0be929、URI = HTTP:// localhostを:8080 /])、ヘッダー= {ID = b09a89ff-f7be-1b43-6f62-40e5c0b5695a、タイムスタンプ= 1543225109132}] 
    org.springframework.integration.support.utils.IntegrationUtilsました。 wrapInDeliveryExceptionIfNecessary(IntegrationUtils.java:163)
    org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:475)で 
    org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)で
    org.springframeworkました。 messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:108)
    org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:394)で
    org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:181)で
    org.springframework.messaging.core.GenericMessagingTemplate.doSendで(GenericMessagingTemplate.java:160) 
    org.springframeworkました。 integration.handler.AbstractMessageHandler.onNext(AbstractMessageHandler.java:205)
    org.springframework.integration.router.AbstractMessageRouter.handleMessageInternal(AbstractMessageRouter.java:183)で
    org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:158)で
    org.springframework.integration.handler.AbstractMessageHandler.onNextで(AbstractMessageHandler.java:55)
    org.springframework.integration.endpoint.ReactiveStreamsConsumer $ 1.hookOnNext(ReactiveStreamsConsumer.java:138)で
    org.springframework.integration.endpoint.ReactiveStreamsConsumer $ 1.hookOnNext(ReactiveStreamsConsumer.java:127)で
    原子炉で。 core.publisher.BaseSubscriber.onNext(BaseSubscriber.java:158)
    reactor.core.publisher.FluxRetry $ RetrySubscriber.onNext(FluxRetry.java:79)で
... 
java.lang.IllegalStateException:によって引き起こさ[binaryWebSocketMessageChannel]は、メッセージを受け入れるために、加入者がない
    組織では。 springframework.util.Assert.state(Assert.java:94)
    org.springframework.integration.channel.FluxMessageChannel.doSendで(FluxMessageChannel.java:63) 
    org.springframework.integration.channel.AbstractMessageChannel.sendで(AbstractMessageChannel.java:445)
    ... 57もっと

誰もポイント私でした任意の方向は、試してみて、問題を解決するには?同様に、ここでの場合はSI EIPコンポーネント(ルータ、変圧器、フィルタ、サービス活性化剤)は、チャネルから解除しますか?

参考のために、チャネルタイプは org.springframework.integration.channel.FluxMessageChannel

編集:

私の流れは次のようになります。

WebSocketMessage -> router: (BINARY)  -> binaryWebSocketMessageChannel -> ...
                            (!BINARY) -> nullChannel

(私は後でリファクタリングすることを計画し、より良いここフィルターフィットを知っています)

@ArtemBilan例とのレポはこちらです:https://github.com/ioreskovic/Spring-Integration-flow-loses-subscriber

アルテタ:

ポイントは、ということであるPublisherFluxMessageChannelその春の統合バージョンで解除されます。

私たちは、使い始めたonErrorContinue()原子炉からの3.2バージョンに5.1あなたの問題を解決するには、最新の春ブーツにアプリケーションをアップグレードすることを検討する方が良いだろう2.1.1

私たちは回避策として、あなたはで例外を飲み込むために考えることができBinaryWsmToBytesTransformer、それがバブルにないFluxMessageChannelバック。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=237020&siteId=1