一个emqx的benchmark工具

问题背景

mqtt已经是主流的物联网消息中间件,在实际项目中需要压测目前emq集群的性能,虽然官网上已经提供了benchmark工具,但是本人是准备了半天erlang的环境最后没搞定打算自己写一个,同时可以加上业务上的代码,控制输入和输出

技术实现

如何在一个进程中模拟百万个设备连接到emq服务器,同时监控到设备收发消息是否正常。第一个想到的便是使用golang的协程,每个协程作为一个客户端,我找到了一个项目:mqtt-benchmark golang版大家可以参考一下。同时jmeter也有mqtt的测试插件:mqtt-jmeter,所以我在想如何通过java来实现,在jdk19的新特性中有一项是Virtual Threads,由于是刚刚发布,我想还是先基于jdk11来实现吧。
我们知道netty是可以处理高连接数的,其原理在于基于reatctor模型的io多路服用,我便发现了一个基于netty的异步编程框架vert.x,在看过vert.x的文档后,发现其已经实现了mqtt协议的server/client,于是先写了一个demo,跑了一万个连接:

public class SampleClient {
    public static void main(String[] args){
        Vertx vertx = Vertx.vertx();
        for(int i=0;i<10000;i++) {
            MqttClient client = MqttClient.create(vertx);
            Future<MqttConnAckMessage> future = client.connect(1883, "127.0.0.1","client-"+i);
            future.onSuccess(handler -> {
                client.publishHandler(s -> {
                    System.out.println("There are new message in topic: " + s.topicName());
                    System.out.println("Content(as string) of the message: " + s.payload().toString());
                    System.out.println("QoS: " + s.qosLevel());
                }).subscribeCompletionHandler(s -> {
                    System.out.println("subscribe success");
                }).subscribe("rpi2/temp", 2);
            });
        }
    }
}

运行后完全无压力,这里只给大家提供了一个思路,后续会将全部的测试程序发出来

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容