El blog de HiveMQ se enumera en "mejores prácticas" para no suscribirse al comodín multinivel al intentar volcar todos los mensajes en una base de datos. Afirman que el cliente suscriptor puede no ser capaz de mantenerse al día con una gran carga de mensajes y propone utilizar un complemento de intermediario para conectarse directamente a la secuencia de mensajes.
A veces es necesario suscribirse a todos los mensajes, que se transfieren a través del intermediario, por ejemplo, cuando se persisten en una base de datos. Esto no debe hacerse utilizando un cliente MQTT y suscribiéndose al comodín multinivel. La razón es que, a menudo, el cliente suscriptor no puede procesar la carga de mensajes que se le presentan. Especialmente si tienes un rendimiento masivo. Nuestra solución recomendada es implementar una extensión en el agente MQTT, por ejemplo, el sistema de complementos de HiveMQ le permite engancharse al comportamiento de HiveMQ y agregar una rutina asíncrona para procesar cada mensaje entrante y conservarlo en una base de datos.
¿Hay alguna
- un sistema similar (extensión / complemento) para el agente de mosquitto,
- otro método recomendado que funciona con mosquitto, o
- ¿evidencia razonable de que este enfoque es innecesario en absoluto, es decir, que un cliente que se suscribe
#
puede hacerlo bien?
/programming//q/31584613/3984613 no aborda esta pregunta exhaustivamente.
Esta discusión en la lista de correo de openHAB parece sugerir que no hay problema con el uso
#
como suscripción para recibir todos los mensajes:Esta pregunta de desbordamiento de pila también sugiere el mismo método:
Como señaló Bence Kaulics , la especificación establece que
#
es válida:Honestamente, disputo si la afirmación original realmente tiene mucho sentido:
Si ese es el caso, ¿cómo podría el corredor manejar los mensajes en primer lugar? Mientras que su cliente tiene características de rendimiento similares a las del corredor, yo fuertemente dudo que sería posible abrumar al cliente, ya que el nivel de tráfico también abrumaría el corredor y la causa de que se bloquee en primer lugar.
En resumen, la afirmación de HiveMQ no parece estar respaldada por mucha evidencia de otras fuentes y, cuando considera lo que realmente significaría, no parece particularmente lógico.
fuente
Creo que es importante tener en cuenta que hay muchos casos de uso diferentes para los corredores MQTT, como con cualquier pieza de software.
El manejo de mensajes de chat para mil millones de usuarios (muchos usuarios, tasa de mensajes relativamente baja por usuario) es diferente a un sistema con pocos clientes pero una tasa de mensajes alta, y ambos son diferentes a un sistema de automatización del hogar (pocos clientes, tasa de mensajes baja) .
HiveMQ está pensando en las aplicaciones de alta tasa de clientes / mensajes, en cuyo caso la capacidad del intermediario casi seguramente supera con creces la de un cliente.
Si desea suscribirse
#
en su sistema de automatización del hogar, es muy poco probable que cause problemas. Puede verificar y ver si el corredor está utilizando una CPU excesiva en cualquier caso.Como en las otras respuestas, suscribirse
#
le dará todos los temas "normales", eso es todo lo que no comienza con un$
. Interpreto la especificación como decir que cada tema que comienza con$
un árbol separado entera en sí misma, por lo que tendría que suscribir$SYS/#
,$whatever/#
para conseguir todo . Lo más probable es que no quiera hacer eso de todos modos para una aplicación normal.fuente