Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Kwan的解忧杂货铺@新空间代码工作室
Rocketmq
提交
f7de85d3
R
Rocketmq
项目概览
Kwan的解忧杂货铺@新空间代码工作室
/
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看板
提交
f7de85d3
编写于
2月 26, 2019
作者:
K
kavin
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'upstream/develop' into develop
上级
160b9070
42ddf3df
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
131 addition
and
56 deletion
+131
-56
common/src/test/java/org/apache/rocketmq/common/protocol/body/ConsumerConnectionTest.java
...rocketmq/common/protocol/body/ConsumerConnectionTest.java
+83
-0
docs/en/Example_Orderly.md
docs/en/Example_Orderly.md
+1
-1
store/src/test/java/org/apache/rocketmq/store/schedule/ScheduleMessageServiceTest.java
...e/rocketmq/store/schedule/ScheduleMessageServiceTest.java
+47
-55
未找到文件。
common/src/test/java/org/apache/rocketmq/common/protocol/body/ConsumerConnectionTest.java
0 → 100644
浏览文件 @
f7de85d3
/*
* 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.common.protocol.body
;
import
org.apache.rocketmq.common.consumer.ConsumeFromWhere
;
import
org.apache.rocketmq.common.protocol.heartbeat.ConsumeType
;
import
org.apache.rocketmq.common.protocol.heartbeat.MessageModel
;
import
org.apache.rocketmq.common.protocol.heartbeat.SubscriptionData
;
import
org.apache.rocketmq.remoting.protocol.RemotingSerializable
;
import
org.junit.Test
;
import
java.util.HashSet
;
import
java.util.Set
;
import
java.util.concurrent.ConcurrentHashMap
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
public
class
ConsumerConnectionTest
{
@Test
public
void
testFromJson
()
{
ConsumerConnection
consumerConnection
=
new
ConsumerConnection
();
HashSet
<
Connection
>
connections
=
new
HashSet
<
Connection
>();
Connection
conn
=
new
Connection
();
connections
.
add
(
conn
);
ConcurrentHashMap
<
String
/* Topic */
,
SubscriptionData
>
subscriptionTable
=
new
ConcurrentHashMap
<
String
,
SubscriptionData
>();
SubscriptionData
subscriptionData
=
new
SubscriptionData
();
subscriptionTable
.
put
(
"topicA"
,
subscriptionData
);
ConsumeType
consumeType
=
ConsumeType
.
CONSUME_ACTIVELY
;
MessageModel
messageModel
=
MessageModel
.
CLUSTERING
;
ConsumeFromWhere
consumeFromWhere
=
ConsumeFromWhere
.
CONSUME_FROM_FIRST_OFFSET
;
consumerConnection
.
setConnectionSet
(
connections
);
consumerConnection
.
setSubscriptionTable
(
subscriptionTable
);
consumerConnection
.
setConsumeType
(
consumeType
);
consumerConnection
.
setMessageModel
(
messageModel
);
consumerConnection
.
setConsumeFromWhere
(
consumeFromWhere
);
String
json
=
RemotingSerializable
.
toJson
(
consumerConnection
,
true
);
ConsumerConnection
fromJson
=
RemotingSerializable
.
fromJson
(
json
,
ConsumerConnection
.
class
);
assertThat
(
fromJson
.
getConsumeType
()).
isEqualTo
(
ConsumeType
.
CONSUME_ACTIVELY
);
assertThat
(
fromJson
.
getMessageModel
()).
isEqualTo
(
MessageModel
.
CLUSTERING
);
HashSet
<
Connection
>
connectionSet
=
fromJson
.
getConnectionSet
();
assertThat
(
connectionSet
).
isInstanceOf
(
Set
.
class
);
SubscriptionData
data
=
fromJson
.
getSubscriptionTable
().
get
(
"topicA"
);
assertThat
(
data
).
isExactlyInstanceOf
(
SubscriptionData
.
class
);
}
@Test
public
void
testComputeMinVersion
()
{
ConsumerConnection
consumerConnection
=
new
ConsumerConnection
();
HashSet
<
Connection
>
connections
=
new
HashSet
<
Connection
>();
Connection
conn1
=
new
Connection
();
conn1
.
setVersion
(
1
);
connections
.
add
(
conn1
);
Connection
conn2
=
new
Connection
();
conn2
.
setVersion
(
10
);
connections
.
add
(
conn2
);
consumerConnection
.
setConnectionSet
(
connections
);
int
version
=
consumerConnection
.
computeMinVersion
();
assertThat
(
version
).
isEqualTo
(
1
);
}
}
docs/en/Example_Orderly.md
浏览文件 @
f7de85d3
...
...
@@ -4,7 +4,7 @@ RocketMQ provides ordered messages using FIFO order. All related messages need t
The following demonstrates ordered messages by ensuring order of create, pay, send and finish steps of sales order process.
##
2.
1 produce ordered messages
## 1 produce ordered messages
```
package
org
.
apache
.
rocketmq
.
example
.
order2
...
...
store/src/test/java/org/apache/rocketmq/store/schedule/ScheduleMessageServiceTest.java
浏览文件 @
f7de85d3
...
...
@@ -16,6 +16,7 @@
*/
package
org.apache.rocketmq.store.schedule
;
import
org.apache.rocketmq.common.BrokerConfig
;
import
org.apache.rocketmq.common.UtilAll
;
import
org.apache.rocketmq.common.message.MessageDecoder
;
...
...
@@ -45,17 +46,17 @@ import static org.assertj.core.api.Assertions.assertThat;
public
class
ScheduleMessageServiceTest
{
/**t
/**
* t
* defaultMessageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h"
*/
String
testMessageDelayLevel
=
"
5s 10
s"
;
String
testMessageDelayLevel
=
"
2s 3
s"
;
/**
* choose delay level
* 1 = 5s
*/
int
delayLevel
=
1
;
int
delayLevel
=
2
;
private
static
final
String
storePath
=
System
.
getProperty
(
"user.home"
)
+
File
.
separator
+
"schedule_test"
+
UUID
.
randomUUID
();
private
static
final
String
storePath
=
System
.
getProperty
(
"user.home"
)
+
File
.
separator
+
"schedule_test#"
+
UUID
.
randomUUID
();
private
static
final
int
commitLogFileSize
=
1024
;
private
static
final
int
cqFileSize
=
10
;
private
static
final
int
cqExtFileSize
=
10
*
(
ConsumeQueueExt
.
CqExtUnit
.
MIN_EXT_UNIT_SIZE
+
64
);
...
...
@@ -67,7 +68,9 @@ public class ScheduleMessageServiceTest {
BrokerConfig
brokerConfig
;
ScheduleMessageService
scheduleMessageService
;
static
String
sendMessage
=
" ------- schedule message test -------"
;
static
String
sendMessage
=
" ------- schedule message test -------"
;
static
String
topic
=
"schedule_topic_test"
;
static
String
messageGroup
=
"delayGroupTest"
;
static
{
...
...
@@ -107,67 +110,39 @@ public class ScheduleMessageServiceTest {
}
@Test
public
void
buildRunningStatsTest
()
throws
InterruptedException
{
MessageExtBrokerInner
msg
=
buildMessage
();
msg
.
setDelayTimeLevel
(
delayLevel
);
messageStore
.
putMessage
(
msg
);
// wait offsetTable
TimeUnit
.
SECONDS
.
sleep
(
1
);
scheduleMessageService
.
buildRunningStats
(
new
HashMap
<
String
,
String
>()
);
}
@Test
public
void
computeDeliverTimestampTest
()
{
// testMessageDelayLevel just "5s 10s"
long
storeTime
=
System
.
currentTimeMillis
();
long
time1
=
scheduleMessageService
.
computeDeliverTimestamp
(
1
,
storeTime
);
assertThat
(
time1
).
isEqualTo
(
storeTime
+
5
*
1000
);
long
time2
=
scheduleMessageService
.
computeDeliverTimestamp
(
2
,
storeTime
);
assertThat
(
time2
).
isEqualTo
(
storeTime
+
10
*
1000
);
}
@Test
public
void
delayLevel2QueueIdTest
()
{
int
queueId
=
ScheduleMessageService
.
delayLevel2QueueId
(
delayLevel
);
assertThat
(
queueId
).
isEqualTo
(
delayLevel
-
1
);
queueId
=
ScheduleMessageService
.
queueId2DelayLevel
(
delayLevel
);
assertThat
(
queueId
).
isEqualTo
(
delayLevel
+
1
);
}
@Test
public
void
deliverDelayedMessageTimerTaskTest
()
throws
InterruptedException
{
MessageExtBrokerInner
msg
=
buildMessage
();
int
realQueueId
=
msg
.
getQueueId
();
// set delayLevel,and send delay message
msg
.
setDelayTimeLevel
(
delayLevel
);
PutMessageResult
result
=
messageStore
.
putMessage
(
msg
);
assertThat
(
result
.
isOk
()).
isTrue
();
// consumer message
int
delayQueueId
=
ScheduleMessageService
.
delayLevel2QueueId
(
delayLevel
);
assertThat
(
delayQueueId
).
isEqualTo
(
delayLevel
-
1
);
Long
offset
=
result
.
getAppendMessageResult
().
getLogicsOffset
();
String
messageGroup
=
"delayGroupTest"
;
GetMessageResult
messageResult
=
messageStore
.
getMessage
(
messageGroup
,
msg
.
getTopic
(),
msg
.
getQueueId
(),
offset
,
1
,
null
);
// now, no message in queue,must wait > 5 seconds
// now, no message in queue,must wait > delayTime
GetMessageResult
messageResult
=
getMessage
(
realQueueId
,
offset
);
assertThat
(
messageResult
.
getStatus
()).
isEqualTo
(
GetMessageStatus
.
NO_MESSAGE_IN_QUEUE
);
// timer run maybe delay, then consumer message again
// and wait offsetTable
TimeUnit
.
SECONDS
.
sleep
(
3
);
scheduleMessageService
.
buildRunningStats
(
new
HashMap
<
String
,
String
>());
TimeUnit
.
SECONDS
.
sleep
(
6
);
messageResult
=
messageStore
.
getMessage
(
messageGroup
,
msg
.
getTopic
(),
msg
.
getQueueId
(),
offset
,
1
,
null
);
messageResult
=
getMessage
(
realQueueId
,
offset
);
// now,found the message
assertThat
(
messageResult
.
getStatus
()).
isEqualTo
(
GetMessageStatus
.
FOUND
);
// get the message body
ByteBuffer
byteBuffer
=
ByteBuffer
.
allocate
(
messageResult
.
getBufferTotalSize
());
List
<
ByteBuffer
>
byteBufferList
=
messageResult
.
getMessageBufferList
();
List
<
ByteBuffer
>
byteBufferList
=
messageResult
.
getMessageBufferList
();
for
(
ByteBuffer
bb
:
byteBufferList
)
{
byteBuffer
.
put
(
bb
);
}
...
...
@@ -178,22 +153,42 @@ public class ScheduleMessageServiceTest {
String
retryMsg
=
new
String
(
msgList
.
get
(
0
).
getBody
());
assertThat
(
sendMessage
).
isEqualTo
(
retryMsg
);
// method will wait 10s,so I run it by myself
scheduleMessageService
.
persist
();
// add mapFile release
messageResult
.
release
();
}
/**
* add some [error/no use] code test
*/
@Test
public
void
persist
(){
// because of the method will wait 10s
scheduleMessageService
.
persist
();
public
void
otherTest
()
{
// the method no use ,why need ?
int
queueId
=
ScheduleMessageService
.
queueId2DelayLevel
(
delayLevel
);
assertThat
(
queueId
).
isEqualTo
(
delayLevel
+
1
);
// error delayLevelTest
Long
time
=
scheduleMessageService
.
computeDeliverTimestamp
(
999
,
0
);
assertThat
(
time
).
isEqualTo
(
1000
);
// just decode
scheduleMessageService
.
decode
(
new
DelayOffsetSerializeWrapper
().
toJson
());
}
private
GetMessageResult
getMessage
(
int
queueId
,
Long
offset
)
{
return
messageStore
.
getMessage
(
messageGroup
,
topic
,
queueId
,
offset
,
1
,
null
);
}
@After
public
void
shutdown
()
throws
InterruptedException
{
TimeUnit
.
SECONDS
.
sleep
(
1
);
scheduleMessageService
.
shutdown
();
messageStore
.
shutdown
();
messageStore
.
destroy
();
File
file
=
new
File
(
messageStoreConfig
.
getStorePathRootDir
());
...
...
@@ -205,11 +200,10 @@ public class ScheduleMessageServiceTest {
byte
[]
msgBody
=
sendMessage
.
getBytes
();
MessageExtBrokerInner
msg
=
new
MessageExtBrokerInner
();
msg
.
setTopic
(
"schedule_topic_test"
);
msg
.
setTopic
(
topic
);
msg
.
setTags
(
"schedule_tag"
);
msg
.
setKeys
(
"schedule_key"
);
msg
.
setBody
(
msgBody
);
msg
.
setQueueId
(
0
);
msg
.
setSysFlag
(
0
);
msg
.
setBornTimestamp
(
System
.
currentTimeMillis
());
msg
.
setStoreHost
(
storeHost
);
...
...
@@ -226,6 +220,4 @@ public class ScheduleMessageServiceTest {
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录