From b214bee7f8b5e55e8621bdc130d7aa1c2ba4a9cc Mon Sep 17 00:00:00 2001 From: xiaoheng1 <2018154970@qq.com> Date: Fri, 21 May 2021 17:16:55 +0800 Subject: [PATCH] fix #7815 MultiMessageHandler should increase exception handling to prevent data loss --- .../remoting/transport/MultiMessageHandler.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/MultiMessageHandler.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/MultiMessageHandler.java index a669802c172..4a173d698b7 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/MultiMessageHandler.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/MultiMessageHandler.java @@ -16,17 +16,21 @@ */ package org.apache.dubbo.remoting.transport; +import org.apache.dubbo.common.logger.Logger; +import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.remoting.Channel; import org.apache.dubbo.remoting.ChannelHandler; +import org.apache.dubbo.remoting.ExecutionException; import org.apache.dubbo.remoting.RemotingException; import org.apache.dubbo.remoting.exchange.support.MultiMessage; /** - * * @see MultiMessage */ public class MultiMessageHandler extends AbstractChannelHandlerDelegate { + protected static final Logger logger = LoggerFactory.getLogger(MultiMessageHandler.class); + public MultiMessageHandler(ChannelHandler handler) { super(handler); } @@ -37,7 +41,12 @@ public void received(Channel channel, Object message) throws RemotingException { if (message instanceof MultiMessage) { MultiMessage list = (MultiMessage) message; for (Object obj : list) { - handler.received(channel, obj); + try { + handler.received(channel, obj); + } catch (ExecutionException e) { + logger.error("MultiMessageHandler received fail.", e); + handler.caught(channel, e); + } } } else { handler.received(channel, message);