我正在从Arduino发布MQTT消息,并从Raspberry Pi订阅这些消息。有时发布的速度快于Raspberry可以接收(和处理)的速度。
我正在寻找一种检查Raspberry端排队的消息数量的方法。我正在使用Paho-MQTT。我只看到可以设置最大队列大小,但是如何检查当前队列大小? (如果可能的话。)
答案 0 :(得分:1)
代理中没有队列,所有消息均在发布时传递。
Paho客户端是单线程的,接收到的消息回叫是在网络线程上处理的,因此消息可以备份在网络堆栈上(用于QOS0消息)。 QOS1 / 2消息将在代理中备份,直到当前消息的QOS握手完成为止。
max_queued消息设置是关于在阻塞之前客户端将接受多少QOS 1/2消息发布,而不是排队的传入消息数量。
如果您想以一种可测量的方式将消息排队,则让Message Receive回调将消息放入本地队列,并让第二个线程(或线程池,如果可以并行处理)从本地获取消息队列。