MQTT性能分析

简介: MQTT性能分析

生产者:

#include <iostream>
#include <string>
#include "mqtt/async_client.h"
const std::string SERVER_ADDRESS = "tcp://broker.example.com:1883";
const std::string CLIENT_ID = "publish_client";
const std::string TOPIC = "test/topic";
const int QOS = 1;
class mqtt_callback : public virtual mqtt::callback {
public:
    void connection_lost(const std::string& cause) override {
        std::cout << "\nConnection lost." << std::endl;
        if (!cause.empty())
            std::cout << "Cause: " << cause << std::endl;
    }
    void delivery_complete(mqtt::delivery_token_ptr token) override {}
};
int main(int argc, char* argv[]) {
    mqtt::async_client client(SERVER_ADDRESS, CLIENT_ID);
    mqtt_callback callback;
    client.set_callback(callback);
    mqtt::connect_options connOpts;
    connOpts.set_clean_session(true);
    try {
        client.connect(connOpts)->wait();
        for (int i = 0; i < 100000; i++)
        {
            std::string message = std::to_string(i);
            mqtt::message_ptr pubmsg = mqtt::make_message(TOPIC, message);
            pubmsg->set_qos(QOS);
            client.publish(pubmsg)->wait();
        }
        client.disconnect()->wait();
    }
    catch (const mqtt::exception& exc) {
        std::cerr << "\nError: " << exc.what() << std::endl;
        return 1;
    }
   return 0;
}

测试发现推送数据量比较大的时候,消费端消费的数据不及时。分析:wait()函数是个阻塞函数,会等待服务器返回ack消息后生产者才会往下继续执行,发送下一条指令。使用wireshark抓包可以看出。

临时解决方案:删除wait()函数,不需要等待服务器的ack返回。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
并行计算 数据可视化 安全
可视化性能分析器nvvp的安装
可视化性能分析器nvvp的安装
|
2月前
|
监控 数据挖掘
性能分析之解析 RESAR 性能分析七步法
【2月更文挑战第5天】性能分析之解析 RESAR 性能分析七步法
100 3
性能分析之解析 RESAR 性能分析七步法
|
2月前
|
监控 NoSQL MongoDB
|
缓存 算法 Linux
系统性能分析从入门到进阶(1)
系统性能分析从入门到进阶
130 0
|
测试技术 数据库 UED
06 性能分析之通过标准
06 性能分析之通过标准
|
SQL 监控 Java
02 性能分析之解决方案
02 性能分析之解决方案
|
SQL 存储 缓存
性能分析优化的道与术
如果网络不稳定,也会导致RT的曲线抖动较为剧烈,产生毛刺甚至丢包,这个时候P90/P99的数值也可能变大。因此稳定和足够的网络带宽,对系统的性能来说是很重要的。
性能分析优化的道与术
|
监控 关系型数据库 MySQL
eBCC性能分析最佳实践(0) - 开启性能分析新篇章
BCC是基于4.x kernel版本上的ebpf发展出来的一套性能分析工具集; eBCC,顾名思义则是extended BCC的缩写,是阿里巴巴内核团队在Aliyun Linux上对BCC项目的拓展,包含BCC本身已有的工具集,和我们新开发的一些小的工具; eBCC则是基于在最新的BCC版本0.9之上做了一些拓展。
2298 0