This is an automated email from the ASF dual-hosted git repository.

mikexue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/eventmesh.git


The following commit(s) were added to refs/heads/master by this push:
     new c28c4e88d [ISSUE #3733] Invoke method(s) only 
conditionally.[SendAsyncMessageProcessor]
c28c4e88d is described below

commit c28c4e88d8cf6c5bba85975086435bfd83c588c9
Author: pandaapo <[email protected]>
AuthorDate: Wed Apr 19 14:59:36 2023 +0800

    [ISSUE #3733] Invoke method(s) only 
conditionally.[SendAsyncMessageProcessor]
    
    * Fix issue: reuse variable.
    
    * Invoke method(s) only conditionally.
---
 .../http/processor/SendAsyncMessageProcessor.java  |  83 +++++++----------
 .../http/processor/SendSyncMessageProcessor.java   |  99 +++++++++-----------
 .../http/processor/SubscribeProcessor.java         |  59 ++++++------
 .../http/processor/UnSubscribeProcessor.java       | 102 ++++++++++-----------
 4 files changed, 154 insertions(+), 189 deletions(-)

diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SendAsyncMessageProcessor.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SendAsyncMessageProcessor.java
index bbe4bdcaf..e42070061 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SendAsyncMessageProcessor.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SendAsyncMessageProcessor.java
@@ -30,6 +30,7 @@ import 
org.apache.eventmesh.common.protocol.http.common.RequestCode;
 import 
org.apache.eventmesh.common.protocol.http.header.message.SendMessageRequestHeader;
 import 
org.apache.eventmesh.common.protocol.http.header.message.SendMessageResponseHeader;
 import org.apache.eventmesh.common.utils.IPUtils;
+import org.apache.eventmesh.metrics.api.model.HttpSummaryMetrics;
 import org.apache.eventmesh.protocol.api.ProtocolAdaptor;
 import org.apache.eventmesh.protocol.api.ProtocolPluginFactory;
 import org.apache.eventmesh.runtime.acl.Acl;
@@ -46,6 +47,7 @@ import org.apache.eventmesh.runtime.util.EventMeshUtil;
 import org.apache.eventmesh.runtime.util.RemotingHelper;
 import org.apache.eventmesh.trace.api.common.EventMeshTraceConstants;
 
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.nio.charset.StandardCharsets;
@@ -86,10 +88,11 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
         HttpCommand responseEventMeshCommand;
         String localAddress = IPUtils.getLocalAddress();
         HttpCommand request = asyncContext.getRequest();
+        String remoteAddr = 
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
         CMD_LOGGER.info("cmd={}|{}|client2eventMesh|from={}|to={}", 
RequestCode.get(
                 Integer.valueOf(request.getRequestCode())),
             EventMeshConstants.PROTOCOL_HTTP,
-            RemotingHelper.parseChannelRemoteAddr(ctx.channel()), 
localAddress);
+                remoteAddr, localAddress);
 
         SendMessageRequestHeader sendMessageRequestHeader = 
(SendMessageRequestHeader) request.getHeader();
 
@@ -110,9 +113,7 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
             EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
true);
 
         //validate event
-        if (event == null
-            || event.getSource() == null
-            || event.getSpecVersion() == null
+        if (!ObjectUtils.allNotNull(event, event.getSource(), 
event.getSpecVersion())
             || StringUtils.isAnyBlank(event.getId(), event.getType(), 
event.getSubject())) {
             responseEventMeshCommand = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
@@ -120,10 +121,7 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                     
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
             asyncContext.onComplete(responseEventMeshCommand);
 
-            Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
-            TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg(), 
null);
+            spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR);
             return;
         }
 
@@ -140,10 +138,7 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                     
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
             asyncContext.onComplete(responseEventMeshCommand);
 
-            Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
-            TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg(), 
null);
+            spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR);
             return;
         }
 
@@ -161,16 +156,12 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                     EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
             asyncContext.onComplete(responseEventMeshCommand);
 
-            Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
-            TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg(), 
null);
+            spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR);
             return;
         }
 
         //do acl check
         if (eventMeshHttpConfiguration.isEventMeshServerSecurityEnable()) {
-            String remoteAddr = 
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
             String user = 
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.USERNAME)).toString();
             String pass = 
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.PASSWD)).toString();
             String subsystem = 
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.SYS)).toString();
@@ -184,14 +175,12 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                 asyncContext.onComplete(responseEventMeshCommand);
                 ACL_LOGGER.warn("CLIENT HAS NO 
PERMISSION,SendAsyncMessageProcessor send failed", e);
 
-                Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                    
EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, false);
-                TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                    EventMeshRetCode.EVENTMESH_ACL_ERR.getErrMsg(), null);
+                spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_ACL_ERR);
                 return;
             }
         }
 
+        final HttpSummaryMetrics summaryMetrics = 
eventMeshHTTPServer.getMetrics().getSummaryMetrics();
         // control flow rate limit
         if (!eventMeshHTTPServer.getMsgRateLimiter()
             
.tryAcquire(EventMeshConstants.DEFAULT_FASTFAIL_TIMEOUT_IN_MILLISECONDS, 
TimeUnit.MILLISECONDS)) {
@@ -199,13 +188,10 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                 sendMessageResponseHeader,
                 
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getRetCode(),
                     
EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getErrMsg()));
-            
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordHTTPDiscard();
+            summaryMetrics.recordHTTPDiscard();
             asyncContext.onComplete(responseEventMeshCommand);
 
-            Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
-            TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                
EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getErrMsg(), null);
+            spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR);
             return;
         }
 
@@ -218,17 +204,14 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                     
EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getErrMsg()));
             asyncContext.onComplete(responseEventMeshCommand);
 
-            Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
-            TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                
EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getErrMsg(), null);
+            spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR);
 
             return;
         }
 
         String ttl = String.valueOf(EventMeshConstants.DEFAULT_MSG_TTL_MILLS);
-        if 
(StringUtils.isBlank(Objects.requireNonNull(event.getExtension(SendMessageRequestBody.TTL)).toString())
-            && 
!StringUtils.isNumeric(Objects.requireNonNull(event.getExtension(SendMessageRequestBody.TTL)).toString()))
 {
+        String ttlExt = 
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.TTL)).toString();
+        if (StringUtils.isBlank(ttlExt) && !StringUtils.isNumeric(ttlExt)) {
             event = 
CloudEventBuilder.from(event).withExtension(SendMessageRequestBody.TTL, 
ttl).build();
         }
 
@@ -243,10 +226,7 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                     "Event size exceeds the limit: " + 
eventMeshHttpConfiguration.getEventMeshEventSize()));
             asyncContext.onComplete(responseEventMeshCommand);
 
-            Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
-            TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_SIZE_ERR.getErrMsg(), 
null);
+            spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_SIZE_ERR);
             return;
         }
 
@@ -269,16 +249,13 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                     EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg() + 
EventMeshUtil.stackTrace(e, 2)));
             asyncContext.onComplete(responseEventMeshCommand);
 
-            Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
-            TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg(), null);
+            spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR);
             return;
         }
 
         final SendMessageContext sendMessageContext = new 
SendMessageContext(bizNo, event, eventMeshProducer,
             eventMeshHTTPServer);
-        eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsg();
+        summaryMetrics.recordSendMsg();
 
         long startTime = System.currentTimeMillis();
 
@@ -289,7 +266,7 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                 }
                 eventMeshHTTPServer.sendResponse(ctx, 
httpCommand.httpResponse());
 
-                
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordHTTPReqResTimeCost(
+                summaryMetrics.recordHTTPReqResTimeCost(
                     System.currentTimeMillis() - request.getReqTime());
             } catch (Exception ex) {
                 //ignore
@@ -315,7 +292,7 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                                 EventMeshRetCode.SUCCESS.getErrMsg() + 
sendResult.toString()));
                         asyncContext.onComplete(succ, handler);
                         long endTime = System.currentTimeMillis();
-                        
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgCost(endTime 
- startTime);
+                        summaryMetrics.recordSendMsgCost(endTime - startTime);
                         
MESSAGE_LOGGER.info("message|eventMesh2mq|REQ|ASYNC|send2MQCost={}ms|topic={}|bizSeqNo={}|uniqueId={}",
                             endTime - startTime, topic, bizNo, uniqueId);
 
@@ -333,8 +310,8 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
 
                         
eventMeshHTTPServer.getHttpRetryer().pushRetry(sendMessageContext.delay(10000));
                         long endTime = System.currentTimeMillis();
-                        
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgFailed();
-                        
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgCost(endTime 
- startTime);
+                        summaryMetrics.recordSendMsgFailed();
+                        summaryMetrics.recordSendMsgCost(endTime - startTime);
                         
MESSAGE_LOGGER.error("message|eventMesh2mq|REQ|ASYNC|send2MQCost={}ms|topic={}|bizSeqNo={}|uniqueId={}",
                             endTime - startTime, topic, bizNo, uniqueId, 
context.getException());
 
@@ -356,20 +333,24 @@ public class SendAsyncMessageProcessor implements 
HttpRequestProcessor {
                         + EventMeshUtil.stackTrace(ex, 2)));
             asyncContext.onComplete(err);
 
-            Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
-                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
-            TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
-                EventMeshRetCode.EVENTMESH_SEND_ASYNC_MSG_ERR.getErrMsg(), 
null);
+            spanWithException(event, protocolVersion, 
EventMeshRetCode.EVENTMESH_SEND_ASYNC_MSG_ERR);
 
             
eventMeshHTTPServer.getHttpRetryer().pushRetry(sendMessageContext.delay(10000));
             long endTime = System.currentTimeMillis();
             
MESSAGE_LOGGER.error("message|eventMesh2mq|REQ|ASYNC|send2MQCost={}ms|topic={}|bizSeqNo={}|uniqueId={}",
                 endTime - startTime, topic, bizNo, uniqueId, ex);
-            
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgFailed();
-            
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgCost(endTime 
- startTime);
+            summaryMetrics.recordSendMsgFailed();
+            summaryMetrics.recordSendMsgCost(endTime - startTime);
         }
     }
 
+    private void spanWithException(CloudEvent event, String protocolVersion, 
EventMeshRetCode retCode) {
+        Span excepSpan = 
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
 event),
+                EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN, 
false);
+        TraceUtils.finishSpanWithException(excepSpan, 
EventMeshUtil.getCloudEventExtensionMap(protocolVersion, event),
+                retCode.getErrMsg(), null);
+    }
+
     @Override
     public boolean rejectRequest() {
         return false;
diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SendSyncMessageProcessor.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SendSyncMessageProcessor.java
index 4e0430a73..f93fb7855 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SendSyncMessageProcessor.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SendSyncMessageProcessor.java
@@ -17,7 +17,6 @@
 
 package org.apache.eventmesh.runtime.core.protocol.http.processor;
 
-
 import org.apache.eventmesh.api.RequestReplyCallback;
 import org.apache.eventmesh.common.protocol.ProtocolTransportObject;
 import org.apache.eventmesh.common.protocol.http.HttpCommand;
@@ -30,10 +29,12 @@ import 
org.apache.eventmesh.common.protocol.http.header.message.SendMessageReque
 import 
org.apache.eventmesh.common.protocol.http.header.message.SendMessageResponseHeader;
 import org.apache.eventmesh.common.utils.IPUtils;
 import org.apache.eventmesh.common.utils.JsonUtils;
+import org.apache.eventmesh.metrics.api.model.HttpSummaryMetrics;
 import org.apache.eventmesh.protocol.api.ProtocolAdaptor;
 import org.apache.eventmesh.protocol.api.ProtocolPluginFactory;
 import org.apache.eventmesh.runtime.acl.Acl;
 import org.apache.eventmesh.runtime.boot.EventMeshHTTPServer;
+import org.apache.eventmesh.runtime.configuration.EventMeshHTTPConfiguration;
 import org.apache.eventmesh.runtime.constants.EventMeshConstants;
 import org.apache.eventmesh.runtime.core.protocol.http.async.AsyncContext;
 import org.apache.eventmesh.runtime.core.protocol.http.async.CompleteHandler;
@@ -43,6 +44,7 @@ import 
org.apache.eventmesh.runtime.core.protocol.http.producer.SendMessageConte
 import org.apache.eventmesh.runtime.util.EventMeshUtil;
 import org.apache.eventmesh.runtime.util.RemotingHelper;
 
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.nio.charset.StandardCharsets;
@@ -72,17 +74,16 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
         throws Exception {
 
         HttpCommand responseEventMeshCommand;
-
+        HttpCommand request = asyncContext.getRequest();
         final String localAddress = IPUtils.getLocalAddress();
-
+        final String remoteAddr = 
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
         if (log.isInfoEnabled()) {
             log.info("cmd={}|{}|client2eventMesh|from={}|to={}",
-                
RequestCode.get(Integer.valueOf(asyncContext.getRequest().getRequestCode())),
-                EventMeshConstants.PROTOCOL_HTTP,
-                RemotingHelper.parseChannelRemoteAddr(ctx.channel()), 
localAddress);
+                RequestCode.get(Integer.valueOf(request.getRequestCode())),
+                EventMeshConstants.PROTOCOL_HTTP, remoteAddr, localAddress);
         }
 
-        SendMessageRequestHeader sendMessageRequestHeader = 
(SendMessageRequestHeader) asyncContext.getRequest().getHeader();
+        SendMessageRequestHeader sendMessageRequestHeader = 
(SendMessageRequestHeader) request.getHeader();
 
         String protocolType = sendMessageRequestHeader.getProtocolType();
 
@@ -90,22 +91,19 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
 
         final CloudEvent event = 
httpCommandProtocolAdaptor.toCloudEvent(asyncContext.getRequest());
 
+        EventMeshHTTPConfiguration eventMeshHttpConfiguration = 
eventMeshHTTPServer.getEventMeshHttpConfiguration();
         final SendMessageResponseHeader sendMessageResponseHeader =
             SendMessageResponseHeader
-                
.buildHeader(Integer.valueOf(asyncContext.getRequest().getRequestCode()),
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshCluster(),
-                    localAddress,
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEnv(),
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIDC());
+                .buildHeader(Integer.valueOf(request.getRequestCode()),
+                        eventMeshHttpConfiguration.getEventMeshCluster(),
+                        localAddress,
+                        eventMeshHttpConfiguration.getEventMeshEnv(),
+                        eventMeshHttpConfiguration.getEventMeshIDC());
 
         //validate event
-        if (event == null
-            || StringUtils.isBlank(event.getId())
-            || event.getSource() == null
-            || event.getSpecVersion() == null
-            || StringUtils.isBlank(event.getType())
-            || StringUtils.isBlank(event.getSubject())) {
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+        if (!ObjectUtils.allNotNull(event, event.getSource(), 
event.getSpecVersion())
+            || StringUtils.isAnyBlank(event.getId(), event.getType(), 
event.getSubject())) {
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
                 SendMessageResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
@@ -122,11 +120,8 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
             .toString();
 
         //validate event-extension
-        if (StringUtils.isBlank(idc)
-            || StringUtils.isBlank(pid)
-            || !StringUtils.isNumeric(pid)
-            || StringUtils.isBlank(sys)) {
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+        if (StringUtils.isAnyBlank(idc, pid, sys) || 
!StringUtils.isNumeric(pid)) {
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
                 SendMessageResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
@@ -147,13 +142,8 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
             
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.TTL)).toString();
 
         //validate body
-        if (StringUtils.isBlank(bizNo)
-            || StringUtils.isBlank(uniqueId)
-            || StringUtils.isBlank(producerGroup)
-            || StringUtils.isBlank(topic)
-            || event.getData() == null
-            || StringUtils.isBlank(ttl)) {
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+        if (StringUtils.isAnyBlank(bizNo, uniqueId, producerGroup, topic, ttl) 
|| event.getData() == null) {
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
                 SendMessageResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
@@ -163,17 +153,15 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
         }
 
         //do acl check
-        if 
(eventMeshHTTPServer.getEventMeshHttpConfiguration().isEventMeshServerSecurityEnable())
 {
-            final String remoteAddr = 
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
+        if (eventMeshHttpConfiguration.isEventMeshServerSecurityEnable()) {
             final String user = 
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.USERNAME)).toString();
             final String pass = 
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.PASSWD)).toString();
-            final int requestCode = 
Integer.parseInt(asyncContext.getRequest().getRequestCode());
+            final int requestCode = Integer.parseInt(request.getRequestCode());
 
             try {
                 this.acl.doAclCheckInHttpSend(remoteAddr, user, pass, sys, 
topic, requestCode);
             } catch (Exception e) {
-
-                responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+                responseEventMeshCommand = request.createHttpCommandResponse(
                     sendMessageResponseHeader,
                     SendMessageResponseBody
                         
.buildBody(EventMeshRetCode.EVENTMESH_ACL_ERR.getRetCode(),
@@ -187,31 +175,32 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
             }
         }
 
+        final HttpSummaryMetrics summaryMetrics = 
eventMeshHTTPServer.getMetrics().getSummaryMetrics();
         // control flow rate limit
         if (!eventMeshHTTPServer.getMsgRateLimiter()
             
.tryAcquire(EventMeshConstants.DEFAULT_FASTFAIL_TIMEOUT_IN_MILLISECONDS,
                 TimeUnit.MILLISECONDS)) {
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
                 SendMessageResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getRetCode(),
                         
EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getErrMsg()));
-            
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordHTTPDiscard();
+            summaryMetrics.recordHTTPDiscard();
             asyncContext.onComplete(responseEventMeshCommand);
             return;
         }
 
         final String content = new 
String(Objects.requireNonNull(event.getData()).toBytes(), 
StandardCharsets.UTF_8);
-        if (content.length() > 
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize()) {
+        int eventMeshEventSize = 
eventMeshHttpConfiguration.getEventMeshEventSize();
+        if (content.length() > eventMeshEventSize) {
             if (log.isErrorEnabled()) {
-                log.error("Event size exceeds the limit: {}",
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize());
+                log.error("Event size exceeds the limit: {}", 
eventMeshEventSize);
             }
 
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
                 
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-                    "Event size exceeds the limit: " + 
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize()));
+                    "Event size exceeds the limit: " + eventMeshEventSize));
             asyncContext.onComplete(responseEventMeshCommand);
             return;
         }
@@ -220,7 +209,7 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
             
eventMeshHTTPServer.getProducerManager().getEventMeshProducer(producerGroup);
 
         if (!eventMeshProducer.isStarted()) {
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
                 SendMessageResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getRetCode(),
@@ -245,7 +234,7 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
             if (log.isErrorEnabled()) {
                 log.error("msg2MQMsg err, bizSeqNo={}, topic={}", bizNo, 
topic, e);
             }
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
                 SendMessageResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getRetCode(),
@@ -256,9 +245,8 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
         }
 
         final SendMessageContext sendMessageContext =
-            new SendMessageContext(bizNo, newEevent, eventMeshProducer,
-                eventMeshHTTPServer);
-        eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsg();
+            new SendMessageContext(bizNo, newEevent, eventMeshProducer, 
eventMeshHTTPServer);
+        summaryMetrics.recordSendMsg();
 
         final long startTime = System.currentTimeMillis();
 
@@ -270,8 +258,7 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
                         log.debug("{}", httpCommand);
                     }
                     eventMeshHTTPServer.sendResponse(ctx, 
httpCommand.httpResponse());
-                    
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordHTTPReqResTimeCost(
-                        System.currentTimeMillis() - 
asyncContext.getRequest().getReqTime());
+                    
summaryMetrics.recordHTTPReqResTimeCost(System.currentTimeMillis() - 
request.getReqTime());
                 } catch (Exception ex) {
                     log.error("onResponse error", ex);
                     // ignore
@@ -300,7 +287,7 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
                         final String rtnMsg = new 
String(Objects.requireNonNull(newEvent.getData()).toBytes(),
                             StandardCharsets.UTF_8);
 
-                        final HttpCommand succ = 
asyncContext.getRequest().createHttpCommandResponse(
+                        final HttpCommand succ = 
request.createHttpCommandResponse(
                             sendMessageResponseHeader,
                             
SendMessageResponseBody.buildBody(EventMeshRetCode.SUCCESS.getRetCode(),
                                 
JsonUtils.toJSONString(SendMessageResponseBody.ReplyMessage.builder()
@@ -310,7 +297,7 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
                                     .build())));
                         asyncContext.onComplete(succ, handler);
                     } catch (Exception ex) {
-                        final HttpCommand err = 
asyncContext.getRequest().createHttpCommandResponse(
+                        final HttpCommand err = 
request.createHttpCommandResponse(
                             sendMessageResponseHeader,
                             SendMessageResponseBody.buildBody(
                                 
EventMeshRetCode.EVENTMESH_WAITING_RR_MSG_ERR.getRetCode(),
@@ -326,7 +313,7 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
 
                 @Override
                 public void onException(final Throwable e) {
-                    final HttpCommand err = 
asyncContext.getRequest().createHttpCommandResponse(
+                    final HttpCommand err = request.createHttpCommandResponse(
                         sendMessageResponseHeader,
                         SendMessageResponseBody
                             
.buildBody(EventMeshRetCode.EVENTMESH_WAITING_RR_MSG_ERR.getRetCode(),
@@ -344,7 +331,7 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
                 }
             }, Integer.parseInt(ttl));
         } catch (Exception ex) {
-            final HttpCommand err = 
asyncContext.getRequest().createHttpCommandResponse(
+            final HttpCommand err = request.createHttpCommandResponse(
                 sendMessageResponseHeader,
                 SendMessageResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_SEND_SYNC_MSG_ERR.getRetCode(),
@@ -354,8 +341,8 @@ public class SendSyncMessageProcessor implements 
HttpRequestProcessor {
 
             
eventMeshHTTPServer.getHttpRetryer().pushRetry(sendMessageContext.delay(10_000));
             final long endTime = System.currentTimeMillis();
-            
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgFailed();
-            
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgCost(endTime 
- startTime);
+            summaryMetrics.recordSendMsgFailed();
+            summaryMetrics.recordSendMsgCost(endTime - startTime);
 
             if (log.isErrorEnabled()) {
                 log.error(
diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SubscribeProcessor.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SubscribeProcessor.java
index 352ce0dc8..b79a6d2f8 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SubscribeProcessor.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/SubscribeProcessor.java
@@ -28,8 +28,10 @@ import 
org.apache.eventmesh.common.protocol.http.header.client.SubscribeRequestH
 import 
org.apache.eventmesh.common.protocol.http.header.client.SubscribeResponseHeader;
 import org.apache.eventmesh.common.utils.IPUtils;
 import org.apache.eventmesh.common.utils.JsonUtils;
+import org.apache.eventmesh.metrics.api.model.HttpSummaryMetrics;
 import org.apache.eventmesh.runtime.acl.Acl;
 import org.apache.eventmesh.runtime.boot.EventMeshHTTPServer;
+import org.apache.eventmesh.runtime.configuration.EventMeshHTTPConfiguration;
 import org.apache.eventmesh.runtime.constants.EventMeshConstants;
 import org.apache.eventmesh.runtime.core.consumer.ClientInfo;
 import org.apache.eventmesh.runtime.core.consumer.SubscriptionManager;
@@ -67,31 +69,30 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
         throws Exception {
         HttpCommand responseEventMeshCommand;
         final HttpCommand request = asyncContext.getRequest();
-        final Integer requestCode = 
Integer.valueOf(asyncContext.getRequest().getRequestCode());
+        final Integer requestCode = Integer.valueOf(request.getRequestCode());
         final String localAddress = IPUtils.getLocalAddress();
-
+        final String remoteAddr = 
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
         if (log.isInfoEnabled()) {
             log.info("cmd={}|{}|client2eventMesh|from={}|to={}",
                 RequestCode.get(requestCode),
-                EventMeshConstants.PROTOCOL_HTTP,
-                RemotingHelper.parseChannelRemoteAddr(ctx.channel()), 
localAddress);
+                EventMeshConstants.PROTOCOL_HTTP, remoteAddr, localAddress);
         }
 
         final SubscribeRequestHeader subscribeRequestHeader = 
(SubscribeRequestHeader) request.getHeader();
         final SubscribeRequestBody subscribeRequestBody = 
(SubscribeRequestBody) request.getBody();
+        EventMeshHTTPConfiguration eventMeshHttpConfiguration = 
eventMeshHTTPServer.getEventMeshHttpConfiguration();
         final SubscribeResponseHeader subscribeResponseHeader =
             SubscribeResponseHeader
                 .buildHeader(requestCode,
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshCluster(),
-                    localAddress,
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEnv(),
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIDC());
+                        eventMeshHttpConfiguration.getEventMeshCluster(),
+                        localAddress,
+                        eventMeshHttpConfiguration.getEventMeshEnv(),
+                        eventMeshHttpConfiguration.getEventMeshIDC());
 
         //validate header
-        if (StringUtils.isBlank(subscribeRequestHeader.getIdc())
-            || StringUtils.isBlank(subscribeRequestHeader.getPid())
-            || !StringUtils.isNumeric(subscribeRequestHeader.getPid())
-            || StringUtils.isBlank(subscribeRequestHeader.getSys())) {
+        if (StringUtils.isAnyBlank(subscribeRequestHeader.getIdc(),
+                subscribeRequestHeader.getPid(), 
subscribeRequestHeader.getSys())
+            || !StringUtils.isNumeric(subscribeRequestHeader.getPid())) {
             responseEventMeshCommand = request.createHttpCommandResponse(
                 subscribeResponseHeader,
                 SubscribeResponseBody
@@ -102,10 +103,8 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
         }
 
         //validate body
-        if (StringUtils.isBlank(subscribeRequestBody.getUrl())
-            || CollectionUtils.isEmpty(subscribeRequestBody.getTopics())
-            || StringUtils.isBlank(subscribeRequestBody.getConsumerGroup())) {
-
+        if (StringUtils.isAnyBlank(subscribeRequestBody.getUrl(), 
subscribeRequestBody.getConsumerGroup())
+            || CollectionUtils.isEmpty(subscribeRequestBody.getTopics())) {
             responseEventMeshCommand = request.createHttpCommandResponse(
                 subscribeResponseHeader,
                 SubscribeResponseBody
@@ -117,17 +116,17 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
         final List<SubscriptionItem> subTopicList = 
subscribeRequestBody.getTopics();
 
         //do acl check
-        if 
(eventMeshHTTPServer.getEventMeshHttpConfiguration().isEventMeshServerSecurityEnable())
 {
+        if (eventMeshHttpConfiguration.isEventMeshServerSecurityEnable()) {
             for (final SubscriptionItem item : subTopicList) {
                 try {
-                    
this.acl.doAclCheckInHttpReceive(RemotingHelper.parseChannelRemoteAddr(ctx.channel()),
+                    this.acl.doAclCheckInHttpReceive(remoteAddr,
                         subscribeRequestHeader.getUsername(),
                         subscribeRequestHeader.getPasswd(),
                         subscribeRequestHeader.getSys(), item.getTopic(),
                         requestCode);
                 } catch (Exception e) {
 
-                    responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(subscribeResponseHeader,
+                    responseEventMeshCommand = 
request.createHttpCommandResponse(subscribeResponseHeader,
                         
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_ACL_ERR.getRetCode(),
 e.getMessage()));
                     asyncContext.onComplete(responseEventMeshCommand);
 
@@ -144,8 +143,8 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
 
         // validate URL
         try {
-            if (!IPUtils.isValidDomainOrIp(url, 
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIpv4BlackList(),
-                
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIpv6BlackList()))
 {
+            if (!IPUtils.isValidDomainOrIp(url, 
eventMeshHttpConfiguration.getEventMeshIpv4BlackList(),
+                    eventMeshHttpConfiguration.getEventMeshIpv6BlackList())) {
                 log.error("subscriber url {} is not valid", url);
                 responseEventMeshCommand = request.createHttpCommandResponse(
                     subscribeResponseHeader,
@@ -170,7 +169,7 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
 
         // obtain webhook delivery agreement for Abuse Protection
         if 
(!WebhookUtil.obtainDeliveryAgreement(eventMeshHTTPServer.getHttpClientPool().getClient(),
-            url, 
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshWebhookOrigin()))
 {
+            url, eventMeshHttpConfiguration.getEventMeshWebhookOrigin())) {
             log.error("subscriber url {} is not allowed by the target system", 
url);
             responseEventMeshCommand = request.createHttpCommandResponse(
                 subscribeResponseHeader,
@@ -181,17 +180,18 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
             return;
         }
 
-        synchronized 
(eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping()) {
+        SubscriptionManager subscriptionManager = 
eventMeshHTTPServer.getSubscriptionManager();
+        synchronized (subscriptionManager.getLocalClientInfoMapping()) {
             ClientInfo clientInfo = getClientInfo(subscribeRequestHeader);
-            SubscriptionManager subscriptionManager = 
eventMeshHTTPServer.getSubscriptionManager();
             subscriptionManager.registerClient(clientInfo, consumerGroup, 
subTopicList, url);
             subscriptionManager.updateSubscription(clientInfo, consumerGroup, 
url, subTopicList);
 
             final long startTime = System.currentTimeMillis();
+            HttpSummaryMetrics summaryMetrics = 
eventMeshHTTPServer.getMetrics().getSummaryMetrics();
             try {
                 // subscription relationship change notification
                 
eventMeshHTTPServer.getConsumerManager().notifyConsumerManager(consumerGroup,
-                    
eventMeshHTTPServer.getSubscriptionManager().getLocalConsumerGroupMapping().get(consumerGroup));
+                        
subscriptionManager.getLocalConsumerGroupMapping().get(consumerGroup));
 
                 final CompleteHandler<HttpCommand> handler = httpCommand -> {
                     try {
@@ -200,8 +200,7 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
                         }
                         eventMeshHTTPServer.sendResponse(ctx, 
httpCommand.httpResponse());
 
-                        
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordHTTPReqResTimeCost(
-                            System.currentTimeMillis() - request.getReqTime());
+                        
summaryMetrics.recordHTTPReqResTimeCost(System.currentTimeMillis() - 
request.getReqTime());
                     } catch (Exception ex) {
                         log.error("onResponse error", ex);
                     }
@@ -210,7 +209,7 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
                 responseEventMeshCommand = 
request.createHttpCommandResponse(EventMeshRetCode.SUCCESS);
                 asyncContext.onComplete(responseEventMeshCommand, handler);
             } catch (Exception e) {
-                final HttpCommand err = 
asyncContext.getRequest().createHttpCommandResponse(
+                final HttpCommand err = request.createHttpCommandResponse(
                     subscribeResponseHeader,
                     SubscribeResponseBody
                         
.buildBody(EventMeshRetCode.EVENTMESH_SUBSCRIBE_ERR.getRetCode(),
@@ -226,8 +225,8 @@ public class SubscribeProcessor implements 
HttpRequestProcessor {
                         
JsonUtils.toJSONString(subscribeRequestBody.getTopics()),
                         subscribeRequestBody.getUrl(), e);
                 }
-                
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgFailed();
-                
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgCost(endTime 
- startTime);
+                summaryMetrics.recordSendMsgFailed();
+                summaryMetrics.recordSendMsgCost(endTime - startTime);
             }
         }
     }
diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/UnSubscribeProcessor.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/UnSubscribeProcessor.java
index 83331458a..d5c72ee51 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/UnSubscribeProcessor.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/UnSubscribeProcessor.java
@@ -26,8 +26,11 @@ import 
org.apache.eventmesh.common.protocol.http.header.client.UnSubscribeReques
 import 
org.apache.eventmesh.common.protocol.http.header.client.UnSubscribeResponseHeader;
 import org.apache.eventmesh.common.utils.IPUtils;
 import org.apache.eventmesh.common.utils.JsonUtils;
+import org.apache.eventmesh.metrics.api.model.HttpSummaryMetrics;
 import org.apache.eventmesh.runtime.boot.EventMeshHTTPServer;
+import org.apache.eventmesh.runtime.configuration.EventMeshHTTPConfiguration;
 import org.apache.eventmesh.runtime.constants.EventMeshConstants;
+import org.apache.eventmesh.runtime.core.consumer.SubscriptionManager;
 import org.apache.eventmesh.runtime.core.consumergroup.ConsumerGroupConf;
 import org.apache.eventmesh.runtime.core.consumergroup.ConsumerGroupTopicConf;
 import org.apache.eventmesh.runtime.core.protocol.http.async.AsyncContext;
@@ -48,6 +51,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import io.netty.channel.ChannelHandlerContext;
 
@@ -67,31 +71,30 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
     public void processRequest(final ChannelHandlerContext ctx, final 
AsyncContext<HttpCommand> asyncContext)
         throws Exception {
         HttpCommand responseEventMeshCommand;
+        final HttpCommand request = asyncContext.getRequest();
         final String localAddress = IPUtils.getLocalAddress();
         if (log.isInfoEnabled()) {
             log.info("cmd={}|{}|client2eventMesh|from={}|to={}",
-                
RequestCode.get(Integer.valueOf(asyncContext.getRequest().getRequestCode())),
+                RequestCode.get(Integer.valueOf(request.getRequestCode())),
                 EventMeshConstants.PROTOCOL_HTTP,
                 RemotingHelper.parseChannelRemoteAddr(ctx.channel()), 
localAddress);
         }
 
-        final UnSubscribeRequestHeader unSubscribeRequestHeader =
-            (UnSubscribeRequestHeader) asyncContext.getRequest().getHeader();
-        final UnSubscribeRequestBody unSubscribeRequestBody =
-            (UnSubscribeRequestBody) asyncContext.getRequest().getBody();
+        final UnSubscribeRequestHeader unSubscribeRequestHeader =  
(UnSubscribeRequestHeader) request.getHeader();
+        final UnSubscribeRequestBody unSubscribeRequestBody = 
(UnSubscribeRequestBody) request.getBody();
+        EventMeshHTTPConfiguration eventMeshHttpConfiguration = 
eventMeshHTTPServer.getEventMeshHttpConfiguration();
         final UnSubscribeResponseHeader unSubscribeResponseHeader =
             UnSubscribeResponseHeader
-                
.buildHeader(Integer.valueOf(asyncContext.getRequest().getRequestCode()),
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshCluster(),
-                    localAddress, 
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEnv(),
-                    
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIDC());
+                .buildHeader(Integer.valueOf(request.getRequestCode()),
+                        eventMeshHttpConfiguration.getEventMeshCluster(),
+                        localAddress, 
eventMeshHttpConfiguration.getEventMeshEnv(),
+                        eventMeshHttpConfiguration.getEventMeshIDC());
 
         //validate header
-        if (StringUtils.isBlank(unSubscribeRequestHeader.getIdc())
-            || StringUtils.isBlank(unSubscribeRequestHeader.getPid())
-            || !StringUtils.isNumeric(unSubscribeRequestHeader.getPid())
-            || StringUtils.isBlank(unSubscribeRequestHeader.getSys())) {
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+        if (StringUtils.isAnyBlank(unSubscribeRequestHeader.getIdc(), 
unSubscribeRequestHeader.getPid(),
+                unSubscribeRequestHeader.getSys())
+            || !StringUtils.isNumeric(unSubscribeRequestHeader.getPid())) {
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 unSubscribeResponseHeader,
                 UnSubscribeResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
@@ -101,11 +104,9 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
         }
 
         //validate body
-        if (StringUtils.isBlank(unSubscribeRequestBody.getUrl())
-            || CollectionUtils.isEmpty(unSubscribeRequestBody.getTopics())
-            || StringUtils.isBlank(unSubscribeRequestBody.getConsumerGroup())) 
{
-
-            responseEventMeshCommand = 
asyncContext.getRequest().createHttpCommandResponse(
+        if (StringUtils.isAnyBlank(unSubscribeRequestBody.getUrl(), 
unSubscribeRequestBody.getConsumerGroup())
+            || CollectionUtils.isEmpty(unSubscribeRequestBody.getTopics())) {
+            responseEventMeshCommand = request.createHttpCommandResponse(
                 unSubscribeResponseHeader,
                 UnSubscribeResponseBody
                     
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
@@ -118,27 +119,29 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
         final String consumerGroup = unSubscribeRequestBody.getConsumerGroup();
         final String unSubscribeUrl = unSubscribeRequestBody.getUrl();
         final List<String> unSubTopicList = unSubscribeRequestBody.getTopics();
-
+        HttpSummaryMetrics summaryMetrics = 
eventMeshHTTPServer.getMetrics().getSummaryMetrics();
         final CompleteHandler<HttpCommand> handler = httpCommand -> {
             try {
                 if (log.isDebugEnabled()) {
                     log.debug("{}", httpCommand);
                 }
                 eventMeshHTTPServer.sendResponse(ctx, 
httpCommand.httpResponse());
-                
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordHTTPReqResTimeCost(
-                    System.currentTimeMillis() - 
asyncContext.getRequest().getReqTime());
+                
summaryMetrics.recordHTTPReqResTimeCost(System.currentTimeMillis() - 
request.getReqTime());
             } catch (Exception ex) {
                 // ignore
             }
         };
 
-        synchronized 
(eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping()) {
+        SubscriptionManager subscriptionManager = 
eventMeshHTTPServer.getSubscriptionManager();
+        ConcurrentHashMap<String, ConsumerGroupConf> localConsumerGroupMap =
+                subscriptionManager.getLocalConsumerGroupMapping();
+        synchronized (subscriptionManager.getLocalClientInfoMapping()) {
             boolean isChange = true;
 
             registerClient(unSubscribeRequestHeader, consumerGroup, 
unSubTopicList, unSubscribeUrl);
 
             for (final String unSubTopic : unSubTopicList) {
-                final List<Client> groupTopicClients = 
eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping()
+                final List<Client> groupTopicClients = 
subscriptionManager.getLocalClientInfoMapping()
                     .get(consumerGroup + "@" + unSubTopic);
 
                 final Iterator<Client> clientIterator = 
groupTopicClients.iterator();
@@ -164,30 +167,24 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
                         }
 
                     }
-                    synchronized 
(eventMeshHTTPServer.getSubscriptionManager().getLocalConsumerGroupMapping()) {
-                        final ConsumerGroupConf consumerGroupConf =
-                            
eventMeshHTTPServer.getSubscriptionManager().getLocalConsumerGroupMapping().get(consumerGroup);
 
-                        final Map<String, ConsumerGroupTopicConf> map =
-                            consumerGroupConf.getConsumerGroupTopicConf();
+                    synchronized (localConsumerGroupMap) {
+                        final ConsumerGroupConf consumerGroupConf = 
localConsumerGroupMap.get(consumerGroup);
+
+                        final Map<String, ConsumerGroupTopicConf> map = 
consumerGroupConf.getConsumerGroupTopicConf();
                         for (final Map.Entry<String, ConsumerGroupTopicConf> 
topicConf : map.entrySet()) {
                             // only modify the topic to subscribe
                             if (StringUtils.equals(unSubTopic, 
topicConf.getKey())) {
-                                final ConsumerGroupTopicConf latestTopicConf =
-                                    new ConsumerGroupTopicConf();
+                                final ConsumerGroupTopicConf latestTopicConf = 
new ConsumerGroupTopicConf();
                                 
latestTopicConf.setConsumerGroup(consumerGroup);
                                 latestTopicConf.setTopic(unSubTopic);
-                                latestTopicConf
-                                    
.setSubscriptionItem(topicConf.getValue().getSubscriptionItem());
+                                
latestTopicConf.setSubscriptionItem(topicConf.getValue().getSubscriptionItem());
                                 latestTopicConf.setUrls(clientUrls);
-
                                 latestTopicConf.setIdcUrls(idcUrls);
-
                                 map.put(unSubTopic, latestTopicConf);
                             }
                         }
-                        
eventMeshHTTPServer.getSubscriptionManager().getLocalConsumerGroupMapping()
-                            .put(consumerGroup, consumerGroupConf);
+                        localConsumerGroupMap.put(consumerGroup, 
consumerGroupConf);
                     }
                 } else {
                     isChange = false;
@@ -199,14 +196,14 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
             if (isChange) {
                 try {
                     
eventMeshHTTPServer.getConsumerManager().notifyConsumerManager(consumerGroup,
-                        
eventMeshHTTPServer.getSubscriptionManager().getLocalConsumerGroupMapping().get(consumerGroup));
+                            localConsumerGroupMap.get(consumerGroup));
 
                     responseEventMeshCommand =
-                        
asyncContext.getRequest().createHttpCommandResponse(EventMeshRetCode.SUCCESS);
+                            
request.createHttpCommandResponse(EventMeshRetCode.SUCCESS);
                     asyncContext.onComplete(responseEventMeshCommand, handler);
 
                 } catch (Exception e) {
-                    final HttpCommand err = 
asyncContext.getRequest().createHttpCommandResponse(
+                    final HttpCommand err = request.createHttpCommandResponse(
                         unSubscribeResponseHeader,
                         UnSubscribeResponseBody
                             
.buildBody(EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR.getRetCode(),
@@ -218,8 +215,8 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
                         endTime - startTime,
                         
JsonUtils.toJSONString(unSubscribeRequestBody.getTopics()),
                         unSubscribeRequestBody.getUrl(), e);
-                    
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgFailed();
-                    
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgCost(endTime 
- startTime);
+                    summaryMetrics.recordSendMsgFailed();
+                    summaryMetrics.recordSendMsgCost(endTime - startTime);
                 }
             } else {
                 //remove
@@ -227,16 +224,16 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
                     eventMeshHTTPServer.getConsumerManager()
                         .notifyConsumerManager(consumerGroup, null);
                     responseEventMeshCommand =
-                        
asyncContext.getRequest().createHttpCommandResponse(EventMeshRetCode.SUCCESS);
+                            
request.createHttpCommandResponse(EventMeshRetCode.SUCCESS);
                     asyncContext.onComplete(responseEventMeshCommand, handler);
                     // clean ClientInfo
-                    
eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping().keySet()
+                    subscriptionManager.getLocalClientInfoMapping().keySet()
                         .removeIf(s -> StringUtils.contains(s, consumerGroup));
                     // clean ConsumerGroupInfo
-                    
eventMeshHTTPServer.getSubscriptionManager().getLocalConsumerGroupMapping().keySet()
+                    localConsumerGroupMap.keySet()
                         .removeIf(s -> StringUtils.equals(consumerGroup, s));
                 } catch (Exception e) {
-                    final HttpCommand err = 
asyncContext.getRequest().createHttpCommandResponse(
+                    final HttpCommand err = request.createHttpCommandResponse(
                         unSubscribeResponseHeader,
                         UnSubscribeResponseBody
                             
.buildBody(EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR.getRetCode(),
@@ -248,8 +245,8 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
                             + "|topic={}|url={}", endTime - startTime,
                         
JsonUtils.toJSONString(unSubscribeRequestBody.getTopics()),
                         unSubscribeRequestBody.getUrl(), e);
-                    
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgFailed();
-                    
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgCost(endTime 
- startTime);
+                    summaryMetrics.recordSendMsgFailed();
+                    summaryMetrics.recordSendMsgCost(endTime - startTime);
                 }
             }
         }
@@ -277,9 +274,10 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
             client.setLastUpTime(new Date());
 
             final String groupTopicKey = client.getConsumerGroup() + "@" + 
client.getTopic();
-            if 
(eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping().containsKey(groupTopicKey))
 {
-                final List<Client> localClients =
-                    
eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping().get(groupTopicKey);
+            ConcurrentHashMap<String, List<Client>> localClientInfoMap = 
eventMeshHTTPServer.getSubscriptionManager()
+                    .getLocalClientInfoMapping();
+            if (localClientInfoMap.containsKey(groupTopicKey)) {
+                final List<Client> localClients = 
localClientInfoMap.get(groupTopicKey);
                 boolean isContains = false;
                 for (final Client localClient : localClients) {
                     if (StringUtils.equals(localClient.getUrl(), 
client.getUrl())) {
@@ -294,7 +292,7 @@ public class UnSubscribeProcessor implements 
HttpRequestProcessor {
             } else {
                 final List<Client> clients = new ArrayList<>();
                 clients.add(client);
-                
eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping().put(groupTopicKey,
 clients);
+                localClientInfoMap.put(groupTopicKey, clients);
             }
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to