O blog do HiveMQ lista sob "práticas recomendadas" para não assinar o curinga de vários níveis ao tentar despejar todas as mensagens em um banco de dados. Eles afirmam que o cliente assinante pode não conseguir acompanhar um alto carregamento de mensagens e propõem usar um plug-in do broker para conectar-se diretamente ao fluxo de mensagens.
Às vezes, é necessário assinar todas as mensagens transferidas pelo broker, por exemplo, ao persistir todas elas em um banco de dados. Isso não deve ser feito usando um cliente MQTT e assinando o curinga de vários níveis. O motivo é que geralmente o cliente assinante não é capaz de processar a carga de mensagens que está chegando. Especialmente se você tiver um rendimento maciço. Nossa solução recomendada é implementar uma extensão no broker MQTT, por exemplo, o sistema de plug-ins do HiveMQ permite que você se ligue ao comportamento do HiveMQ e inclua uma rotina assíncrona para processar cada mensagem recebida e persistir em um banco de dados.
Existe também
- um sistema semelhante (extensão / plugin) para o broker de mosquito,
- outro método recomendado que funcione com mosquito ou
- evidência razoável de que essa abordagem é desnecessária, ou seja, que um cliente que está se inscrevendo
#
pode se sair bem?
/programming//q/31584613/3984613 não aborda esta questão exaustivamente.
Esta discussão na lista de discussão do openHAB parece sugerir que não há problema em usar
#
como assinatura para receber todas as mensagens:Esta pergunta de estouro de pilha também sugere o mesmo método:
Conforme apontado por Bence Kaulics , a especificação afirma que
#
é válido:Sinceramente, discuto se a afirmação original realmente faz muito sentido:
Se for esse o caso, como o broker pode lidar com as mensagens em primeiro lugar? Contanto que seu cliente tem características de desempenho semelhantes ao corretor, I fortemente duvido que seria possível sobrecarregar o cliente, porque esse nível de tráfego também sobrecarregar o corretor e causa que a falhar em primeiro lugar.
Em resumo, a declaração HiveMQ não parece ser suportada por muitas evidências de outras fontes e, quando você considera o que realmente significaria, não parece particularmente lógico.
fonte
Eu acho que é importante considerar que existem muitos casos de uso diferentes para os intermediários do MQTT, como em qualquer software.
O tratamento de mensagens de bate-papo para um bilhão de usuários (muitos usuários, taxa de mensagens relativamente baixa por usuário) é diferente de um sistema com poucos clientes, mas com uma alta taxa de mensagens, e ambos são diferentes de um sistema de automação residencial (poucos clientes, baixa taxa de mensagens) .
O HiveMQ está pensando nos aplicativos de taxa de cliente / mensagem muito altos - nesse caso, a capacidade do broker quase certamente excede em muito a capacidade de um cliente.
Se você deseja se inscrever
#
no seu sistema de automação residencial, é muito improvável que cause problemas. Você pode verificar e ver se o broker está usando CPU excessiva em qualquer caso.Como nas outras respostas, inscrever-
#
se fornecerá todos os tópicos 'normais', ou seja, qualquer coisa que não comece com a$
. Eu interpreto a especificação como dizendo que cada tópico começando com$
uma árvore separada todo em si mesmo, então você teria que assinar$SYS/#
,$whatever/#
para obter tudo . Você provavelmente não quer fazer isso de qualquer maneira para um aplicativo normal.fonte