Fluxo de integração mola perde assinante

ioreskovic:

Eu tenho SI fluir que consome org.springframework.web.reactive.socket.WebSocketMessage, faz algum trabalho com ele, o que inclui a manuseá-lo de carga usando Netty de ByteBuf. Em algum ponto, ocorreu uma exceção em meu fluxo:

org.springframework.messaging.MessageHandlingException: Ocorreu um erro no manipulador de mensagem [_org.springframework.integration.errorLogger.handler]; exceção aninhada é io.netty.util.IllegalReferenceCountException: refcnt: 0 
    a org.springframework.integration.support.utils.IntegrationUtils.wrapInHandlingExceptionIfNecessary (IntegrationUtils.java:184) ~ [Primavera-integração-core-5.0.5.RELEASE.jar ! /: 5.0.5.RELEASE] 
    em org.springframework.integration.handler.AbstractMessageHandler.handleMessage (AbstractMessageHandler.java:175) ~ [primavera-integração-core-5.0.5.RELEASE.jar /: 5.0.5. RELEASE]  
    em org.springframework.integration.dispatcher.BroadcastingDispatcher.invokeHandler (BroadcastingDispatcher.java:224) ~ [primavera-integração-core-5.0.5.RELEASE.jar /: 5.0.5.RELEASE]
    em org.springframework.integration.dispatcher.BroadcastingDispatcher.dispatch (BroadcastingDispatcher.java:180) ~ [primavera-integração-core-5.0.5.RELEASE.jar /: 5.0.5.RELEASE]
    em org.springframework.integration.channel.AbstractSubscribableChannel.doSend (AbstractSubscribableChannel.java:73) ~ [Primavera-integração-core 5.0.5.RELEASE.jar /: 5.0.5.RELEASE] 
    em org.springframework.integration. channel.AbstractMessageChannel.send (AbstractMessageChannel.java:445) ~ [primavera-integração-core 5.0.5.RELEASE.jar /: 5.0.5.RELEASE] 
    em org.springframework.messaging.core.GenericMessagingTemplate.doSend (GenericMessagingTemplate.java:47) ~ [salto ! mensagens 5.0.6.RELEASE.jar /: 5.0.6.RELEASE] 
    em org.springframework.messaging.core.GenericMessagingTemplate.doSend (GenericMessagingTemplate.java:181) ~ [ mensagens salto 5.0.6.RELEASE.jar /: 5.0.6.RELEASE]
    em org.springframework.messaging.core.GenericMessagingTemplate.doSend (GenericMessagingTemplate.java:160) ~ [Primavera-messaging-5.0.6.RELEASE.jar /: 5.0.6.RELEASE] 
    a io.netty.buffer.AbstractByteBuf .ensureAccessible (AbstractByteBuf.java:1417) ~ [netty-tampão-4.1.24.Final.jar /:! 4.1.24.Final]
    em org.springframework.messaging.core.AbstractMessageSendingTemplate.send (AbstractMessageSendingTemplate.java:108) ~ [Primavera-messaging-5.0.6.RELEASE.jar /: 5.0.6.RELEASE] 
    em org.springframework.integration.channel. MessagePublishingErrorHandler.handleError (MessagePublishingErrorHandler.java:93) ~ [primavera-integração-core-5.0.5.RELEASE.jar /: 5.0.5.RELEASE] 
... 
causada por: io.netty.util.IllegalReferenceCountException: refcnt: 0 
    em io.netty.buffer.AbstractByteBuf.getInt (AbstractByteBuf.java:417) ~ [netty-tampão-4.1.24.Final.jar /:! 4.1.24.Final]
    em io.netty.buffer.AbstractByteBuf.checkIndex (AbstractByteBuf.java:1356) ~ [netty-tampão-4.1.24.Final.jar /:! 4.1.24.Final] 
    em io.netty.buffer.ByteBufUtil.hashCode ( ByteBufUtil.java:175) ~ [netty-tampão-4.1.24.Final.jar /:! 4.1.24.Final] 
    em io.netty.buffer.AbstractByteBuf.hashCode (AbstractByteBuf.java:1315) ~ [netty-tampão -4.1.24.Final.jar /: 4.1.24.Final] 
    em org.springframework.core.io.buffer.NettyDataBuffer.hashCode (NettyDataBuffer.java:288) ~ [primavera-core-5.0.6.RELEASE. jar /: 5.0.6.RELEASE] 
    em org.springframework.web.reactive.socket.WebSocketMessage.hashCode (WebSocketMessage.java:134) ~ [primavera-webflux-5.0.6.RELEASE.jar /: 5.0.6 .RELEASE] 
    em java.lang.Object.toString (Object.java:236) ~ [:? 1.8.0_161]
    em java.lang.String.valueOf (String.java:2994) ~ [:? 1.8.0_161] 
    em java.lang.StringBuilder.append (StringBuilder.java:131) ~ [:? 1.8.0_161]

Depois disso, a manipulação todas as mensagens WebSocket binários falhar com a seguinte exceção:

2018-11-26T10: 38: 29133 ERRO --- [-server-epoll-7] osihLoggingHandler (:) org.springframework.messaging.MessageDeliveryException: falhou para enviar uma mensagem ao canal 'binaryWebSocketMessageChannel'; exceção aninhada é java.lang.IllegalStateException: O [binaryWebSocketMessageChannel] não tem assinantes para aceitar mensagens, FailedMessage = GenericMessage [payload = MyPayload (payload=org.springframework.web.reactive.socket.WebSocketMessage@38552d5, session = ReactorNettyWebSocketSession [ ID = 3e0be929, uri = http: // localhost: 8080 /]), cabeçalhos = {ID = b09a89ff-f7be-1b43-6f62-40e5c0b5695a, timestamp = 1543225109132}] 
    em org.springframework.integration.support.utils.IntegrationUtils. wrapInDeliveryExceptionIfNecessary (IntegrationUtils.java:163)
    em org.springframework.integration.channel.AbstractMessageChannel.send (AbstractMessageChannel.java:475) 
    em org.springframework.integration.channel.AbstractMessageChannel.send (AbstractMessageChannel.java:394) 
    em org.springframework.messaging.core.GenericMessagingTemplate.doSend (GenericMessagingTemplate.java:181) 
    em org.springframework.messaging.core.GenericMessagingTemplate.doSend (GenericMessagingTemplate.java:160) 
    em org.springframework.messaging.core.GenericMessagingTemplate.doSend (GenericMessagingTemplate.java:47) 
    em org.springframework. messaging.core.AbstractMessageSendingTemplate.send (AbstractMessageSendingTemplate.java:108)
    em org.springframework.integration.router.AbstractMessageRouter.handleMessageInternal (AbstractMessageRouter.java:183) 
    em org.springframework.integration.handler.AbstractMessageHandler.handleMessage (AbstractMessageHandler.java:158) 
    em reactor.core.publisher.FluxRetry $ RetrySubscriber.onNext (FluxRetry.java:79) 
... 
    em org.springframework. integration.handler.AbstractMessageHandler.onNext (AbstractMessageHandler.java:205)
    em org.springframework.integration.handler.AbstractMessageHandler.onNext (AbstractMessageHandler.java:55) 
    em org.springframework.integration.endpoint.ReactiveStreamsConsumer $ 1.hookOnNext (ReactiveStreamsConsumer.java:138) 
    em org.springframework.integration.endpoint.ReactiveStreamsConsumer $ 1 .hookOnNext (ReactiveStreamsConsumer.java:127) 
    em reactor.core.publisher.BaseSubscriber.onNext (BaseSubscriber.java:158) 
causada por: java.lang.IllegalStateException: Será que o [binaryWebSocketMessageChannel] não tem assinantes para aceitar mensagens 
    em org. springframework.util.Assert.state (Assert.java:94) 
    em org.springframework.integration.channel.FluxMessageChannel.doSend (FluxMessageChannel.java:63) 
    em org.springframework.integration.channel.AbstractMessageChannel.send (AbstractMessageChannel.java:445) 
    ... 57 mais

Alguém poderia apontar-me em qualquer direção para tentar resolver o problema? Assim, casos em que seria componente SI EIP (roteador, transformador, filtro, activador de serviço) para anular a partir do canal?

Para referência, o tipo de canal é org.springframework.integration.channel.FluxMessageChannel

Editar:

Meu fluxo parece com isso:

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

(Eu sei que se encaixa filtro melhor aqui, eu pretendo refactor mais tarde)

@ArtemBilan o repo com o exemplo está aqui: https://github.com/ioreskovic/Spring-Integration-flow-loses-subscriber

Arteta:

O ponto é que Publisherno FluxMessageChannelfor cancelado nessa versão Spring Integration.

Começamos a usar onErrorContinue()a partir do Reactor 3.2na versão 5.1. Para corrigir o problema, seria melhor considerar atualizar seu aplicativo para a última Primavera de inicialização 2.1.1.

À medida que resolver você pode considerar a engolir uma exceção no BinaryWsmToBytesTransformere não fazer bolha-lo na FluxMessageChannelvolta.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=237018&siteId=1
Recomendado
Clasificación