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 02b9448e9 [ISSUE #3820]HttpRequestProcessor and its subclasses can be
refactored. (#3842)
02b9448e9 is described below
commit 02b9448e96c530ebb70f4560f7df08b7ad449ac7
Author: pandaapo <[email protected]>
AuthorDate: Fri May 5 20:48:31 2023 +0800
[ISSUE #3820]HttpRequestProcessor and its subclasses can be refactored.
(#3842)
* Refactor HttpRequestProcessor and its subclasses.
* Refactor HttpRequestProcessor's subclasses.
* Fix checkstyle error.
* Revoke controversial import static.
* Fix compile error.
---
.../http/processor/AdminMetricsProcessor.java | 16 +-
.../http/processor/AdminShutdownProcessor.java | 8 +-
.../http/processor/BatchSendMessageProcessor.java | 177 ++++++++------------
.../processor/BatchSendMessageV2Processor.java | 177 +++++++-------------
.../http/processor/HeartBeatProcessor.java | 93 +++++------
.../http/processor/ReplyMessageProcessor.java | 185 ++++++++-------------
.../http/processor/SendAsyncMessageProcessor.java | 113 +++++--------
.../http/processor/SendSyncMessageProcessor.java | 121 ++++----------
.../http/processor/SubscribeProcessor.java | 74 +++------
.../http/processor/UnSubscribeProcessor.java | 48 ++----
.../http/processor/inf/HttpRequestProcessor.java | 32 +++-
11 files changed, 382 insertions(+), 662 deletions(-)
diff --git
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/AdminMetricsProcessor.java
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/AdminMetricsProcessor.java
index a558b8704..817d339b6 100644
---
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/AdminMetricsProcessor.java
+++
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/AdminMetricsProcessor.java
@@ -24,24 +24,14 @@ import
org.apache.eventmesh.runtime.core.protocol.http.processor.inf.HttpRequest
import io.netty.channel.ChannelHandlerContext;
+import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
+@RequiredArgsConstructor
public class AdminMetricsProcessor implements HttpRequestProcessor {
- private EventMeshHTTPServer eventMeshHTTPServer;
-
- public AdminMetricsProcessor(EventMeshHTTPServer eventMeshHTTPServer) {
- this.eventMeshHTTPServer = eventMeshHTTPServer;
- }
+ private final EventMeshHTTPServer eventMeshHTTPServer;
@Override
public void processRequest(ChannelHandlerContext ctx,
AsyncContext<HttpCommand> asyncContext) throws Exception {
}
-
- @Override
- public boolean rejectRequest() {
- return false;
- }
}
diff --git
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/AdminShutdownProcessor.java
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/AdminShutdownProcessor.java
index 641ddd8b9..d0b11f972 100644
---
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/AdminShutdownProcessor.java
+++
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/AdminShutdownProcessor.java
@@ -34,6 +34,7 @@ import io.netty.channel.ChannelHandlerContext;
import lombok.RequiredArgsConstructor;
+
@RequiredArgsConstructor
public class AdminShutdownProcessor implements HttpRequestProcessor {
@@ -47,16 +48,11 @@ public class AdminShutdownProcessor implements
HttpRequestProcessor {
String remoteAddr =
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
cmdLogger.info("cmd={}|{}|client2eventMesh|from={}|to={}",
RequestCode.get(Integer.valueOf(asyncContext.getRequest().getRequestCode())),
- EventMeshConstants.PROTOCOL_HTTP, remoteAddr,
IPUtils.getLocalAddress());
+ EventMeshConstants.PROTOCOL_HTTP, remoteAddr,
IPUtils.getLocalAddress());
eventMeshServer.shutdown();
HttpCommand responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(EventMeshRetCode.SUCCESS);
asyncContext.onComplete(responseEventMeshCommand);
}
-
- @Override
- public boolean rejectRequest() {
- return false;
- }
}
diff --git
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/BatchSendMessageProcessor.java
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/BatchSendMessageProcessor.java
index 277d64142..22a05f37f 100644
---
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/BatchSendMessageProcessor.java
+++
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/BatchSendMessageProcessor.java
@@ -20,22 +20,24 @@ package
org.apache.eventmesh.runtime.core.protocol.http.processor;
import org.apache.eventmesh.api.SendCallback;
import org.apache.eventmesh.api.SendResult;
import org.apache.eventmesh.api.exception.OnExceptionContext;
+import org.apache.eventmesh.common.Constants;
import org.apache.eventmesh.common.protocol.ProtocolTransportObject;
import org.apache.eventmesh.common.protocol.http.HttpCommand;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageBatchRequestBody;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageBatchResponseBody;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageRequestBody;
-import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageResponseBody;
import org.apache.eventmesh.common.protocol.http.common.EventMeshRetCode;
import org.apache.eventmesh.common.protocol.http.common.ProtocolKey;
import org.apache.eventmesh.common.protocol.http.common.RequestCode;
import
org.apache.eventmesh.common.protocol.http.header.message.SendMessageBatchRequestHeader;
import
org.apache.eventmesh.common.protocol.http.header.message.SendMessageBatchResponseHeader;
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;
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.processor.inf.HttpRequestProcessor;
@@ -44,13 +46,12 @@ import
org.apache.eventmesh.runtime.core.protocol.http.producer.SendMessageConte
import org.apache.eventmesh.runtime.util.RemotingHelper;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
@@ -79,37 +80,34 @@ public class BatchSendMessageProcessor implements
HttpRequestProcessor {
this.acl = eventMeshHTTPServer.getAcl();
}
-
-
@Override
public void processRequest(ChannelHandlerContext ctx,
AsyncContext<HttpCommand> asyncContext) throws Exception {
HttpCommand responseEventMeshCommand;
String localAddress = IPUtils.getLocalAddress();
+ HttpCommand request = asyncContext.getRequest();
cmdLogger.info("cmd={}|{}|client2eventMesh|from={}|to={}",
RequestCode.get(
- Integer.valueOf(asyncContext.getRequest().getRequestCode())),
+ Integer.valueOf(request.getRequestCode())),
EventMeshConstants.PROTOCOL_HTTP,
RemotingHelper.parseChannelRemoteAddr(ctx.channel()),
localAddress);
SendMessageBatchRequestHeader sendMessageBatchRequestHeader =
- (SendMessageBatchRequestHeader)
asyncContext.getRequest().getHeader();
+ (SendMessageBatchRequestHeader) request.getHeader();
+ EventMeshHTTPConfiguration httpConfiguration =
eventMeshHTTPServer.getEventMeshHttpConfiguration();
SendMessageBatchResponseHeader sendMessageBatchResponseHeader =
-
SendMessageBatchResponseHeader.buildHeader(Integer.valueOf(asyncContext.getRequest().getRequestCode()),
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshCluster(),
- localAddress,
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEnv(),
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIDC());
+
SendMessageBatchResponseHeader.buildHeader(Integer.valueOf(request.getRequestCode()),
+ httpConfiguration.getEventMeshCluster(),
+ localAddress, httpConfiguration.getEventMeshEnv(),
+ httpConfiguration.getEventMeshIDC());
String protocolType = sendMessageBatchRequestHeader.getProtocolType();
ProtocolAdaptor<ProtocolTransportObject> httpCommandProtocolAdaptor =
ProtocolPluginFactory.getProtocolAdaptor(protocolType);
- List<CloudEvent> eventList =
httpCommandProtocolAdaptor.toBatchCloudEvent(asyncContext.getRequest());
+ List<CloudEvent> eventList =
httpCommandProtocolAdaptor.toBatchCloudEvent(request);
if (CollectionUtils.isEmpty(eventList)) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
SendMessageBatchResponseBody.class);
return;
}
@@ -117,89 +115,68 @@ public class BatchSendMessageProcessor implements
HttpRequestProcessor {
String producerGroup = "";
int eventSize = eventList.size();
- if (eventSize >
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventBatchSize())
{
+ if (eventSize > httpConfiguration.getEventMeshEventBatchSize()) {
batchMessageLogger.error("Event batch size exceeds the limit: {}",
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventBatchSize());
-
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- "Event batch size exceeds the limit: " +
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventBatchSize()));
- asyncContext.onComplete(responseEventMeshCommand);
+ httpConfiguration.getEventMeshEventBatchSize());
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR,
+ "Event batch size exceeds the limit: " +
httpConfiguration.getEventMeshEventBatchSize(),
+ SendMessageBatchResponseBody.class);
return;
}
for (CloudEvent event : eventList) {
//validate event
- if (StringUtils.isBlank(event.getId())
- || event.getSource() == null
- || event.getSpecVersion() == null
- || StringUtils.isBlank(event.getType())
- || StringUtils.isBlank(event.getSubject())) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ if (!ObjectUtils.allNotNull(event.getSource(),
event.getSpecVersion())
+ || StringUtils.isAnyBlank(event.getId(), event.getType(),
event.getSubject())) {
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SendMessageBatchResponseBody.class);
return;
}
- String content = event.getData() == null ? "" : new
String(event.getData().toBytes(), StandardCharsets.UTF_8);
- if (content.length() >
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize()) {
+ String content = event.getData() == null ? "" : new
String(event.getData().toBytes(), Constants.DEFAULT_CHARSET);
+ if (content.length() > httpConfiguration.getEventMeshEventSize()) {
batchMessageLogger.error("Event size exceeds the limit: {}",
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize());
-
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
- "Event size exceeds the limit: " +
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize()));
- asyncContext.onComplete(responseEventMeshCommand);
+ httpConfiguration.getEventMeshEventSize());
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR,
+ "Event size exceeds the limit: " +
httpConfiguration.getEventMeshEventSize(),
+ SendMessageBatchResponseBody.class);
return;
}
- String idc =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.IDC)).toString();
- String pid =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.PID)).toString();
- String sys =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.SYS)).toString();
+ String idc = getExtension(event,
ProtocolKey.ClientInstanceKey.IDC);
+ String pid = getExtension(event,
ProtocolKey.ClientInstanceKey.PID);
+ String sys = getExtension(event,
ProtocolKey.ClientInstanceKey.SYS);
//validate event-extension
- if (StringUtils.isBlank(idc)
- || StringUtils.isBlank(pid)
- || !StringUtils.isNumeric(pid)
- || StringUtils.isBlank(sys)) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ if (StringUtils.isAnyBlank(idc, pid, sys)
+ || !StringUtils.isNumeric(pid)) {
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SendMessageBatchResponseBody.class);
return;
}
- batchId =
Objects.requireNonNull(event.getExtension(SendMessageBatchRequestBody.BATCHID)).toString();
- producerGroup =
Objects.requireNonNull(event.getExtension(SendMessageBatchRequestBody.PRODUCERGROUP)).toString();
- eventSize =
Integer.parseInt(Objects.requireNonNull(event.getExtension(SendMessageBatchRequestBody.SIZE)).toString());
+ batchId = getExtension(event, SendMessageBatchRequestBody.BATCHID);
+ producerGroup = getExtension(event,
SendMessageBatchRequestBody.PRODUCERGROUP);
+ eventSize = Integer.parseInt(getExtension(event,
SendMessageBatchRequestBody.SIZE));
CloudEventData eventData = event.getData();
- if (eventData == null || StringUtils.isBlank(batchId)
- || StringUtils.isBlank(producerGroup)
+ if (eventData == null || StringUtils.isAnyBlank(batchId,
producerGroup)
|| eventSize != eventList.size()) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
SendMessageBatchResponseBody.class);
return;
}
}
+ HttpSummaryMetrics summaryMetrics =
eventMeshHTTPServer.getMetrics().getSummaryMetrics();
if (!eventMeshHTTPServer.getBatchRateLimiter()
.tryAcquire(eventSize,
EventMeshConstants.DEFAULT_FASTFAIL_TIMEOUT_IN_MILLISECONDS,
TimeUnit.MILLISECONDS)) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_BATCH_SPEED_OVER_LIMIT_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_BATCH_SPEED_OVER_LIMIT_ERR.getErrMsg()));
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendBatchMsgDiscard(eventSize);
- asyncContext.onComplete(responseEventMeshCommand);
+ summaryMetrics.recordSendBatchMsgDiscard(eventSize);
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_BATCH_SPEED_OVER_LIMIT_ERR,
null, SendMessageBatchResponseBody.class);
return;
}
@@ -208,49 +185,41 @@ public class BatchSendMessageProcessor implements
HttpRequestProcessor {
batchEventMeshProducer.getMqProducerWrapper().getMeshMQProducer().setExtFields();
if (!batchEventMeshProducer.isStarted()) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_BATCH_PRODUCER_STOPED_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_BATCH_PRODUCER_STOPED_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_BATCH_PRODUCER_STOPED_ERR,
null, SendMessageBatchResponseBody.class);
return;
}
final long batchStartTime = System.currentTimeMillis();
String remoteAddr =
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
- int requestCode =
Integer.parseInt(asyncContext.getRequest().getRequestCode());
+ int requestCode = Integer.parseInt(request.getRequestCode());
Map<String, List<CloudEvent>> topicBatchMessageMappings = new
ConcurrentHashMap<String, List<CloudEvent>>();
for (CloudEvent cloudEvent : eventList) {
- if (StringUtils.isBlank(cloudEvent.getSubject())
- || cloudEvent.getData() == null) {
+ if (StringUtils.isBlank(cloudEvent.getSubject()) ||
cloudEvent.getData() == null) {
continue;
}
- String user =
Objects.requireNonNull(cloudEvent.getExtension(ProtocolKey.ClientInstanceKey.USERNAME)).toString();
- String pass =
Objects.requireNonNull(cloudEvent.getExtension(ProtocolKey.ClientInstanceKey.PASSWD)).toString();
- String subsystem =
Objects.requireNonNull(cloudEvent.getExtension(ProtocolKey.ClientInstanceKey.SYS)).toString();
+ String user = getExtension(cloudEvent,
ProtocolKey.ClientInstanceKey.USERNAME);
+ String pass = getExtension(cloudEvent,
ProtocolKey.ClientInstanceKey.PASSWD);
+ String subsystem = getExtension(cloudEvent,
ProtocolKey.ClientInstanceKey.SYS);
//do acl check
- if
(eventMeshHTTPServer.getEventMeshHttpConfiguration().isEventMeshServerSecurityEnable())
{
+ if (httpConfiguration.isEventMeshServerSecurityEnable()) {
try {
this.acl.doAclCheckInHttpSend(remoteAddr, user, pass,
subsystem, cloudEvent.getSubject(), requestCode);
} catch (Exception e) {
-
-
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_ACL_ERR.getRetCode(),
e.getMessage()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_ACL_ERR,
e.getMessage(), SendMessageBatchResponseBody.class);
aclLogger.warn("CLIENT HAS NO
PERMISSION,BatchSendMessageProcessor send failed", e);
return;
}
}
try {
- String ttl =
Objects.requireNonNull(cloudEvent.getExtension(SendMessageRequestBody.TTL)).toString();
+ String ttl = getExtension(cloudEvent,
SendMessageRequestBody.TTL);
if (StringUtils.isBlank(ttl) || !StringUtils.isNumeric(ttl)) {
cloudEvent = CloudEventBuilder.from(cloudEvent)
@@ -277,18 +246,15 @@ public class BatchSendMessageProcessor implements
HttpRequestProcessor {
}
if (CollectionUtils.isEmpty(eventList)) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
SendMessageBatchResponseBody.class);
return;
}
long delta = eventSize;
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendBatchMsg(delta);
+ summaryMetrics.recordSendBatchMsg(delta);
- if
(eventMeshHTTPServer.getEventMeshHttpConfiguration().isEventMeshServerBatchMsgBatchEnabled())
{
+ if (httpConfiguration.isEventMeshServerBatchMsgBatchEnabled()) {
for (List<CloudEvent> eventlist :
topicBatchMessageMappings.values()) {
// TODO: Implementation in API. Consider whether to put it in
the plug-in.
CloudEvent event = null;
@@ -330,21 +296,12 @@ public class BatchSendMessageProcessor implements
HttpRequestProcessor {
}
long batchEndTime = System.currentTimeMillis();
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordBatchSendMsgCost(batchEndTime
- batchStartTime);
+ summaryMetrics.recordBatchSendMsgCost(batchEndTime - batchStartTime);
batchMessageLogger.debug("batchMessage|eventMesh2mq|REQ|ASYNC|batchId={}|send2MQCost={}ms|msgNum={}|topics={}",
batchId, batchEndTime - batchStartTime, eventSize,
topicBatchMessageMappings.keySet());
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchResponseHeader,
-
SendMessageBatchResponseBody.buildBody(EventMeshRetCode.SUCCESS.getRetCode(),
- EventMeshRetCode.SUCCESS.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext,
sendMessageBatchResponseHeader, EventMeshRetCode.SUCCESS, null,
+ SendMessageBatchResponseBody.class);
return;
}
-
- @Override
- public boolean rejectRequest() {
- return false;
- }
}
diff --git
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/BatchSendMessageV2Processor.java
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/BatchSendMessageV2Processor.java
index 64bd8f15f..e32bfd3cb 100644
---
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/BatchSendMessageV2Processor.java
+++
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/BatchSendMessageV2Processor.java
@@ -20,21 +20,23 @@ package
org.apache.eventmesh.runtime.core.protocol.http.processor;
import org.apache.eventmesh.api.SendCallback;
import org.apache.eventmesh.api.SendResult;
import org.apache.eventmesh.api.exception.OnExceptionContext;
+import org.apache.eventmesh.common.Constants;
import org.apache.eventmesh.common.protocol.ProtocolTransportObject;
import org.apache.eventmesh.common.protocol.http.HttpCommand;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageBatchV2RequestBody;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageBatchV2ResponseBody;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageRequestBody;
-import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageResponseBody;
import org.apache.eventmesh.common.protocol.http.common.EventMeshRetCode;
import org.apache.eventmesh.common.protocol.http.common.ProtocolKey;
import org.apache.eventmesh.common.protocol.http.common.RequestCode;
import
org.apache.eventmesh.common.protocol.http.header.message.SendMessageBatchV2RequestHeader;
import
org.apache.eventmesh.common.protocol.http.header.message.SendMessageBatchV2ResponseHeader;
+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.processor.inf.HttpRequestProcessor;
@@ -43,9 +45,9 @@ 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;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@@ -77,8 +79,6 @@ public class BatchSendMessageV2Processor implements
HttpRequestProcessor {
@Override
public void processRequest(ChannelHandlerContext ctx,
AsyncContext<HttpCommand> asyncContext)
throws Exception {
-
- HttpCommand responseEventMeshCommand;
final HttpCommand request = asyncContext.getRequest();
final Integer requestCode = Integer.valueOf(request.getRequestCode());
@@ -89,94 +89,66 @@ public class BatchSendMessageV2Processor implements
HttpRequestProcessor {
RemotingHelper.parseChannelRemoteAddr(ctx.channel()));
SendMessageBatchV2RequestHeader sendMessageBatchV2RequestHeader =
- (SendMessageBatchV2RequestHeader)
asyncContext.getRequest().getHeader();
+ (SendMessageBatchV2RequestHeader) request.getHeader();
String protocolType =
sendMessageBatchV2RequestHeader.getProtocolType();
ProtocolAdaptor<ProtocolTransportObject> httpCommandProtocolAdaptor =
ProtocolPluginFactory.getProtocolAdaptor(protocolType);
- CloudEvent event =
httpCommandProtocolAdaptor.toCloudEvent(asyncContext.getRequest());
+ CloudEvent event = httpCommandProtocolAdaptor.toCloudEvent(request);
+ EventMeshHTTPConfiguration httpConfiguration =
eventMeshHTTPServer.getEventMeshHttpConfiguration();
SendMessageBatchV2ResponseHeader sendMessageBatchV2ResponseHeader =
SendMessageBatchV2ResponseHeader.buildHeader(
- requestCode,
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshCluster(),
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEnv(),
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIDC()
+ requestCode,
+ httpConfiguration.getEventMeshCluster(),
+ httpConfiguration.getEventMeshEnv(),
+ httpConfiguration.getEventMeshIDC()
);
// todo: use validate processor to check
//validate event
- if (StringUtils.isBlank(event.getId())
- || event.getSource() == null
- || event.getSpecVersion() == null
- || StringUtils.isBlank(event.getType())
- || StringUtils.isBlank(event.getSubject())) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
- SendMessageBatchV2ResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ if (!ObjectUtils.allNotNull(event.getSource(), event.getSpecVersion())
+ || StringUtils.isAnyBlank(event.getId(), event.getType(),
event.getSubject())) {
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SendMessageBatchV2ResponseBody.class);
return;
}
- String idc =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.IDC))
- .toString();
- String pid =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.PID))
- .toString();
- String sys =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.SYS))
- .toString();
+ String idc = getExtension(event, ProtocolKey.ClientInstanceKey.IDC);
+ String pid = getExtension(event, ProtocolKey.ClientInstanceKey.PID);
+ String sys = getExtension(event, ProtocolKey.ClientInstanceKey.SYS);
//validate event-extension
- if (StringUtils.isBlank(idc)
- || StringUtils.isBlank(pid)
- || !StringUtils.isNumeric(pid)
- || StringUtils.isBlank(sys)) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
- SendMessageBatchV2ResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ if (StringUtils.isAnyBlank(idc, pid, sys)
+ || !StringUtils.isNumeric(pid)) {
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SendMessageBatchV2ResponseBody.class);
return;
}
- String bizNo =
-
Objects.requireNonNull(event.getExtension(SendMessageBatchV2RequestBody.BIZSEQNO))
- .toString();
- String producerGroup =
-
Objects.requireNonNull(event.getExtension(SendMessageBatchV2RequestBody.PRODUCERGROUP))
- .toString();
+ String bizNo = getExtension(event,
SendMessageBatchV2RequestBody.BIZSEQNO);
+ String producerGroup = getExtension(event,
SendMessageBatchV2RequestBody.PRODUCERGROUP);
String topic = event.getSubject();
- if (StringUtils.isBlank(bizNo)
- || StringUtils.isBlank(topic)
- || StringUtils.isBlank(producerGroup)
+ if (StringUtils.isAnyBlank(bizNo, topic, producerGroup)
|| event.getData() == null) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
- SendMessageBatchV2ResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
SendMessageBatchV2ResponseBody.class);
return;
}
- String content = new
String(Objects.requireNonNull(event.getData()).toBytes(),
StandardCharsets.UTF_8);
- if (content.length() >
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize()) {
- batchMessageLogger.error("Event size exceeds the limit: {}",
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize());
-
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
-
SendMessageBatchV2ResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- "Event size exceeds the limit: " +
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize()));
- asyncContext.onComplete(responseEventMeshCommand);
+ String content = new
String(Objects.requireNonNull(event.getData()).toBytes(),
Constants.DEFAULT_CHARSET);
+ if (content.length() > httpConfiguration.getEventMeshEventSize()) {
+ batchMessageLogger.error("Event size exceeds the limit: {}",
httpConfiguration.getEventMeshEventSize());
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR,
+ "Event size exceeds the limit: " +
httpConfiguration.getEventMeshEventSize(),
+ SendMessageBatchV2ResponseBody.class);
return;
}
//do acl check
- if
(eventMeshHTTPServer.getEventMeshHttpConfiguration().isEventMeshServerSecurityEnable())
{
+ if (httpConfiguration.isEventMeshServerSecurityEnable()) {
String remoteAddr =
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
String user = getExtension(event,
ProtocolKey.ClientInstanceKey.USERNAME);
String pass = getExtension(event,
ProtocolKey.ClientInstanceKey.PASSWD);
@@ -184,28 +156,19 @@ public class BatchSendMessageV2Processor implements
HttpRequestProcessor {
try {
this.acl.doAclCheckInHttpSend(remoteAddr, user, pass,
subsystem, topic, requestCode);
} catch (Exception e) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_ACL_ERR.getRetCode(),
- e.getMessage()));
- asyncContext.onComplete(responseEventMeshCommand);
- aclLogger
- .warn("CLIENT HAS NO
PERMISSION,BatchSendMessageV2Processor send failed", e);
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
+ EventMeshRetCode.EVENTMESH_ACL_ERR, e.getMessage(),
SendMessageBatchV2ResponseBody.class);
+ aclLogger.warn("CLIENT HAS NO
PERMISSION,BatchSendMessageV2Processor send failed", e);
return;
}
}
+ HttpSummaryMetrics summaryMetrics =
eventMeshHTTPServer.getMetrics().getSummaryMetrics();
if (!eventMeshHTTPServer.getBatchRateLimiter()
-
.tryAcquire(EventMeshConstants.DEFAULT_FASTFAIL_TIMEOUT_IN_MILLISECONDS,
- TimeUnit.MILLISECONDS)) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
- SendMessageBatchV2ResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_BATCH_SPEED_OVER_LIMIT_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_BATCH_SPEED_OVER_LIMIT_ERR.getErrMsg()));
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendBatchMsgDiscard(1);
- asyncContext.onComplete(responseEventMeshCommand);
+
.tryAcquire(EventMeshConstants.DEFAULT_FASTFAIL_TIMEOUT_IN_MILLISECONDS,
TimeUnit.MILLISECONDS)) {
+ summaryMetrics.recordSendBatchMsgDiscard(1);
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
+ EventMeshRetCode.EVENTMESH_BATCH_SPEED_OVER_LIMIT_ERR,
null, SendMessageBatchV2ResponseBody.class);
return;
}
@@ -213,12 +176,8 @@ public class BatchSendMessageV2Processor implements
HttpRequestProcessor {
eventMeshHTTPServer.getProducerManager().getEventMeshProducer(producerGroup);
batchEventMeshProducer.getMqProducerWrapper().getMeshMQProducer().setExtFields();
if (!batchEventMeshProducer.isStarted()) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
- SendMessageBatchV2ResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_BATCH_PRODUCER_STOPED_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_BATCH_PRODUCER_STOPED_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
+ EventMeshRetCode.EVENTMESH_BATCH_PRODUCER_STOPED_ERR,
null, SendMessageBatchV2ResponseBody.class);
return;
}
@@ -246,18 +205,14 @@ public class BatchSendMessageV2Processor implements
HttpRequestProcessor {
} catch (Exception e) {
batchMessageLogger.error("msg2MQMsg err, topic:{}, msg:{}", topic,
event.getData(), e);
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
- SendMessageBatchV2ResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg()
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader, EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR,
+ EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg()
+
- EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(responseEventMeshCommand);
+ EventMeshUtil.stackTrace(e, 2),
SendMessageBatchV2ResponseBody.class);
return;
}
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendBatchMsg(1);
+ summaryMetrics.recordSendBatchMsg(1);
final SendMessageContext sendMessageContext =
new SendMessageContext(bizNo, event, batchEventMeshProducer,
eventMeshHTTPServer);
@@ -267,7 +222,7 @@ public class BatchSendMessageV2Processor implements
HttpRequestProcessor {
@Override
public void onSuccess(SendResult sendResult) {
long batchEndTime = System.currentTimeMillis();
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordBatchSendMsgCost(batchEndTime
- batchStartTime);
+ summaryMetrics.recordBatchSendMsgCost(batchEndTime -
batchStartTime);
batchMessageLogger.debug(
"batchMessageV2|eventMesh2mq|REQ|ASYNC|bizSeqNo={}|send2MQCost={}ms|topic={}",
bizNo, batchEndTime - batchStartTime, topic);
@@ -277,7 +232,7 @@ public class BatchSendMessageV2Processor implements
HttpRequestProcessor {
public void onException(OnExceptionContext context) {
long batchEndTime = System.currentTimeMillis();
eventMeshHTTPServer.getHttpRetryer().pushRetry(sendMessageContext.delay(10000));
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordBatchSendMsgCost(batchEndTime
- batchStartTime);
+ summaryMetrics.recordBatchSendMsgCost(batchEndTime -
batchStartTime);
batchMessageLogger.error(
"batchMessageV2|eventMesh2mq|REQ|ASYNC|bizSeqNo={}|send2MQCost={}ms|topic={}",
bizNo, batchEndTime - batchStartTime, topic,
context.getException());
@@ -285,38 +240,20 @@ public class BatchSendMessageV2Processor implements
HttpRequestProcessor {
});
} catch (Exception e) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
- SendMessageBatchV2ResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_SEND_BATCHLOG_MSG_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_SEND_BATCHLOG_MSG_ERR.getErrMsg()
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
EventMeshRetCode.EVENTMESH_SEND_BATCHLOG_MSG_ERR,
+
EventMeshRetCode.EVENTMESH_SEND_BATCHLOG_MSG_ERR.getErrMsg()
+
- EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(responseEventMeshCommand);
+ EventMeshUtil.stackTrace(e, 2),
SendMessageBatchV2ResponseBody.class);
long batchEndTime = System.currentTimeMillis();
eventMeshHTTPServer.getHttpRetryer().pushRetry(sendMessageContext.delay(10000));
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordBatchSendMsgCost(batchEndTime
- batchStartTime);
+ summaryMetrics.recordBatchSendMsgCost(batchEndTime -
batchStartTime);
batchMessageLogger.error(
"batchMessageV2|eventMesh2mq|REQ|ASYNC|bizSeqNo={}|send2MQCost={}ms|topic={}",
bizNo, batchEndTime - batchStartTime, topic, e);
}
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- sendMessageBatchV2ResponseHeader,
-
SendMessageBatchV2ResponseBody.buildBody(EventMeshRetCode.SUCCESS.getRetCode(),
- EventMeshRetCode.SUCCESS.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
-
- }
-
- private String getExtension(CloudEvent event, String protocolKey) {
- Object extension = event.getExtension(protocolKey);
- return Objects.isNull(extension) ? "" : extension.toString();
- }
-
- @Override
- public boolean rejectRequest() {
- return false;
+ completeResponse(request, asyncContext,
sendMessageBatchV2ResponseHeader,
+ EventMeshRetCode.SUCCESS, null,
SendMessageBatchV2ResponseBody.class);
}
}
diff --git
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/HeartBeatProcessor.java
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/HeartBeatProcessor.java
index 893b4192d..e72a9bb79 100644
---
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/HeartBeatProcessor.java
+++
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/HeartBeatProcessor.java
@@ -21,14 +21,15 @@ package
org.apache.eventmesh.runtime.core.protocol.http.processor;
import org.apache.eventmesh.common.protocol.http.HttpCommand;
import
org.apache.eventmesh.common.protocol.http.body.client.HeartbeatRequestBody;
import
org.apache.eventmesh.common.protocol.http.body.client.HeartbeatResponseBody;
-import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageResponseBody;
import org.apache.eventmesh.common.protocol.http.common.EventMeshRetCode;
import org.apache.eventmesh.common.protocol.http.common.RequestCode;
import
org.apache.eventmesh.common.protocol.http.header.client.HeartbeatRequestHeader;
import
org.apache.eventmesh.common.protocol.http.header.client.HeartbeatResponseHeader;
import org.apache.eventmesh.common.utils.IPUtils;
+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.protocol.http.async.AsyncContext;
import org.apache.eventmesh.runtime.core.protocol.http.async.CompleteHandler;
@@ -67,44 +68,37 @@ public class HeartBeatProcessor implements
HttpRequestProcessor {
public void processRequest(final ChannelHandlerContext ctx, final
AsyncContext<HttpCommand> asyncContext) throws Exception {
HttpCommand responseEventMeshCommand;
final String localAddress = IPUtils.getLocalAddress();
-
+ HttpCommand request = asyncContext.getRequest();
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 HeartbeatRequestHeader heartbeatRequestHeader =
(HeartbeatRequestHeader) asyncContext.getRequest().getHeader();
- final HeartbeatRequestBody heartbeatRequestBody =
(HeartbeatRequestBody) asyncContext.getRequest().getBody();
+ final HeartbeatRequestHeader heartbeatRequestHeader =
(HeartbeatRequestHeader) request.getHeader();
+ final HeartbeatRequestBody heartbeatRequestBody =
(HeartbeatRequestBody) request.getBody();
+ EventMeshHTTPConfiguration httpConfiguration =
eventMeshHTTPServer.getEventMeshHttpConfiguration();
final HeartbeatResponseHeader heartbeatResponseHeader =
-
HeartbeatResponseHeader.buildHeader(Integer.valueOf(asyncContext.getRequest().getRequestCode()),
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshCluster(),
- localAddress,
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEnv(),
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIDC());
+
HeartbeatResponseHeader.buildHeader(Integer.valueOf(request.getRequestCode()),
+ httpConfiguration.getEventMeshCluster(),
+ localAddress, httpConfiguration.getEventMeshEnv(),
+ httpConfiguration.getEventMeshIDC());
//validate header
- if (StringUtils.isBlank(heartbeatRequestHeader.getIdc())
- || StringUtils.isBlank(heartbeatRequestHeader.getPid())
- || !StringUtils.isNumeric(heartbeatRequestHeader.getPid())
- || StringUtils.isBlank(heartbeatRequestHeader.getSys())) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- heartbeatResponseHeader,
-
HeartbeatResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+
+ if (StringUtils.isAnyBlank(
+ heartbeatRequestHeader.getIdc(),
heartbeatRequestHeader.getPid(), heartbeatRequestHeader.getSys())
+ || !StringUtils.isNumeric(heartbeatRequestHeader.getPid())) {
+ completeResponse(request, asyncContext, heartbeatResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
HeartbeatResponseBody.class);
return;
}
//validate body
- if (StringUtils.isBlank(heartbeatRequestBody.getClientType())
- || StringUtils.isBlank(heartbeatRequestBody.getConsumerGroup())
+ if (StringUtils.isAnyBlank(heartbeatRequestBody.getClientType(),
heartbeatRequestBody.getConsumerGroup())
||
CollectionUtils.isEmpty(heartbeatRequestBody.getHeartbeatEntities())) {
-
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- heartbeatResponseHeader,
-
HeartbeatResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, heartbeatResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
HeartbeatResponseBody.class);
return;
}
final ConcurrentHashMap<String, List<Client>> tmpMap = new
ConcurrentHashMap<>();
@@ -122,7 +116,7 @@ public class HeartBeatProcessor implements
HttpRequestProcessor {
client.setUrl(heartbeatEntity.url);
client.setLastUpTime(new Date());
- if (StringUtils.isBlank(client.getTopic()) ||
StringUtils.isBlank(client.getUrl())) {
+ if (StringUtils.isAnyBlank(client.getTopic(), client.getUrl())) {
continue;
}
@@ -137,11 +131,8 @@ public class HeartBeatProcessor implements
HttpRequestProcessor {
client.getTopic(),
Integer.parseInt(heartbeatRequestHeader.getCode()));
} catch (Exception e) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- heartbeatResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_ACL_ERR.getRetCode(), e.getMessage()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
heartbeatResponseHeader,
+ EventMeshRetCode.EVENTMESH_ACL_ERR,
e.getMessage(), HeartbeatResponseBody.class);
if (log.isWarnEnabled()) {
log.warn("CLIENT HAS NO PERMISSION,HeartBeatProcessor
subscribe failed", e);
}
@@ -156,23 +147,24 @@ public class HeartBeatProcessor implements
HttpRequestProcessor {
}
- synchronized
(eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping()) {
+ ConcurrentHashMap<String, List<Client>> clientInfoMap =
+
eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping();
+ synchronized (clientInfoMap) {
for (final Map.Entry<String, List<Client>> groupTopicClientMapping
: tmpMap.entrySet()) {
- final List<Client> localClientList =
-
eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping().get(groupTopicClientMapping.getKey());
+ final List<Client> localClientList =
clientInfoMap.get(groupTopicClientMapping.getKey());
if (CollectionUtils.isEmpty(localClientList)) {
-
eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping()
- .put(groupTopicClientMapping.getKey(),
groupTopicClientMapping.getValue());
+ clientInfoMap.put(groupTopicClientMapping.getKey(),
groupTopicClientMapping.getValue());
} else {
final List<Client> tmpClientList =
groupTopicClientMapping.getValue();
supplyClientInfoList(tmpClientList, localClientList);
-
eventMeshHTTPServer.getSubscriptionManager().getLocalClientInfoMapping().put(groupTopicClientMapping.getKey(),
localClientList);
+ clientInfoMap.put(groupTopicClientMapping.getKey(),
localClientList);
}
}
}
final long startTime = System.currentTimeMillis();
+ HttpSummaryMetrics summaryMetrics =
eventMeshHTTPServer.getMetrics().getSummaryMetrics();
try {
final CompleteHandler<HttpCommand> handler = httpCommand -> {
try {
@@ -180,26 +172,25 @@ public class HeartBeatProcessor 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) {
//ignore
}
};
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(EventMeshRetCode.SUCCESS);
+ responseEventMeshCommand =
request.createHttpCommandResponse(EventMeshRetCode.SUCCESS);
asyncContext.onComplete(responseEventMeshCommand, handler);
} catch (Exception e) {
- final HttpCommand err =
asyncContext.getRequest().createHttpCommandResponse(
- heartbeatResponseHeader,
-
HeartbeatResponseBody.buildBody(EventMeshRetCode.EVENTMESH_HEARTBEAT_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_HEARTBEAT_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(err);
+ completeResponse(request, asyncContext, heartbeatResponseHeader,
+ EventMeshRetCode.EVENTMESH_HEARTBEAT_ERR,
+ EventMeshRetCode.EVENTMESH_HEARTBEAT_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2),
+ HeartbeatResponseBody.class);
final long elapsedTime = System.currentTimeMillis() - startTime;
if (log.isErrorEnabled()) {
log.error("message|eventMesh2mq|REQ|ASYNC|heartBeatMessageCost={}ms",
elapsedTime, e);
}
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgFailed();
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordSendMsgCost(elapsedTime);
+ summaryMetrics.recordSendMsgFailed();
+ summaryMetrics.recordSendMsgCost(elapsedTime);
}
}
@@ -222,10 +213,4 @@ public class HeartBeatProcessor implements
HttpRequestProcessor {
}
}
}
-
- @Override
- public boolean rejectRequest() {
- return false;
- }
-
}
diff --git
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/ReplyMessageProcessor.java
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/ReplyMessageProcessor.java
index 7b508d69a..d5a408394 100644
---
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/ReplyMessageProcessor.java
+++
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/ReplyMessageProcessor.java
@@ -25,16 +25,17 @@ import
org.apache.eventmesh.common.protocol.ProtocolTransportObject;
import org.apache.eventmesh.common.protocol.http.HttpCommand;
import
org.apache.eventmesh.common.protocol.http.body.message.ReplyMessageResponseBody;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageRequestBody;
-import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageResponseBody;
import org.apache.eventmesh.common.protocol.http.common.EventMeshRetCode;
import org.apache.eventmesh.common.protocol.http.common.ProtocolKey;
import org.apache.eventmesh.common.protocol.http.common.RequestCode;
import
org.apache.eventmesh.common.protocol.http.header.message.ReplyMessageRequestHeader;
import
org.apache.eventmesh.common.protocol.http.header.message.ReplyMessageResponseHeader;
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.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;
@@ -44,11 +45,9 @@ 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;
-import java.util.Objects;
-import java.util.Optional;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
@@ -60,13 +59,13 @@ import io.netty.channel.ChannelHandlerContext;
public class ReplyMessageProcessor implements HttpRequestProcessor {
- public Logger messageLogger =
LoggerFactory.getLogger(EventMeshConstants.MESSAGE);
+ public final Logger messageLogger =
LoggerFactory.getLogger(EventMeshConstants.MESSAGE);
- public Logger cmdLogger = LoggerFactory.getLogger(EventMeshConstants.CMD);
+ public final Logger cmdLogger =
LoggerFactory.getLogger(EventMeshConstants.CMD);
- public Logger httpLogger =
LoggerFactory.getLogger(EventMeshConstants.PROTOCOL_HTTP);
+ public final Logger httpLogger =
LoggerFactory.getLogger(EventMeshConstants.PROTOCOL_HTTP);
- private EventMeshHTTPServer eventMeshHTTPServer;
+ private final EventMeshHTTPServer eventMeshHTTPServer;
public ReplyMessageProcessor(EventMeshHTTPServer eventMeshHTTPServer) {
this.eventMeshHTTPServer = eventMeshHTTPServer;
@@ -76,124 +75,93 @@ public class ReplyMessageProcessor implements
HttpRequestProcessor {
public void processRequest(ChannelHandlerContext ctx,
AsyncContext<HttpCommand> asyncContext) throws Exception {
HttpCommand responseEventMeshCommand;
String localAddress = IPUtils.getLocalAddress();
- cmdLogger.info("cmd={}|{}|client2eventMesh|from={}|to={}",
RequestCode.get(Integer.valueOf(asyncContext.getRequest().getRequestCode())),
+ HttpCommand request = asyncContext.getRequest();
+ cmdLogger.info("cmd={}|{}|client2eventMesh|from={}|to={}",
RequestCode.get(Integer.valueOf(request.getRequestCode())),
EventMeshConstants.PROTOCOL_HTTP,
RemotingHelper.parseChannelRemoteAddr(ctx.channel()),
localAddress);
- ReplyMessageRequestHeader replyMessageRequestHeader =
(ReplyMessageRequestHeader) asyncContext.getRequest().getHeader();
+ ReplyMessageRequestHeader replyMessageRequestHeader =
(ReplyMessageRequestHeader) request.getHeader();
String protocolType = replyMessageRequestHeader.getProtocolType();
ProtocolAdaptor<ProtocolTransportObject> httpCommandProtocolAdaptor =
ProtocolPluginFactory.getProtocolAdaptor(protocolType);
- CloudEvent event =
httpCommandProtocolAdaptor.toCloudEvent(asyncContext.getRequest());
-
+ CloudEvent event = httpCommandProtocolAdaptor.toCloudEvent(request);
+ EventMeshHTTPConfiguration httpConfiguration =
eventMeshHTTPServer.getEventMeshHttpConfiguration();
ReplyMessageResponseHeader replyMessageResponseHeader =
-
ReplyMessageResponseHeader.buildHeader(Integer.valueOf(asyncContext.getRequest().getRequestCode()),
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshCluster(),
- localAddress,
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEnv(),
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshIDC());
+
ReplyMessageResponseHeader.buildHeader(Integer.valueOf(request.getRequestCode()),
+ httpConfiguration.getEventMeshCluster(),
+ localAddress, httpConfiguration.getEventMeshEnv(),
+ httpConfiguration.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(
- replyMessageResponseHeader,
-
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ if (!ObjectUtils.allNotNull(event, event.getSource(),
event.getSpecVersion())
+ || StringUtils.isAnyBlank(event.getId(), event.getType(),
event.getSubject())) {
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
ReplyMessageResponseBody.class);
return;
}
- String idc =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.IDC)).toString();
- String pid =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.PID)).toString();
- String sys =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.SYS)).toString();
+ String idc = getExtension(event, ProtocolKey.ClientInstanceKey.IDC);
+ String pid = getExtension(event, ProtocolKey.ClientInstanceKey.PID);
+ String sys = getExtension(event, ProtocolKey.ClientInstanceKey.SYS);
//validate HEADER
- if (StringUtils.isBlank(idc)
- || StringUtils.isBlank(pid)
- || !StringUtils.isNumeric(pid)
- || StringUtils.isBlank(sys)) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ if (StringUtils.isAnyBlank(idc, pid, sys)
+ || !StringUtils.isNumeric(pid)) {
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
ReplyMessageResponseBody.class);
return;
}
- String bizNo =
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.BIZSEQNO)).toString();
- String uniqueId =
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.UNIQUEID)).toString();
- String producerGroup =
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.PRODUCERGROUP)).toString();
+ String bizNo = getExtension(event, SendMessageRequestBody.BIZSEQNO);
+ String uniqueId = getExtension(event, SendMessageRequestBody.UNIQUEID);
+ String producerGroup = getExtension(event,
SendMessageRequestBody.PRODUCERGROUP);
//validate body
- if (StringUtils.isBlank(bizNo)
- || StringUtils.isBlank(uniqueId)
- || StringUtils.isBlank(producerGroup)
+ if (StringUtils.isAnyBlank(bizNo, uniqueId, producerGroup)
|| event.getData() == null) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
ReplyMessageResponseBody.class);
return;
}
// control flow rate limit
+ HttpSummaryMetrics summaryMetrics =
eventMeshHTTPServer.getMetrics().getSummaryMetrics();
if (!eventMeshHTTPServer.getMsgRateLimiter()
.tryAcquire(EventMeshConstants.DEFAULT_FASTFAIL_TIMEOUT_IN_MILLISECONDS,
TimeUnit.MILLISECONDS)) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getErrMsg()));
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordHTTPDiscard();
- asyncContext.onComplete(responseEventMeshCommand);
+ summaryMetrics.recordHTTPDiscard();
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR,
null, ReplyMessageResponseBody.class);
return;
}
- String content = event.getData() == null ? "" : new
String(event.getData().toBytes(), StandardCharsets.UTF_8);
- if (content.length() >
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize()) {
+ String content = event.getData() == null ? "" : new
String(event.getData().toBytes(), Constants.DEFAULT_CHARSET);
+ if (content.length() > httpConfiguration.getEventMeshEventSize()) {
httpLogger.error("Event size exceeds the limit: {}",
-
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize());
-
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- "Event size exceeds the limit: " +
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshEventSize()));
- asyncContext.onComplete(responseEventMeshCommand);
+ httpConfiguration.getEventMeshEventSize());
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR,
+ "Event size exceeds the limit: " +
httpConfiguration.getEventMeshEventSize(),
+ ReplyMessageResponseBody.class);
return;
}
EventMeshProducer eventMeshProducer =
eventMeshHTTPServer.getProducerManager().getEventMeshProducer(producerGroup);
if (!eventMeshProducer.isStarted()) {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR,
null, ReplyMessageResponseBody.class);
return;
}
long startTime = System.currentTimeMillis();
-
String replyTopic = EventMeshConstants.RR_REPLY_TOPIC;
-
String origTopic = event.getSubject();
-
- final String replyMQCluster =
Optional.ofNullable(event.getExtension(EventMeshConstants.PROPERTY_MESSAGE_CLUSTER))
- .map(Objects::toString)
- .orElse("");
- if (!org.apache.commons.lang3.StringUtils.isEmpty(replyMQCluster)) {
+ final String replyMQCluster = getExtension(event,
EventMeshConstants.PROPERTY_MESSAGE_CLUSTER);
+ if (!StringUtils.isEmpty(replyMQCluster)) {
replyTopic = replyMQCluster + "-" + replyTopic;
} else {
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR, null,
ReplyMessageResponseBody.class);
return;
}
@@ -213,25 +181,24 @@ public class ReplyMessageProcessor implements
HttpRequestProcessor {
} catch (Exception e) {
messageLogger.error("msg2MQMsg err, bizSeqNo={}, topic={}", bizNo,
replyTopic, e);
- responseEventMeshCommand =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR,
+ EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2),
+ ReplyMessageResponseBody.class
+ );
return;
}
final SendMessageContext sendMessageContext = new
SendMessageContext(bizNo, event, eventMeshProducer, eventMeshHTTPServer);
- eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordReplyMsg();
-
+ summaryMetrics.recordReplyMsg();
CompleteHandler<HttpCommand> handler = httpCommand -> {
try {
if (httpLogger.isDebugEnabled()) {
httpLogger.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
}
@@ -245,12 +212,12 @@ public class ReplyMessageProcessor implements
HttpRequestProcessor {
eventMeshProducer.reply(sendMessageContext, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
- HttpCommand succ =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.SUCCESS.getRetCode(),
EventMeshRetCode.SUCCESS.getErrMsg()));
+ HttpCommand succ = request.createHttpCommandResponse(
+ replyMessageResponseHeader,
+
ReplyMessageResponseBody.buildBody(EventMeshRetCode.SUCCESS.getRetCode(),
EventMeshRetCode.SUCCESS.getErrMsg()));
asyncContext.onComplete(succ, handler);
long endTime = System.currentTimeMillis();
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordReplyMsgCost(endTime
- startTime);
+ summaryMetrics.recordReplyMsgCost(endTime - startTime);
messageLogger.info("message|eventMesh2mq|RSP|SYNC|reply2MQCost={}|topic={}|origTopic={}|bizSeqNo={}|uniqueId={}",
endTime - startTime, replyMQCluster + "-" +
EventMeshConstants.RR_REPLY_TOPIC,
origTopic, bizNo, uniqueId);
@@ -258,36 +225,30 @@ public class ReplyMessageProcessor implements
HttpRequestProcessor {
@Override
public void onException(OnExceptionContext context) {
- HttpCommand err =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR.getRetCode(),
+ HttpCommand err = request.createHttpCommandResponse(
+ replyMessageResponseHeader,
+
ReplyMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR.getRetCode(),
EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR.getErrMsg()
+
EventMeshUtil.stackTrace(context.getException(), 2)));
asyncContext.onComplete(err, handler);
long endTime = System.currentTimeMillis();
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordReplyMsgFailed();
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordReplyMsgCost(endTime
- startTime);
+ summaryMetrics.recordReplyMsgFailed();
+ summaryMetrics.recordReplyMsgCost(endTime - startTime);
messageLogger.error("message|eventMesh2mq|RSP|SYNC|reply2MQCost={}|topic={}|origTopic={}|bizSeqNo={}|uniqueId={}",
endTime - startTime, replyMQCluster + "-" +
EventMeshConstants.RR_REPLY_TOPIC,
origTopic, bizNo, uniqueId, context.getException());
}
});
} catch (Exception ex) {
- HttpCommand err =
asyncContext.getRequest().createHttpCommandResponse(
- replyMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR.getErrMsg() +
EventMeshUtil.stackTrace(ex, 2)));
- asyncContext.onComplete(err);
+ completeResponse(request, asyncContext, replyMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR,
+ EventMeshRetCode.EVENTMESH_REPLY_MSG_ERR.getErrMsg() +
EventMeshUtil.stackTrace(ex, 2),
+ ReplyMessageResponseBody.class);
long endTime = System.currentTimeMillis();
messageLogger.error("message|eventMesh2mq|RSP|SYNC|reply2MQCost={}|topic={}|origTopic={}|bizSeqNo={}|uniqueId={}",
endTime - startTime, replyTopic, origTopic, bizNo, uniqueId,
ex);
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordReplyMsgFailed();
-
eventMeshHTTPServer.getMetrics().getSummaryMetrics().recordReplyMsgCost(endTime
- startTime);
+ summaryMetrics.recordReplyMsgFailed();
+ summaryMetrics.recordReplyMsgCost(endTime - startTime);
}
}
-
- @Override
- public boolean rejectRequest() {
- return false;
- }
}
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 e42070061..f90eacee2 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
@@ -20,6 +20,7 @@ package
org.apache.eventmesh.runtime.core.protocol.http.processor;
import org.apache.eventmesh.api.SendCallback;
import org.apache.eventmesh.api.SendResult;
import org.apache.eventmesh.api.exception.OnExceptionContext;
+import org.apache.eventmesh.common.Constants;
import org.apache.eventmesh.common.protocol.ProtocolTransportObject;
import org.apache.eventmesh.common.protocol.http.HttpCommand;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageRequestBody;
@@ -50,7 +51,6 @@ 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;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@@ -62,7 +62,6 @@ import io.cloudevents.core.builder.CloudEventBuilder;
import io.netty.channel.ChannelHandlerContext;
import io.opentelemetry.api.trace.Span;
-
public class SendAsyncMessageProcessor implements HttpRequestProcessor {
private static final Logger MESSAGE_LOGGER =
LoggerFactory.getLogger(EventMeshConstants.MESSAGE);
@@ -91,7 +90,7 @@ public class SendAsyncMessageProcessor implements
HttpRequestProcessor {
String remoteAddr =
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
CMD_LOGGER.info("cmd={}|{}|client2eventMesh|from={}|to={}",
RequestCode.get(
Integer.valueOf(request.getRequestCode())),
- EventMeshConstants.PROTOCOL_HTTP,
+ EventMeshConstants.PROTOCOL_HTTP,
remoteAddr, localAddress);
SendMessageRequestHeader sendMessageRequestHeader =
(SendMessageRequestHeader) request.getHeader();
@@ -110,69 +109,55 @@ public class SendAsyncMessageProcessor implements
HttpRequestProcessor {
CloudEvent event = httpCommandProtocolAdaptor.toCloudEvent(request);
Span span =
TraceUtils.prepareServerSpan(EventMeshUtil.getCloudEventExtensionMap(protocolVersion,
event),
- EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN,
true);
+ EventMeshTraceConstants.TRACE_UPSTREAM_EVENTMESH_SERVER_SPAN,
true);
//validate event
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(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SendMessageResponseBody.class);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR);
return;
}
- String idc =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.IDC)).toString();
- String pid =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.PID)).toString();
- String sys =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.SYS)).toString();
+ String idc = getExtension(event, ProtocolKey.ClientInstanceKey.IDC);
+ String pid = getExtension(event, ProtocolKey.ClientInstanceKey.PID);
+ String sys = getExtension(event, ProtocolKey.ClientInstanceKey.SYS);
//validate event-extension
if (StringUtils.isAnyBlank(idc, pid, sys)
|| !StringUtils.isNumeric(pid)) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SendMessageResponseBody.class);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR);
return;
}
- String bizNo =
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.BIZSEQNO)).toString();
- String uniqueId =
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.UNIQUEID)).toString();
- String producerGroup =
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.PRODUCERGROUP)).toString();
+ String bizNo = getExtension(event, SendMessageRequestBody.BIZSEQNO);
+ String uniqueId = getExtension(event, SendMessageRequestBody.UNIQUEID);
+ String producerGroup = getExtension(event,
SendMessageRequestBody.PRODUCERGROUP);
String topic = event.getSubject();
//validate body
if (StringUtils.isAnyBlank(bizNo, uniqueId, producerGroup, topic)
|| event.getData() == null) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
SendMessageResponseBody.class);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR);
return;
}
//do acl check
if (eventMeshHttpConfiguration.isEventMeshServerSecurityEnable()) {
- 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();
+ String user = getExtension(event,
ProtocolKey.ClientInstanceKey.USERNAME);
+ String pass = getExtension(event,
ProtocolKey.ClientInstanceKey.PASSWD);
+ String subsystem = getExtension(event,
ProtocolKey.ClientInstanceKey.SYS);
int requestCode = Integer.parseInt(request.getRequestCode());
try {
this.acl.doAclCheckInHttpSend(remoteAddr, user, pass,
subsystem, topic, requestCode);
} catch (Exception e) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_ACL_ERR.getRetCode(),
e.getMessage()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_ACL_ERR, e.getMessage(),
SendMessageResponseBody.class);
ACL_LOGGER.warn("CLIENT HAS NO
PERMISSION,SendAsyncMessageProcessor send failed", e);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_ACL_ERR);
@@ -184,12 +169,9 @@ public class SendAsyncMessageProcessor implements
HttpRequestProcessor {
// control flow rate limit
if (!eventMeshHTTPServer.getMsgRateLimiter()
.tryAcquire(EventMeshConstants.DEFAULT_FASTFAIL_TIMEOUT_IN_MILLISECONDS,
TimeUnit.MILLISECONDS)) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getErrMsg()));
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR,
null, SendMessageResponseBody.class);
summaryMetrics.recordHTTPDiscard();
- asyncContext.onComplete(responseEventMeshCommand);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR);
return;
@@ -198,34 +180,27 @@ public class SendAsyncMessageProcessor implements
HttpRequestProcessor {
EventMeshProducer eventMeshProducer =
eventMeshHTTPServer.getProducerManager().getEventMeshProducer(producerGroup);
if (!eventMeshProducer.isStarted()) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR,
null, SendMessageResponseBody.class);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR);
return;
}
String ttl = String.valueOf(EventMeshConstants.DEFAULT_MSG_TTL_MILLS);
- String ttlExt =
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.TTL)).toString();
+ String ttlExt = getExtension(event, SendMessageRequestBody.TTL);
if (StringUtils.isBlank(ttlExt) && !StringUtils.isNumeric(ttlExt)) {
event =
CloudEventBuilder.from(event).withExtension(SendMessageRequestBody.TTL,
ttl).build();
}
- String content = event.getData() == null ? "" : new
String(Objects.requireNonNull(event.getData()).toBytes(),
StandardCharsets.UTF_8);
+ String content = event.getData() == null ? "" : new
String(Objects.requireNonNull(event.getData()).toBytes(),
Constants.DEFAULT_CHARSET);
if (content.length() >
eventMeshHttpConfiguration.getEventMeshEventSize()) {
HTTP_LOGGER.error("Event size exceeds the limit: {}",
eventMeshHttpConfiguration.getEventMeshEventSize());
-
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_SIZE_ERR.getRetCode(),
- "Event size exceeds the limit: " +
eventMeshHttpConfiguration.getEventMeshEventSize()));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_SIZE_ERR,
+ "Event size exceeds the limit: " +
eventMeshHttpConfiguration.getEventMeshEventSize(),
+ SendMessageResponseBody.class);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_SIZE_ERR);
return;
}
@@ -234,8 +209,7 @@ public class SendAsyncMessageProcessor implements
HttpRequestProcessor {
event = CloudEventBuilder.from(event)
.withExtension(EventMeshConstants.MSG_TYPE,
EventMeshConstants.PERSISTENT)
.withExtension(EventMeshConstants.REQ_C2EVENTMESH_TIMESTAMP,
request.reqTime)
- .withExtension(EventMeshConstants.REQ_SEND_EVENTMESH_IP,
- eventMeshHttpConfiguration.getEventMeshServerIp())
+ .withExtension(EventMeshConstants.REQ_SEND_EVENTMESH_IP,
eventMeshHttpConfiguration.getEventMeshServerIp())
.build();
if (MESSAGE_LOGGER.isDebugEnabled()) {
@@ -243,12 +217,10 @@ public class SendAsyncMessageProcessor implements
HttpRequestProcessor {
}
} catch (Exception e) {
MESSAGE_LOGGER.error("msg2MQMsg err, bizSeqNo={}, topic={}",
bizNo, topic, e);
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR,
+ EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2),
+ SendMessageResponseBody.class);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR);
return;
}
@@ -326,13 +298,8 @@ public class SendAsyncMessageProcessor implements
HttpRequestProcessor {
} catch (Exception ex) {
- HttpCommand err = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_SEND_ASYNC_MSG_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_SEND_ASYNC_MSG_ERR.getErrMsg()
- + EventMeshUtil.stackTrace(ex, 2)));
- asyncContext.onComplete(err);
-
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_SEND_ASYNC_MSG_ERR, null,
SendMessageResponseBody.class);
spanWithException(event, protocolVersion,
EventMeshRetCode.EVENTMESH_SEND_ASYNC_MSG_ERR);
eventMeshHTTPServer.getHttpRetryer().pushRetry(sendMessageContext.delay(10000));
@@ -350,10 +317,4 @@ public class SendAsyncMessageProcessor implements
HttpRequestProcessor {
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 e7541ea5a..12ba0c32a 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,9 @@
package org.apache.eventmesh.runtime.core.protocol.http.processor;
+
import org.apache.eventmesh.api.RequestReplyCallback;
+import org.apache.eventmesh.common.Constants;
import org.apache.eventmesh.common.protocol.ProtocolTransportObject;
import org.apache.eventmesh.common.protocol.http.HttpCommand;
import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageRequestBody;
@@ -47,7 +49,6 @@ import org.apache.eventmesh.runtime.util.RemotingHelper;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
-import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@@ -103,71 +104,46 @@ public class SendSyncMessageProcessor implements
HttpRequestProcessor {
//validate event
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(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SendMessageResponseBody.class);
return;
}
- final String idc =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.IDC))
- .toString();
- final String pid =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.PID))
- .toString();
- final String sys =
Objects.requireNonNull(event.getExtension(ProtocolKey.ClientInstanceKey.SYS))
- .toString();
+ final String idc = getExtension(event,
ProtocolKey.ClientInstanceKey.IDC);
+ final String pid = getExtension(event,
ProtocolKey.ClientInstanceKey.PID);
+ final String sys = getExtension(event,
ProtocolKey.ClientInstanceKey.SYS);
//validate event-extension
if (StringUtils.isAnyBlank(idc, pid, sys) ||
!StringUtils.isNumeric(pid)) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SendMessageResponseBody.class);
return;
}
- final String bizNo =
-
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.BIZSEQNO)).toString();
- final String uniqueId =
-
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.UNIQUEID)).toString();
- final String producerGroup =
-
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.PRODUCERGROUP))
- .toString();
+ final String bizNo = getExtension(event,
SendMessageRequestBody.BIZSEQNO);
+ final String uniqueId = getExtension(event,
SendMessageRequestBody.UNIQUEID);
+ final String producerGroup = getExtension(event,
SendMessageRequestBody.PRODUCERGROUP);
final String topic = event.getSubject();
- final String ttl =
-
Objects.requireNonNull(event.getExtension(SendMessageRequestBody.TTL)).toString();
+ final String ttl = getExtension(event, SendMessageRequestBody.TTL);
//validate body
if (StringUtils.isAnyBlank(bizNo, uniqueId, producerGroup, topic, ttl)
|| event.getData() == null) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
SendMessageResponseBody.class);
return;
}
//do acl check
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 String user = getExtension(event,
ProtocolKey.ClientInstanceKey.USERNAME);
+ final String pass = getExtension(event,
ProtocolKey.ClientInstanceKey.PASSWD);
final int requestCode = Integer.parseInt(request.getRequestCode());
try {
this.acl.doAclCheckInHttpSend(remoteAddr, user, pass, sys,
topic, requestCode);
} catch (Exception e) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_ACL_ERR.getRetCode(),
- e.getMessage()));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext,
sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_ACL_ERR, e.getMessage(),
SendMessageResponseBody.class);
if (log.isWarnEnabled()) {
log.warn("CLIENT HAS NO
PERMISSION,SendSyncMessageProcessor send failed", e);
}
@@ -178,30 +154,23 @@ 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 = request.createHttpCommandResponse(
- sendMessageResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR.getErrMsg()));
+
.tryAcquire(EventMeshConstants.DEFAULT_FASTFAIL_TIMEOUT_IN_MILLISECONDS,
TimeUnit.MILLISECONDS)) {
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_HTTP_MES_SEND_OVER_LIMIT_ERR,
null, SendMessageResponseBody.class);
summaryMetrics.recordHTTPDiscard();
- asyncContext.onComplete(responseEventMeshCommand);
return;
}
- final String content = new
String(Objects.requireNonNull(event.getData()).toBytes(),
StandardCharsets.UTF_8);
+ final String content = new
String(Objects.requireNonNull(event.getData()).toBytes(),
Constants.DEFAULT_CHARSET);
int eventMeshEventSize =
eventMeshHttpConfiguration.getEventMeshEventSize();
if (content.length() > eventMeshEventSize) {
if (log.isErrorEnabled()) {
log.error("Event size exceeds the limit: {}",
eventMeshEventSize);
}
-
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
- "Event size exceeds the limit: " + eventMeshEventSize));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR,
+ "Event size exceeds the limit: " + eventMeshEventSize,
+ SendMessageResponseBody.class);
return;
}
@@ -209,12 +178,8 @@ public class SendSyncMessageProcessor implements
HttpRequestProcessor {
eventMeshHTTPServer.getProducerManager().getEventMeshProducer(producerGroup);
if (!eventMeshProducer.isStarted()) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_GROUP_PRODUCER_STOPED_ERR,
null, SendMessageResponseBody.class);
return;
}
@@ -234,13 +199,8 @@ public class SendSyncMessageProcessor implements
HttpRequestProcessor {
if (log.isErrorEnabled()) {
log.error("msg2MQMsg err, bizSeqNo={}, topic={}", bizNo,
topic, e);
}
- responseEventMeshCommand = request.createHttpCommandResponse(
- sendMessageResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getRetCode(),
- EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR.getErrMsg()
- + EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_PACKAGE_MSG_ERR, null,
SendMessageResponseBody.class);
return;
}
@@ -283,7 +243,7 @@ public class SendSyncMessageProcessor implements
HttpRequestProcessor {
.build();
final String rtnMsg = new
String(Objects.requireNonNull(newEvent.getData()).toBytes(),
- StandardCharsets.UTF_8);
+ Constants.DEFAULT_CHARSET);
final HttpCommand succ =
request.createHttpCommandResponse(
sendMessageResponseHeader,
@@ -329,14 +289,10 @@ public class SendSyncMessageProcessor implements
HttpRequestProcessor {
}
}, Integer.parseInt(ttl));
} catch (Exception ex) {
- final HttpCommand err = request.createHttpCommandResponse(
- sendMessageResponseHeader,
- SendMessageResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_SEND_SYNC_MSG_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_SEND_SYNC_MSG_ERR.getErrMsg()
- + EventMeshUtil.stackTrace(ex, 2)));
- asyncContext.onComplete(err);
-
+ completeResponse(request, asyncContext, sendMessageResponseHeader,
+ EventMeshRetCode.EVENTMESH_SEND_SYNC_MSG_ERR,
+ EventMeshRetCode.EVENTMESH_SEND_SYNC_MSG_ERR.getErrMsg() +
EventMeshUtil.stackTrace(ex, 2),
+ SendMessageResponseBody.class);
eventMeshHTTPServer.getHttpRetryer().pushRetry(sendMessageContext.delay(10_000));
final long endTime = System.currentTimeMillis();
summaryMetrics.recordSendMsgFailed();
@@ -351,9 +307,4 @@ public class SendSyncMessageProcessor implements
HttpRequestProcessor {
return;
}
-
- @Override
- public boolean rejectRequest() {
- return false;
- }
}
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 b79a6d2f8..d93ba6134 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
@@ -21,7 +21,6 @@ import org.apache.eventmesh.common.protocol.SubscriptionItem;
import org.apache.eventmesh.common.protocol.http.HttpCommand;
import
org.apache.eventmesh.common.protocol.http.body.client.SubscribeRequestBody;
import
org.apache.eventmesh.common.protocol.http.body.client.SubscribeResponseBody;
-import
org.apache.eventmesh.common.protocol.http.body.message.SendMessageResponseBody;
import org.apache.eventmesh.common.protocol.http.common.EventMeshRetCode;
import org.apache.eventmesh.common.protocol.http.common.RequestCode;
import
org.apache.eventmesh.common.protocol.http.header.client.SubscribeRequestHeader;
@@ -74,8 +73,7 @@ public class SubscribeProcessor implements
HttpRequestProcessor {
final String remoteAddr =
RemotingHelper.parseChannelRemoteAddr(ctx.channel());
if (log.isInfoEnabled()) {
log.info("cmd={}|{}|client2eventMesh|from={}|to={}",
- RequestCode.get(requestCode),
- EventMeshConstants.PROTOCOL_HTTP, remoteAddr, localAddress);
+ RequestCode.get(requestCode),
EventMeshConstants.PROTOCOL_HTTP, remoteAddr, localAddress);
}
final SubscribeRequestHeader subscribeRequestHeader =
(SubscribeRequestHeader) request.getHeader();
@@ -93,24 +91,16 @@ public class SubscribeProcessor implements
HttpRequestProcessor {
if (StringUtils.isAnyBlank(subscribeRequestHeader.getIdc(),
subscribeRequestHeader.getPid(),
subscribeRequestHeader.getSys())
|| !StringUtils.isNumeric(subscribeRequestHeader.getPid())) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- subscribeResponseHeader,
- SubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, subscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
SubscribeResponseBody.class);
return;
}
//validate body
if (StringUtils.isAnyBlank(subscribeRequestBody.getUrl(),
subscribeRequestBody.getConsumerGroup())
|| CollectionUtils.isEmpty(subscribeRequestBody.getTopics())) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- subscribeResponseHeader,
- SubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, subscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
SubscribeResponseBody.class);
return;
}
final List<SubscriptionItem> subTopicList =
subscribeRequestBody.getTopics();
@@ -125,11 +115,8 @@ public class SubscribeProcessor implements
HttpRequestProcessor {
subscribeRequestHeader.getSys(), item.getTopic(),
requestCode);
} catch (Exception e) {
-
- responseEventMeshCommand =
request.createHttpCommandResponse(subscribeResponseHeader,
-
SendMessageResponseBody.buildBody(EventMeshRetCode.EVENTMESH_ACL_ERR.getRetCode(),
e.getMessage()));
- asyncContext.onComplete(responseEventMeshCommand);
-
+ completeResponse(request, asyncContext,
subscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_ACL_ERR,
e.getMessage(), SubscribeResponseBody.class);
if (log.isWarnEnabled()) {
log.warn("CLIENT HAS NO PERMISSION,SubscribeProcessor
subscribe failed", e);
}
@@ -146,24 +133,20 @@ public class SubscribeProcessor implements
HttpRequestProcessor {
if (!IPUtils.isValidDomainOrIp(url,
eventMeshHttpConfiguration.getEventMeshIpv4BlackList(),
eventMeshHttpConfiguration.getEventMeshIpv6BlackList())) {
log.error("subscriber url {} is not valid", url);
- responseEventMeshCommand = request.createHttpCommandResponse(
- subscribeResponseHeader,
- SubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg() + " invalid URL: " +
url));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext,
subscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR,
+
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg() + " invalid URL: " +
url,
+ SubscribeResponseBody.class);
return;
}
} catch (Exception e) {
if (log.isErrorEnabled()) {
log.error("subscriber url:{} is invalid.", url, e);
}
- responseEventMeshCommand = request.createHttpCommandResponse(
- subscribeResponseHeader,
- SubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg() + " invalid URL: " +
url));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, subscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg() +
" invalid URL: " + url,
+ SubscribeResponseBody.class);
return;
}
@@ -171,12 +154,10 @@ public class SubscribeProcessor implements
HttpRequestProcessor {
if
(!WebhookUtil.obtainDeliveryAgreement(eventMeshHTTPServer.getHttpClientPool().getClient(),
url, eventMeshHttpConfiguration.getEventMeshWebhookOrigin())) {
log.error("subscriber url {} is not allowed by the target system",
url);
- responseEventMeshCommand = request.createHttpCommandResponse(
- subscribeResponseHeader,
- SubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg() + " unauthorized
webhook URL: " + url));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, subscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg() +
" unauthorized webhook URL: " + url,
+ SubscribeResponseBody.class);
return;
}
@@ -209,14 +190,10 @@ public class SubscribeProcessor implements
HttpRequestProcessor {
responseEventMeshCommand =
request.createHttpCommandResponse(EventMeshRetCode.SUCCESS);
asyncContext.onComplete(responseEventMeshCommand, handler);
} catch (Exception e) {
- final HttpCommand err = request.createHttpCommandResponse(
- subscribeResponseHeader,
- SubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_SUBSCRIBE_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_SUBSCRIBE_ERR.getErrMsg()
- + EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(err);
-
+ completeResponse(request, asyncContext,
subscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_SUBSCRIBE_ERR,
+ EventMeshRetCode.EVENTMESH_SUBSCRIBE_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2),
+ SubscribeResponseBody.class);
final long endTime = System.currentTimeMillis();
if (log.isErrorEnabled()) {
log.error(
@@ -231,11 +208,6 @@ public class SubscribeProcessor implements
HttpRequestProcessor {
}
}
- @Override
- public boolean rejectRequest() {
- return false;
- }
-
private ClientInfo getClientInfo(final SubscribeRequestHeader
subscribeRequestHeader) {
ClientInfo clientInfo = new ClientInfo();
clientInfo.setEnv(subscribeRequestHeader.getEnv());
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 d5c72ee51..ecc5a0980 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
@@ -76,7 +76,7 @@ public class UnSubscribeProcessor implements
HttpRequestProcessor {
if (log.isInfoEnabled()) {
log.info("cmd={}|{}|client2eventMesh|from={}|to={}",
RequestCode.get(Integer.valueOf(request.getRequestCode())),
- EventMeshConstants.PROTOCOL_HTTP,
+ EventMeshConstants.PROTOCOL_HTTP,
RemotingHelper.parseChannelRemoteAddr(ctx.channel()),
localAddress);
}
@@ -94,24 +94,16 @@ public class UnSubscribeProcessor implements
HttpRequestProcessor {
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(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, unSubscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_HEADER_ERR, null,
UnSubscribeResponseBody.class);
return;
}
//validate body
if (StringUtils.isAnyBlank(unSubscribeRequestBody.getUrl(),
unSubscribeRequestBody.getConsumerGroup())
|| CollectionUtils.isEmpty(unSubscribeRequestBody.getTopics())) {
- responseEventMeshCommand = request.createHttpCommandResponse(
- unSubscribeResponseHeader,
- UnSubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR.getErrMsg()));
- asyncContext.onComplete(responseEventMeshCommand);
+ completeResponse(request, asyncContext, unSubscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_PROTOCOL_BODY_ERR, null,
UnSubscribeResponseBody.class);
return;
}
@@ -198,18 +190,14 @@ public class UnSubscribeProcessor implements
HttpRequestProcessor {
eventMeshHTTPServer.getConsumerManager().notifyConsumerManager(consumerGroup,
localConsumerGroupMap.get(consumerGroup));
- responseEventMeshCommand =
-
request.createHttpCommandResponse(EventMeshRetCode.SUCCESS);
+ responseEventMeshCommand =
request.createHttpCommandResponse(EventMeshRetCode.SUCCESS);
asyncContext.onComplete(responseEventMeshCommand, handler);
} catch (Exception e) {
- final HttpCommand err = request.createHttpCommandResponse(
- unSubscribeResponseHeader,
- UnSubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR.getErrMsg()
- + EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(err);
+ completeResponse(request, asyncContext,
unSubscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR,
+
EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2),
+ UnSubscribeResponseBody.class);
final long endTime = System.currentTimeMillis();
log.error("message|eventMesh2mq|REQ|ASYNC|send2MQCost={}ms|topic={}|url={}",
endTime - startTime,
@@ -233,13 +221,10 @@ public class UnSubscribeProcessor implements
HttpRequestProcessor {
localConsumerGroupMap.keySet()
.removeIf(s -> StringUtils.equals(consumerGroup, s));
} catch (Exception e) {
- final HttpCommand err = request.createHttpCommandResponse(
- unSubscribeResponseHeader,
- UnSubscribeResponseBody
-
.buildBody(EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR.getRetCode(),
-
EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR.getErrMsg()
- + EventMeshUtil.stackTrace(e, 2)));
- asyncContext.onComplete(err);
+ completeResponse(request, asyncContext,
unSubscribeResponseHeader,
+ EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR,
+
EventMeshRetCode.EVENTMESH_UNSUBSCRIBE_ERR.getErrMsg() +
EventMeshUtil.stackTrace(e, 2),
+ UnSubscribeResponseBody.class);
final long endTime = System.currentTimeMillis();
log.error("message|eventMesh2mq|REQ|ASYNC|send2MQCost={}ms"
+ "|topic={}|url={}", endTime - startTime,
@@ -252,11 +237,6 @@ public class UnSubscribeProcessor implements
HttpRequestProcessor {
}
}
- @Override
- public boolean rejectRequest() {
- return false;
- }
-
private void registerClient(final UnSubscribeRequestHeader
unSubscribeRequestHeader,
final String consumerGroup,
final List<String> topicList,
diff --git
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/inf/HttpRequestProcessor.java
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/inf/HttpRequestProcessor.java
index f9ffec041..772503928 100644
---
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/inf/HttpRequestProcessor.java
+++
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/processor/inf/HttpRequestProcessor.java
@@ -18,8 +18,17 @@
package org.apache.eventmesh.runtime.core.protocol.http.processor.inf;
import org.apache.eventmesh.common.protocol.http.HttpCommand;
+import org.apache.eventmesh.common.protocol.http.body.Body;
+import org.apache.eventmesh.common.protocol.http.common.EventMeshRetCode;
+import org.apache.eventmesh.common.protocol.http.header.Header;
import org.apache.eventmesh.runtime.core.protocol.http.async.AsyncContext;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.reflect.Method;
+import java.util.Objects;
+
+import io.cloudevents.CloudEvent;
import io.netty.channel.ChannelHandlerContext;
/**
@@ -30,6 +39,27 @@ public interface HttpRequestProcessor {
void processRequest(final ChannelHandlerContext ctx, final
AsyncContext<HttpCommand> asyncContext)
throws Exception;
- boolean rejectRequest();
+ default boolean rejectRequest() {
+ return false;
+ }
+
+ default <T extends Header, E extends Body> void
completeResponse(HttpCommand req, AsyncContext asyncContext,
+ T
respHeader, EventMeshRetCode emCode,
+ String
msg, Class<E> clazz) {
+ try {
+ Method method = clazz.getMethod("buildBody", Integer.class,
String.class);
+ Object o = method.invoke(null, emCode.getRetCode(),
+ StringUtils.isNotBlank(msg) ? msg : emCode.getErrMsg());
+ HttpCommand response = req.createHttpCommandResponse(respHeader,
(E) o);
+ asyncContext.onComplete(response);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ default String getExtension(CloudEvent event, String protocolKey) {
+ Object extension = event.getExtension(protocolKey);
+ return Objects.isNull(extension) ? "" : extension.toString();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]