README ¶
TDMQ-CMQ Benchmark
编译构建
下载预编译的二进制安装
https://github.com/yougg/cmq-go-tdmq/releases
从源码安装
安装二进制到$GOPATH/bin
go install github.com/yougg/cmq-go-tdmq/kit/perf@main
从源码编译二进制
GOOS=linux go generate perf.go
GOOS=darwin go generate perf.go
GOOS=windows go generate perf.go
编译输出文件:
perf
或perf.exe
编写性能测试用例
完整用例配置文件参考
一个用例文件可以包含多条用例, 用例串行执行, 可设置是否启用一条用例
可配置多个用例文件启动多个性能测试进程同时进行压测
---
- Description: example # 用例描述:执行1000次 向1个队列发送1条1KB的消息
CaseEnabled: false # 是否启用本用例:true, false
RepeatTimes: 0 # 用例重复次数:1000次
RepeatTimeout: 600 # 用例固定重复执行时间, 单位:秒, 非0时 RepeatTimes 配置无效
Concurrent: 100 # 最大并发数量:100
MaximumTPS: 0 # 最大限制TPS:0: 不限制,非0: 限制对应数量TPS
ResourceType: queue # 请求的资源类型:queue, topic
ResourceName: queue_ # 请求的资源名称:队列/主题的全名或者前缀,关联下面资源数量(1条时使用全名,多条时使用前缀)
ResourceCount: 10 # 请求的资源数量:1个或多个队列/主题
RandMsgSize: true # 请求的消息体积使用[1 ~ MessageSize]范围内的随机大小
MessageSize: 1024 # 请求的消息体积:1024B == 1KB,单条消息的体积,批量请求时总体积不能超过64KB
MessageCount: 1 # 请求的消息数量:1条,每次Action请求消息数量,Batch批量Action请求为1~16条
Action: SendMessage # 请求消息的动作:QueryQueueRoute,SendMessage,BatchSendMessage,ReceiveMessage,BatchReceiveMessage,DeleteMessage,BatchDeleteMessage,QueryTopicRoute,PublishMessage,BatchPublishMessage
ReceiptHandles: # 请求删除消息ID列表
- "111"
- "222"
DelaySeconds: 123 # 单位为秒,消息发送到队列后,延时多久用户才可见该消息。
PollingWaitSeconds: 123 # 长轮询等待时间。取值范围0 - 30秒
RoutingKey: routing_key # 发送消息的路由路径
Tags: # 消息过滤标签
- tag0
- tag1
- Description: 执行1000次 向1个队列发送1条1KB的消息
CaseEnabled: true # 是否启用本用例:true, false
RepeatTimes: 1000 # 用例重复次数:1000次
RepeatTimeout: 600 # 用例固定重复执行时间, 单位:秒, 非0时 RepeatTimes 配置无效
Concurrent: 100 # 最大并发数量:100
MaximumTPS: 0 # 最大限制TPS:0: 不限制,非0: 限制对应数量TPS
ResourceType: queue # 请求的资源类型:queue, topic
ResourceName: test # 请求的资源名称:队列/主题的全名或者前缀,关联下面资源数量(1条时使用全名,多条时使用前缀)
ResourceCount: 1 # 请求的资源数量:1个或多个队列/主题
RandMsgSize: true # 请求的消息体积使用[1 ~ MessageSize]范围内的随机大小
MessageSize: 1024 # 请求的消息体积:1024B == 1KB,单条消息的体积,批量请求时总体积不能超过64KB
MessageCount: 1 # 请求的消息数量:1条,每次Action请求消息数量,Batch批量Action请求为1~16条
Action: SendMessage # 请求消息的动作:QueryQueueRoute,SendMessage,BatchSendMessage,ReceiveMessage,BatchReceiveMessage,DeleteMessage,BatchDeleteMessage,QueryTopicRoute,PublishMessage,BatchPublishMessage
DelaySeconds: 0 # 单位为秒,消息发送到队列后,延时多久用户才可见该消息。
- Description: 执行600秒 从1个队列接收1条消息
CaseEnabled: true # 是否启用本用例:true, false
RepeatTimes: 0 # 用例重复次数:1000次
RepeatTimeout: 600 # 用例固定重复执行时间, 单位:秒, 非0时 RepeatTimes 配置无效
Concurrent: 100 # 最大并发数量:100
MaximumTPS: 0 # 最大限制TPS:0: 不限制,非0: 限制对应数量TPS
ResourceType: queue # 请求的资源类型:queue, topic
ResourceName: test # 请求的资源名称:队列/主题的全名或者前缀,关联下面资源数量(1条时使用全名,多条时使用前缀)
Action: ReceiveMessage # 请求消息的动作:QueryQueueRoute,SendMessage,BatchSendMessage,ReceiveMessage,BatchReceiveMessage,DeleteMessage,BatchDeleteMessage,QueryTopicRoute,PublishMessage,BatchPublishMessage
MessageCount: 1 # 请求的消息数量:1条,每次Action请求消息数量,Batch批量Action请求为1~16条
AloneRecvTime: true # 拉取消息是否分隔Ack进行独立计时
AckEnabled: true # 拉取到消息后是否向服务端Ack确认(删除)该条消息
PollingWaitSeconds: 5 # 长轮询等待时间。取值范围0 - 30秒
复制编辑以上yaml
内容到 https://www.json2yaml.com/ 进行转换json
复制转换后的json
内容到本地保存为cases.json
文件
用例示例
[
{
"Description": "并发100生产消息",
"CaseEnabled": true,
"RepeatTimes": 0,
"RepeatTimeout": 6000,
"Concurrent": 100,
"MaximumTPS": 0,
"ResourceType": "queue",
"ResourceName": "myqueue0",
"ResourceCount": 1,
"RandMsgSize": false,
"MessageSize": 10,
"MessageCount": 1,
"Action": "SendMessage"
}
]
[
{
"Description": "并发50批量消费消息",
"CaseEnabled": true,
"RepeatTimes": 0,
"RepeatTimeout": 6000,
"Concurrent": 50,
"MaximumTPS": 0,
"ResourceType": "queue",
"ResourceName": "myqueue0",
"ResourceCount": 1,
"Action": "BatchReceiveMessage",
"MessageCount": 2,
"AloneRecvTime": true,
"AckEnabled": true,
"PollingWaitSeconds": 5
}
]
执行测试用例
./perf -h # 查看命令参数帮助
./perf -e -keepalive -s 1 -u "http://12.34.56.78:9999" -i "AKIDxxxxx" -k "abcdefghijk" -c cases.json
nohup ./perf -e -keepalive -s 1 -u "http://12.34.56.78:9999" -i "AKIDxxxxx" -k "abcdefghijk" -c cases1.json &>> cases1.log &
Documentation ¶
There is no documentation for this package.
Click to show internal directories.
Click to hide internal directories.