Mqtt 无法接收所有已发布的消息[AWS IOT]

Mqtt 无法接收所有已发布的消息[AWS IOT],mqtt,publish-subscribe,aws-iot,Mqtt,Publish Subscribe,Aws Iot,我正在尝试使用5个进程每秒发布1000条消息,每个进程有200条关于一个唯一主题的消息。并尝试使用5个进程进行监听,每个进程监听一个发布消息的主题 问题是我无法接收所有的1000条消息,并且每次我执行此过程时接收的消息数量不是恒定的 据我所知,AWS IOT应允许每秒3000条入站消息。尝试在QOS-1或QOS-2级别发布数据 什么是服务质量? 服务质量(QoS)级别是消息的发送方和接收方之间关于保证传递消息的协议。MQTT中有3个QoS级别: 最多一次(0) 至少一次(1) 正好一次(2) 当

我正在尝试使用5个进程每秒发布1000条消息,每个进程有200条关于一个唯一主题的消息。并尝试使用5个进程进行监听,每个进程监听一个发布消息的主题

问题是我无法接收所有的1000条消息,并且每次我执行此过程时接收的消息数量不是恒定的


据我所知,AWS IOT应允许每秒3000条入站消息。

尝试在QOS-1或QOS-2级别发布数据

什么是服务质量?

服务质量(QoS)级别是消息的发送方和接收方之间关于保证传递消息的协议。MQTT中有3个QoS级别:

最多一次(0)

至少一次(1)

正好一次(2)

当谈到QoS时,传递消息总是有两个不同的部分:将客户端发布到代理和将代理发布到订阅客户端。我们需要分别看待它们,因为它们之间存在细微的差异。将客户端发布到代理的QoS级别取决于客户端为特定消息设置的QoS级别。当代理将消息传输到订阅客户机时,它使用客户机先前所做订阅的QoS。这意味着,如果使用较低的QoS订阅,则特定接收客户端的QoS保证可能会降级

为什么服务质量很重要?


QoS是MQTT的一个主要特性,它使不可靠网络中的通信更加容易,因为协议处理重传并保证消息的传递,而不管底层传输有多不可靠。它还使客户端能够根据其网络可靠性和应用程序逻辑来选择QoS级别。

我想可能有很多原因导致您无法看到足够的消息。可能您的生成量不足,可能您的网络连接限制了性能。也许在经纪人方面有一个限制因素。你可以控制一些事情。您尝试更改了什么以查看性能是否发生了变化?我已放置了一条打印语句,以确保我正在发送所需数量的消息,并且我正在ec2实例中运行该程序,因此我不认为网络连接是一个原因。据我从AWS文档中了解,入站消息的数量可能是3000条,因此我认为我无法接近限制。我已经将QoS级别设置为1。我已尝试在多个主题/单个主题上发送它,以减少在一个主题上发布的消息数。我假定您已使用对每个进程进行检测,以编程方式计算发送方进程发送的消息数和接收方进程接收的消息数(例如,使用time.perf_计数器)?是否有任何方法可以在本地运行发送方和接收方(使用两个不同端口上的localhost作为端点)?请附上发布者/订阅者代码感谢您对此问题的评论。问题是,我在循环中调用publish方法,并且我的程序在发布后立即终止,但是publish方法正在创建一个线程来执行发布网络请求。因此,当我的主程序存在时,所有线程都没有发布有效负载,因此我无法获取所有消息。再次感谢你。