This is an automated email from the ASF dual-hosted git repository. liujun pushed a commit to branch performance-tuning-2.7.x in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/performance-tuning-2.7.x by this push: new 276c0a3 performance tuning: avoid duplicate channel status check (#4254) 276c0a3 is described below commit 276c0a3e57453d575688a496c0da0cc3d5705aa2 Author: ken.lj <ken.lj...@gmail.com> AuthorDate: Wed Jun 5 15:43:47 2019 +0800 performance tuning: avoid duplicate channel status check (#4254) --- .../support/header/HeaderExchangeChannel.java | 6 ++ .../support/header/HeaderExchangeHandler.java | 65 +++++++++------------- .../remoting/transport/netty4/NettyChannel.java | 30 +++++++++- .../remoting/transport/netty4/NettyClient.java | 6 +- .../transport/netty4/NettyClientHandler.java | 38 +++++-------- .../transport/netty4/NettyCodecAdapter.java | 42 ++++++-------- .../transport/netty4/NettyServerHandler.java | 24 ++------ .../rpc/protocol/dubbo/DecodeableRpcResult.java | 1 - .../dubbo/rpc/protocol/rest/RestProtocolTest.java | 20 +++---- 9 files changed, 109 insertions(+), 123 deletions(-) diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeChannel.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeChannel.java index f96207b..b954612 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeChannel.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeChannel.java @@ -76,6 +76,12 @@ final class HeaderExchangeChannel implements ExchangeChannel { } } + static void removeChannel(Channel ch) { + if (ch != null) { + ch.removeAttribute(CHANNEL_KEY); + } + } + @Override public void send(Object message) throws RemotingException { send(message, false); diff --git a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeHandler.java b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeHandler.java index 23fe27c..d60c9ca 100644 --- a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeHandler.java +++ b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/header/HeaderExchangeHandler.java @@ -108,8 +108,6 @@ public class HeaderExchangeHandler implements ChannelHandlerDelegate { channel.send(res); } catch (RemotingException e) { logger.warn("Send result to consumer failed, channel is " + channel + ", msg is " + e); - } finally { - // HeaderExchangeChannel.removeChannelIfDisconnected(channel); } }); } catch (Throwable e) { @@ -122,11 +120,7 @@ public class HeaderExchangeHandler implements ChannelHandlerDelegate { @Override public void connected(Channel channel) throws RemotingException { ExchangeChannel exchangeChannel = HeaderExchangeChannel.getOrAddChannel(channel); - try { - handler.connected(exchangeChannel); - } finally { - HeaderExchangeChannel.removeChannelIfDisconnected(channel); - } + handler.connected(exchangeChannel); } @Override @@ -136,7 +130,7 @@ public class HeaderExchangeHandler implements ChannelHandlerDelegate { handler.disconnected(exchangeChannel); } finally { DefaultFuture.closeChannel(channel); - HeaderExchangeChannel.removeChannelIfDisconnected(channel); + HeaderExchangeChannel.removeChannel(channel); } } @@ -145,13 +139,10 @@ public class HeaderExchangeHandler implements ChannelHandlerDelegate { Throwable exception = null; try { ExchangeChannel exchangeChannel = HeaderExchangeChannel.getOrAddChannel(channel); - try { - handler.sent(exchangeChannel, message); - } finally { - HeaderExchangeChannel.removeChannelIfDisconnected(channel); - } + handler.sent(exchangeChannel, message); } catch (Throwable t) { exception = t; + HeaderExchangeChannel.removeChannelIfDisconnected(channel); } if (message instanceof Request) { Request request = (Request) message; @@ -172,36 +163,32 @@ public class HeaderExchangeHandler implements ChannelHandlerDelegate { @Override public void received(Channel channel, Object message) throws RemotingException { final ExchangeChannel exchangeChannel = HeaderExchangeChannel.getOrAddChannel(channel); - try { - if (message instanceof Request) { - // handle request. - Request request = (Request) message; - if (request.isEvent()) { - handlerEvent(channel, request); - } else { - if (request.isTwoWay()) { - handleRequest(exchangeChannel, request); - } else { - handler.received(exchangeChannel, request.getData()); - } - } - } else if (message instanceof Response) { - handleResponse(channel, (Response) message); - } else if (message instanceof String) { - if (isClientSide(channel)) { - Exception e = new Exception("Dubbo client can not supported string message: " + message + " in channel: " + channel + ", url: " + channel.getUrl()); - logger.error(e.getMessage(), e); + if (message instanceof Request) { + // handle request. + Request request = (Request) message; + if (request.isEvent()) { + handlerEvent(channel, request); + } else { + if (request.isTwoWay()) { + handleRequest(exchangeChannel, request); } else { - String echo = handler.telnet(channel, (String) message); - if (echo != null && echo.length() > 0) { - channel.send(echo); - } + handler.received(exchangeChannel, request.getData()); } + } + } else if (message instanceof Response) { + handleResponse(channel, (Response) message); + } else if (message instanceof String) { + if (isClientSide(channel)) { + Exception e = new Exception("Dubbo client can not supported string message: " + message + " in channel: " + channel + ", url: " + channel.getUrl()); + logger.error(e.getMessage(), e); } else { - handler.received(exchangeChannel, message); + String echo = handler.telnet(channel, (String) message); + if (echo != null && echo.length() > 0) { + channel.send(echo); + } } - } finally { - HeaderExchangeChannel.removeChannelIfDisconnected(channel); + } else { + handler.received(exchangeChannel, message); } } diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyChannel.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyChannel.java index f8bbcf6..d0dfa7c 100644 --- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyChannel.java +++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyChannel.java @@ -30,6 +30,7 @@ import java.net.InetSocketAddress; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicBoolean; import static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_TIMEOUT; import static org.apache.dubbo.common.constants.CommonConstants.TIMEOUT_KEY; @@ -50,6 +51,9 @@ final class NettyChannel extends AbstractChannel { private final Channel channel; private final Map<String, Object> attributes = new ConcurrentHashMap<String, Object>(); + + private final AtomicBoolean active = new AtomicBoolean(false); + /** * The constructor of NettyChannel. * It is private so NettyChannel usually create by {@link NettyChannel#getOrAddChannel(Channel, URL, ChannelHandler)} @@ -82,6 +86,7 @@ final class NettyChannel extends AbstractChannel { if (ret == null) { NettyChannel nettyChannel = new NettyChannel(ch, url, handler); if (ch.isActive()) { + nettyChannel.markActive(true); ret = CHANNEL_MAP.putIfAbsent(ch, nettyChannel); } if (ret == null) { @@ -97,7 +102,19 @@ final class NettyChannel extends AbstractChannel { */ static void removeChannelIfDisconnected(Channel ch) { if (ch != null && !ch.isActive()) { - CHANNEL_MAP.remove(ch); + NettyChannel nettyChannel = CHANNEL_MAP.remove(ch); + if (nettyChannel != null) { + nettyChannel.markActive(false); + } + } + } + + static void removeChannel(Channel ch) { + if (ch != null) { + NettyChannel nettyChannel = CHANNEL_MAP.remove(ch); + if (nettyChannel != null) { + nettyChannel.markActive(false); + } } } @@ -113,7 +130,15 @@ final class NettyChannel extends AbstractChannel { @Override public boolean isConnected() { - return !isClosed() && channel.isActive(); + return !isClosed() && active.get(); + } + + public boolean isActive() { + return active.get(); + } + + public void markActive(boolean isActive) { + active.set(isActive); } /** @@ -142,6 +167,7 @@ final class NettyChannel extends AbstractChannel { throw cause; } } catch (Throwable e) { + removeChannelIfDisconnected(channel); throw new RemotingException(this, "Failed to send message " + message + " to " + getRemoteAddress() + ", cause: " + e.getMessage(), e); } if (!success) { diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyClient.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyClient.java index 3c32a9c..f541600 100644 --- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyClient.java +++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyClient.java @@ -40,10 +40,10 @@ import io.netty.handler.proxy.Socks5ProxyHandler; import io.netty.handler.timeout.IdleStateHandler; import io.netty.util.concurrent.DefaultThreadFactory; -import static java.util.concurrent.TimeUnit.MILLISECONDS; - import java.net.InetSocketAddress; +import static java.util.concurrent.TimeUnit.MILLISECONDS; + /** * NettyClient. */ @@ -197,7 +197,7 @@ public class NettyClient extends AbstractClient { @Override protected org.apache.dubbo.remoting.Channel getChannel() { Channel c = channel; - if (c == null || !c.isActive()) { + if (c == null) { return null; } return NettyChannel.getOrAddChannel(c, getUrl(), this); diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyClientHandler.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyClientHandler.java index 8ff2d98..59db445 100644 --- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyClientHandler.java +++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyClientHandler.java @@ -55,11 +55,7 @@ public class NettyClientHandler extends ChannelDuplexHandler { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { NettyChannel channel = NettyChannel.getOrAddChannel(ctx.channel(), url, handler); - try { - handler.connected(channel); - } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); - } + handler.connected(channel); } @Override @@ -68,18 +64,14 @@ public class NettyClientHandler extends ChannelDuplexHandler { try { handler.disconnected(channel); } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); + NettyChannel.removeChannel(ctx.channel()); } } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { NettyChannel channel = NettyChannel.getOrAddChannel(ctx.channel(), url, handler); - try { - handler.received(channel, msg); - } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); - } + handler.received(channel, msg); } @Override @@ -92,21 +84,17 @@ public class NettyClientHandler extends ChannelDuplexHandler { // If our out bound event has an error (in most cases the encoder fails), // we need to have the request return directly instead of blocking the invoke process. promise.addListener(future -> { - try { - if (future.isSuccess()) { - // if our future is success, mark the future to sent. - handler.sent(channel, msg); - return; - } + if (future.isSuccess()) { + // if our future is success, mark the future to sent. + handler.sent(channel, msg); + return; + } - Throwable t = future.cause(); - if (t != null && isRequest) { - Request request = (Request) msg; - Response response = buildErrorResponse(request, t); - handler.received(channel, response); - } - } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); + Throwable t = future.cause(); + if (t != null && isRequest) { + Request request = (Request) msg; + Response response = buildErrorResponse(request, t); + handler.received(channel, response); } }); } diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyCodecAdapter.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyCodecAdapter.java index e0e4513..d1cb65b 100644 --- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyCodecAdapter.java +++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyCodecAdapter.java @@ -66,11 +66,7 @@ final public class NettyCodecAdapter { org.apache.dubbo.remoting.buffer.ChannelBuffer buffer = new NettyBackedChannelBuffer(out); Channel ch = ctx.channel(); NettyChannel channel = NettyChannel.getOrAddChannel(ch, url, handler); - try { - codec.encode(channel, buffer, msg); - } finally { - NettyChannel.removeChannelIfDisconnected(ch); - } + codec.encode(channel, buffer, msg); } } @@ -83,27 +79,23 @@ final public class NettyCodecAdapter { NettyChannel channel = NettyChannel.getOrAddChannel(ctx.channel(), url, handler); - try { - // decode object. - do { - int saveReaderIndex = message.readerIndex(); - Object msg = codec.decode(channel, message); - if (msg == Codec2.DecodeResult.NEED_MORE_INPUT) { - message.readerIndex(saveReaderIndex); - break; - } else { - //is it possible to go here ? - if (saveReaderIndex == message.readerIndex()) { - throw new IOException("Decode without read data."); - } - if (msg != null) { - out.add(msg); - } + // decode object. + do { + int saveReaderIndex = message.readerIndex(); + Object msg = codec.decode(channel, message); + if (msg == Codec2.DecodeResult.NEED_MORE_INPUT) { + message.readerIndex(saveReaderIndex); + break; + } else { + //is it possible to go here ? + if (saveReaderIndex == message.readerIndex()) { + throw new IOException("Decode without read data."); } - } while (message.readable()); - } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); - } + if (msg != null) { + out.add(msg); + } + } + } while (message.readable()); } } } diff --git a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyServerHandler.java b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyServerHandler.java index e62ab72..33ad9c9 100644 --- a/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyServerHandler.java +++ b/dubbo-remoting/dubbo-remoting-netty4/src/main/java/org/apache/dubbo/remoting/transport/netty4/NettyServerHandler.java @@ -66,14 +66,10 @@ public class NettyServerHandler extends ChannelDuplexHandler { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { NettyChannel channel = NettyChannel.getOrAddChannel(ctx.channel(), url, handler); - try { - if (channel != null) { - channels.put(NetUtils.toAddressString((InetSocketAddress) ctx.channel().remoteAddress()), channel); - } - handler.connected(channel); - } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); + if (channel != null) { + channels.put(NetUtils.toAddressString((InetSocketAddress) ctx.channel().remoteAddress()), channel); } + handler.connected(channel); } @Override @@ -83,18 +79,14 @@ public class NettyServerHandler extends ChannelDuplexHandler { channels.remove(NetUtils.toAddressString((InetSocketAddress) ctx.channel().remoteAddress())); handler.disconnected(channel); } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); + NettyChannel.removeChannel(ctx.channel()); } } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { NettyChannel channel = NettyChannel.getOrAddChannel(ctx.channel(), url, handler); - try { - handler.received(channel, msg); - } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); - } + handler.received(channel, msg); } @@ -102,11 +94,7 @@ public class NettyServerHandler extends ChannelDuplexHandler { public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { super.write(ctx, msg, promise); NettyChannel channel = NettyChannel.getOrAddChannel(ctx.channel(), url, handler); - try { - handler.sent(channel, msg); - } finally { - NettyChannel.removeChannelIfDisconnected(ctx.channel()); - } + handler.sent(channel, msg); } @Override diff --git a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java index 2a190ad..1a2347c 100644 --- a/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java +++ b/dubbo-rpc/dubbo-rpc-dubbo/src/main/java/org/apache/dubbo/rpc/protocol/dubbo/DecodeableRpcResult.java @@ -74,7 +74,6 @@ public class DecodeableRpcResult extends AppResponse implements Codec, Decodeabl @Override public Object decode(Channel channel, InputStream input) throws IOException { - log.debug("Decoding in thread -- " + Thread.currentThread().getName()); ObjectInput in = CodecSupport.getSerialization(channel.getUrl(), serializationType) .deserialize(channel.getUrl(), input); diff --git a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/RestProtocolTest.java b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/RestProtocolTest.java index f3d77af..415e684 100644 --- a/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/RestProtocolTest.java +++ b/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/RestProtocolTest.java @@ -55,7 +55,7 @@ public class RestProtocolTest { public void testRestProtocol() { URL url = URL.valueOf("rest://127.0.0.1:5342/rest/say?version=1.0.0&interface=org.apache.dubbo.rpc.protocol.rest.DemoService"); DemoServiceImpl server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(url.getPathKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(url.getPathKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(url.getPathKey(), providerModel); Exporter<DemoService> exporter = protocol.export(proxy.getInvoker(server, DemoService.class, url)); @@ -75,7 +75,7 @@ public class RestProtocolTest { DemoServiceImpl server = new DemoServiceImpl(); Assertions.assertFalse(server.isCalled()); URL url = URL.valueOf("rest://127.0.0.1:5341/a/b/c?version=1.0.0&interface=org.apache.dubbo.rpc.protocol.rest.DemoService"); - ProviderModel providerModel = new ProviderModel(url.getPathKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(url.getPathKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(url.getPathKey(), providerModel); Exporter<DemoService> exporter = protocol.export(proxy.getInvoker(server, DemoService.class, url)); @@ -93,7 +93,7 @@ public class RestProtocolTest { @Test public void testExport() { DemoService server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(exportUrl.getServiceKey(), providerModel); RpcContext.getContext().setAttachment("timeout", "200"); @@ -110,7 +110,7 @@ public class RestProtocolTest { @Test public void testNettyServer() { DemoService server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(exportUrl.getServiceKey(), providerModel); URL nettyUrl = exportUrl.addParameter(SERVER_KEY, "netty"); @@ -128,7 +128,7 @@ public class RestProtocolTest { public void testServletWithoutWebConfig() { Assertions.assertThrows(RpcException.class, () -> { DemoService server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(exportUrl.getPathKey(), providerModel); URL servletUrl = exportUrl.addParameter(SERVER_KEY, "servlet"); @@ -141,7 +141,7 @@ public class RestProtocolTest { public void testErrorHandler() { Assertions.assertThrows(RpcException.class, () -> { DemoService server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(exportUrl.getServiceKey(), providerModel); URL nettyUrl = exportUrl.addParameter(SERVER_KEY, "netty"); @@ -156,7 +156,7 @@ public class RestProtocolTest { @Test public void testInvoke() { DemoService server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(exportUrl.getServiceKey(), providerModel); @@ -171,7 +171,7 @@ public class RestProtocolTest { @Test public void testFilter() { DemoService server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(exportUrl.getServiceKey(), providerModel); URL nettyUrl = exportUrl.addParameter(SERVER_KEY, "netty") @@ -190,7 +190,7 @@ public class RestProtocolTest { @Test public void testRpcContextFilter() { DemoService server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(exportUrl.getServiceKey(), providerModel); // use RpcContextFilter @@ -214,7 +214,7 @@ public class RestProtocolTest { public void testRegFail() { Assertions.assertThrows(RuntimeException.class, () -> { DemoService server = new DemoServiceImpl(); - ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class); + ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, ApplicationModel.registerServiceModel(DemoService.class)); ApplicationModel.initProviderModel(exportUrl.getServiceKey(), providerModel); URL nettyUrl = exportUrl.addParameter(EXTENSION_KEY, "com.not.existing.Filter");