From cb4ff2ecaea5cba29bcdaae606ac4e00af342597 Mon Sep 17 00:00:00 2001 From: "wangjiahua.wjh" Date: Thu, 11 Jun 2026 17:31:26 +0800 Subject: [PATCH] [ISSUE #10486] Add getMessageType(Map) overload to eliminate redundant properties decode BrokerMetricsManager.getMessageType(SendMessageRequestHeader) is called once per send to classify the message. It internally decodes the properties String into a HashMap, but the typical caller (SendMessageProcessor) has already decoded the same String moments before. The result is a redundant decode allocation per send (one HashMap + ~14 String substrings + one Node[]). This commit adds a public overload getMessageType(Map) that lets callers pass an already-decoded Map and reuse it. The existing SendMessageRequestHeader overload now delegates to the new overload; behavior is unchanged for callers that don't have a decoded Map. Downstream callers (e.g. SendMessageProcessor) can switch to the new overload in a separate broker-layer commit. --- .../apache/rocketmq/broker/metrics/BrokerMetricsManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/broker/src/main/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManager.java b/broker/src/main/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManager.java index 835e9e98576..6d32c7ae74f 100644 --- a/broker/src/main/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManager.java +++ b/broker/src/main/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManager.java @@ -229,7 +229,10 @@ public static boolean isSystem(String topic, String group) { } public static TopicMessageType getMessageType(SendMessageRequestHeader requestHeader) { - Map properties = MessageDecoder.string2messageProperties(requestHeader.getProperties()); + return getMessageType(MessageDecoder.string2messageProperties(requestHeader.getProperties())); + } + + public static TopicMessageType getMessageType(Map properties) { String traFlag = properties.get(MessageConst.PROPERTY_TRANSACTION_PREPARED); TopicMessageType topicMessageType = TopicMessageType.NORMAL; if (Boolean.parseBoolean(traFlag)) {