This is an automated email from the ASF dual-hosted git repository. huangli pushed a commit to branch 4.9.2_dev_community in repository https://gitbox.apache.org/repos/asf/rocketmq.git
commit f05f416abda132d75a916504c8a3667908b2b6a3 Author: huangli <[email protected]> AuthorDate: Mon Nov 15 00:32:59 2021 +0800 对parseChannelRemoteAddr的结果进行缓存,这个方法在生产者(client)的火焰图中占比4.84%,优化后几乎消失 --- .../apache/rocketmq/remoting/common/RemotingHelper.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java b/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java index 7dacea9..34a6b36 100644 --- a/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java +++ b/remoting/src/main/java/org/apache/rocketmq/remoting/common/RemotingHelper.java @@ -17,6 +17,9 @@ package org.apache.rocketmq.remoting.common; import io.netty.channel.Channel; +import io.netty.util.Attribute; +import io.netty.util.AttributeKey; + import java.io.IOException; import java.net.InetSocketAddress; import java.net.SocketAddress; @@ -34,6 +37,7 @@ public class RemotingHelper { public static final String DEFAULT_CHARSET = "UTF-8"; private static final InternalLogger log = InternalLoggerFactory.getLogger(ROCKETMQ_REMOTING); + private static final AttributeKey<String> REMOTE_ADDR_KEY = AttributeKey.valueOf("RemoteAddr"); public static String exceptionSimpleDesc(final Throwable e) { StringBuilder sb = new StringBuilder(); @@ -155,6 +159,16 @@ public class RemotingHelper { if (null == channel) { return ""; } + Attribute<String> att = channel.attr(REMOTE_ADDR_KEY); + String addr = att.get(); + if (addr == null) { + addr = parseChannelRemoteAddr0(channel); + att.set(addr); + } + return addr; + } + + private static String parseChannelRemoteAddr0(final Channel channel) { SocketAddress remote = channel.remoteAddress(); final String addr = remote != null ? remote.toString() : "";
