Skip to content

Commit

Permalink
[ISSUE 2883] [Part G] Optimise parse performance for SendMessageReque…
Browse files Browse the repository at this point in the history
…stHeaderV2
  • Loading branch information
areyouok committed Jul 7, 2021
1 parent 3183122 commit b13a4c8
Showing 1 changed file with 70 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
import io.netty.channel.ChannelHandlerContext;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Random;
import org.apache.rocketmq.broker.BrokerController;
import org.apache.rocketmq.broker.mqtrace.SendMessageContext;
Expand Down Expand Up @@ -288,9 +290,7 @@ protected SendMessageRequestHeader parseRequestHeader(RemotingCommand request)
switch (request.getCode()) {
case RequestCode.SEND_BATCH_MESSAGE:
case RequestCode.SEND_MESSAGE_V2:
requestHeaderV2 =
(SendMessageRequestHeaderV2) request
.decodeCommandCustomHeader(SendMessageRequestHeaderV2.class);
requestHeaderV2 = decodeSendMessageHeaderV2(request);
case RequestCode.SEND_MESSAGE:
if (null == requestHeaderV2) {
requestHeader =
Expand All @@ -305,6 +305,73 @@ protected SendMessageRequestHeader parseRequestHeader(RemotingCommand request)
return requestHeader;
}

private SendMessageRequestHeaderV2 decodeSendMessageHeaderV2(RemotingCommand request) {
SendMessageRequestHeaderV2 r = new SendMessageRequestHeaderV2();
HashMap<String, String> fields = request.getExtFields();
if (fields == null) {
// keep same behavior with CommandCustomHeader.decodeCommandCustomHeader
return r;
}

String s = fields.get("a");
Objects.requireNonNull(s, "the custom field <a> is null");
r.setA(s);

s = fields.get("b");
Objects.requireNonNull(s, "the custom field <b> is null");
r.setB(s);

s = fields.get("c");
Objects.requireNonNull(s, "the custom field <c> is null");
r.setC(s);

s = fields.get("d");
Objects.requireNonNull(s, "the custom field <d> is null");
r.setD(Integer.parseInt(s));

s = fields.get("e");
Objects.requireNonNull(s, "the custom field <e> is null");
r.setE(Integer.parseInt(s));

s = fields.get("f");
Objects.requireNonNull(s, "the custom field <f> is null");
r.setF(Integer.parseInt(s));

s = fields.get("g");
Objects.requireNonNull(s, "the custom field <g> is null");
r.setG(Long.parseLong(s));

s = fields.get("h");
Objects.requireNonNull(s, "the custom field <h> is null");
r.setH(Integer.parseInt(s));

s = fields.get("i");
if (s != null) {
r.setI(s);
}

s = fields.get("j");
if (s != null) {
r.setJ(Integer.parseInt(s));
}

s = fields.get("k");
if (s != null) {
r.setK(Boolean.parseBoolean(s));
}

s = fields.get("l");
if (s != null) {
r.setL(Integer.parseInt(s));
}

s = fields.get("m");
if (s != null) {
r.setM(Boolean.parseBoolean(s));
}
return r;
}

public void executeSendMessageHookAfter(final RemotingCommand response, final SendMessageContext context) {
if (hasSendMessageHook()) {
for (SendMessageHook hook : this.sendMessageHookList) {
Expand Down

0 comments on commit b13a4c8

Please sign in to comment.