You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by hu...@apache.org on 2021/12/01 10:37:57 UTC
[rocketmq] 06/11: 对parseChannelRemoteAddr的结果进行缓存,这个方法在生产者(client)的火焰图中占比4.84%,优化后几乎消失
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 <ar...@gmail.com>
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() : "";