Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小五666\n哈哈
Rocketmq
提交
a137e48a
R
Rocketmq
项目概览
小五666\n哈哈
/
Rocketmq
与 Fork 源项目一致
Fork自
Apache RocketMQ / Rocketmq
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rocketmq
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a137e48a
编写于
7月 22, 2021
作者:
H
huangli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ISSUE 2883] [Part G] Optimise parse performance for SendMessageRequestHeaderV2, unit test
上级
b13a4c86
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
99 addition
and
11 deletion
+99
-11
broker/src/main/java/org/apache/rocketmq/broker/processor/AbstractSendMessageProcessor.java
...cketmq/broker/processor/AbstractSendMessageProcessor.java
+17
-11
broker/src/test/java/org/apache/rocketmq/broker/processor/AbstractSendMessageProcessorTest.java
...mq/broker/processor/AbstractSendMessageProcessorTest.java
+82
-0
未找到文件。
broker/src/main/java/org/apache/rocketmq/broker/processor/AbstractSendMessageProcessor.java
浏览文件 @
a137e48a
...
@@ -305,44 +305,44 @@ public abstract class AbstractSendMessageProcessor extends AsyncNettyRequestProc
...
@@ -305,44 +305,44 @@ public abstract class AbstractSendMessageProcessor extends AsyncNettyRequestProc
return
requestHeader
;
return
requestHeader
;
}
}
private
SendMessageRequestHeaderV2
decodeSendMessageHeaderV2
(
RemotingCommand
request
)
{
static
SendMessageRequestHeaderV2
decodeSendMessageHeaderV2
(
RemotingCommand
request
)
throws
RemotingCommandException
{
SendMessageRequestHeaderV2
r
=
new
SendMessageRequestHeaderV2
();
SendMessageRequestHeaderV2
r
=
new
SendMessageRequestHeaderV2
();
HashMap
<
String
,
String
>
fields
=
request
.
getExtFields
();
HashMap
<
String
,
String
>
fields
=
request
.
getExtFields
();
if
(
fields
==
null
)
{
if
(
fields
==
null
)
{
// keep same behavior with CommandCustomHeader.decodeCommandCustomHeader
throw
new
RemotingCommandException
(
"the ext fields is null"
);
return
r
;
}
}
String
s
=
fields
.
get
(
"a"
);
String
s
=
fields
.
get
(
"a"
);
Objects
.
requireNon
Null
(
s
,
"the custom field <a> is null"
);
checkNot
Null
(
s
,
"the custom field <a> is null"
);
r
.
setA
(
s
);
r
.
setA
(
s
);
s
=
fields
.
get
(
"b"
);
s
=
fields
.
get
(
"b"
);
Objects
.
requireNon
Null
(
s
,
"the custom field <b> is null"
);
checkNot
Null
(
s
,
"the custom field <b> is null"
);
r
.
setB
(
s
);
r
.
setB
(
s
);
s
=
fields
.
get
(
"c"
);
s
=
fields
.
get
(
"c"
);
Objects
.
requireNon
Null
(
s
,
"the custom field <c> is null"
);
checkNot
Null
(
s
,
"the custom field <c> is null"
);
r
.
setC
(
s
);
r
.
setC
(
s
);
s
=
fields
.
get
(
"d"
);
s
=
fields
.
get
(
"d"
);
Objects
.
requireNon
Null
(
s
,
"the custom field <d> is null"
);
checkNot
Null
(
s
,
"the custom field <d> is null"
);
r
.
setD
(
Integer
.
parseInt
(
s
));
r
.
setD
(
Integer
.
parseInt
(
s
));
s
=
fields
.
get
(
"e"
);
s
=
fields
.
get
(
"e"
);
Objects
.
requireNon
Null
(
s
,
"the custom field <e> is null"
);
checkNot
Null
(
s
,
"the custom field <e> is null"
);
r
.
setE
(
Integer
.
parseInt
(
s
));
r
.
setE
(
Integer
.
parseInt
(
s
));
s
=
fields
.
get
(
"f"
);
s
=
fields
.
get
(
"f"
);
Objects
.
requireNon
Null
(
s
,
"the custom field <f> is null"
);
checkNot
Null
(
s
,
"the custom field <f> is null"
);
r
.
setF
(
Integer
.
parseInt
(
s
));
r
.
setF
(
Integer
.
parseInt
(
s
));
s
=
fields
.
get
(
"g"
);
s
=
fields
.
get
(
"g"
);
Objects
.
requireNon
Null
(
s
,
"the custom field <g> is null"
);
checkNot
Null
(
s
,
"the custom field <g> is null"
);
r
.
setG
(
Long
.
parseLong
(
s
));
r
.
setG
(
Long
.
parseLong
(
s
));
s
=
fields
.
get
(
"h"
);
s
=
fields
.
get
(
"h"
);
Objects
.
requireNon
Null
(
s
,
"the custom field <h> is null"
);
checkNot
Null
(
s
,
"the custom field <h> is null"
);
r
.
setH
(
Integer
.
parseInt
(
s
));
r
.
setH
(
Integer
.
parseInt
(
s
));
s
=
fields
.
get
(
"i"
);
s
=
fields
.
get
(
"i"
);
...
@@ -372,6 +372,12 @@ public abstract class AbstractSendMessageProcessor extends AsyncNettyRequestProc
...
@@ -372,6 +372,12 @@ public abstract class AbstractSendMessageProcessor extends AsyncNettyRequestProc
return
r
;
return
r
;
}
}
private
static
void
checkNotNull
(
String
s
,
String
msg
)
throws
RemotingCommandException
{
if
(
s
==
null
)
{
throw
new
RemotingCommandException
(
msg
);
}
}
public
void
executeSendMessageHookAfter
(
final
RemotingCommand
response
,
final
SendMessageContext
context
)
{
public
void
executeSendMessageHookAfter
(
final
RemotingCommand
response
,
final
SendMessageContext
context
)
{
if
(
hasSendMessageHook
())
{
if
(
hasSendMessageHook
())
{
for
(
SendMessageHook
hook
:
this
.
sendMessageHookList
)
{
for
(
SendMessageHook
hook
:
this
.
sendMessageHookList
)
{
...
...
broker/src/test/java/org/apache/rocketmq/broker/processor/AbstractSendMessageProcessorTest.java
0 → 100644
浏览文件 @
a137e48a
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.apache.rocketmq.broker.processor
;
import
java.lang.reflect.Field
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
import
org.apache.rocketmq.common.protocol.header.SendMessageRequestHeaderV2
;
import
org.apache.rocketmq.remoting.protocol.RemotingCommand
;
import
org.junit.Assert
;
import
org.junit.Test
;
public
class
AbstractSendMessageProcessorTest
{
@Test
public
void
testDecodeSendMessageHeaderV2
()
throws
Exception
{
Field
[]
declaredFields
=
SendMessageRequestHeaderV2
.
class
.
getDeclaredFields
();
List
<
Field
>
declaredFieldsList
=
new
ArrayList
<>();
for
(
Field
f
:
declaredFields
)
{
if
(
f
.
getName
().
startsWith
(
"$"
))
{
continue
;
}
f
.
setAccessible
(
true
);
declaredFieldsList
.
add
(
f
);
}
RemotingCommand
command
=
RemotingCommand
.
createRequestCommand
(
0
,
null
);
HashMap
<
String
,
String
>
m
=
buildExtFields
(
declaredFieldsList
);
command
.
setExtFields
(
m
);
check
(
command
,
declaredFieldsList
);
}
private
HashMap
<
String
,
String
>
buildExtFields
(
List
<
Field
>
fields
)
{
HashMap
<
String
,
String
>
extFields
=
new
HashMap
<>();
for
(
Field
f:
fields
)
{
Class
<?>
c
=
f
.
getType
();
if
(
c
.
equals
(
String
.
class
))
{
extFields
.
put
(
f
.
getName
(),
"str"
);
}
else
if
(
c
.
equals
(
Integer
.
class
)
||
c
.
equals
(
int
.
class
))
{
extFields
.
put
(
f
.
getName
(),
"123"
);
}
else
if
(
c
.
equals
(
Long
.
class
)
||
c
.
equals
(
long
.
class
))
{
extFields
.
put
(
f
.
getName
(),
"1234"
);
}
else
if
(
c
.
equals
(
Boolean
.
class
)
||
c
.
equals
(
boolean
.
class
))
{
extFields
.
put
(
f
.
getName
(),
"true"
);
}
else
{
throw
new
RuntimeException
(
f
.
getName
()
+
":"
+
f
.
getType
().
getName
());
}
}
return
extFields
;
}
private
void
check
(
RemotingCommand
command
,
List
<
Field
>
fields
)
throws
Exception
{
SendMessageRequestHeaderV2
o1
=
(
SendMessageRequestHeaderV2
)
command
.
decodeCommandCustomHeader
(
SendMessageRequestHeaderV2
.
class
);
SendMessageRequestHeaderV2
o2
=
AbstractSendMessageProcessor
.
decodeSendMessageHeaderV2
(
command
);
for
(
Field
f
:
fields
)
{
Object
value1
=
f
.
get
(
o1
);
Object
value2
=
f
.
get
(
o2
);
if
(
value1
==
null
)
{
Assert
.
assertNull
(
value2
);
}
else
{
Assert
.
assertEquals
(
value1
,
value2
);
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录