Assinando tópicos de nascimento e vontade do MQTT? (emqttd)

11

Estou executando o emqttd ( emqtt.io ). Gostaria de monitorar os clientes que se conectam e desconectam de um processo separado que estaria inscrevendo-se em um tópico do sistema em que as mensagens de nascimento e vontade serão postadas. Qual é o caminho certo para fazer isso?

Fabien Papleux
fonte
3
Bem-vindo ao IoT SE. Você pode elaborar um pouco mais sobre a configuração? Em que tipo de máquina você está executando o emqttd e em qual versão?
Helmar

Respostas:

5

Gostaria de monitorar os clientes que se conectam e desconectam de um processo separado que estaria inscrevendo-se em um tópico do sistema em que as mensagens de nascimento e vontade serão postadas.

O Guia do Usuário do emqtt mostra um tópico do sistema que oferece algumas Estatísticas do Broker, ou seja, $SYS/brokers/${node}/stats/clients/countfornece a contagem de clientes conectados atualmente. Observe que isso não listará detalhes específicos sobre os clientes conectados - por isso considero que não é necessário aqui.

As mensagens de última vontade (LWT, Última Vontade e Testamento) não são um tópico do sistema, mas um tópico regular, conforme configurado pelo cliente durante a conexão. Se você deseja monitorar esse tópico, basta se inscrever. Observe, no entanto, que as mensagens LWT são descartadas se um cliente for desconectado normalmente enviando uma mensagem DISCONNECT (consulte o blog hiveMQ , ótima leitura a pé).

O Guia do Usuário do emqtt apresenta uma maneira melhor de monitorar a conexão e desconexão de clientes:

A ./bin/emqttd_ctllinha de comando pode ser usada para consultar e administrar o EMQ broker (não está funcionando no Windows).

Eu acho que o monitoramento clients list- listar todos os clientes MQTT - e clients show <ClientId>- mostrar um cliente MQTT - é mais útil aqui. O processo separado planejado para monitorar clientes, portanto, não precisa se inscrever no broker, mas simplesmente utilizar ./bin/emqttd_ctl.

    $ ./bin/emqttd_ctl clients list
    Client(mosqsub/43832-airlee.lo, clean_sess=true, username=test, peername=127.0.0.1:64896, connected_at=1452929113)
    Client(mosqsub/44011-airlee.lo, clean_sess=true, username=test, peername=127.0.0.1:64961, connected_at=1452929275)
Ghanima
fonte
Muito útil. Obrigado por reservar um tempo. O emqttd_ctl pode fornecer uma solução parcial, mas, com um pubsub à nossa disposição, eu esperava que você pudesse usar esse mecanismo para criar alertas. Eu acho que é algo que eu ainda poderia impor exigindo que os clientes publiquem mensagens de nascimento e vontade.
Fabien Papleux 14/01
1

Bem, não tenho certeza sobre a mensagem de nascimento e o LWT (Last Will and Testament) é opcional conforme as especificações. Portanto, você não receberá necessariamente mensagens a menos que tenha seu corretor customizado para esses requisitos.

cogito ergo sum
fonte
LWT é o corretor que atua em nome do cliente desconectado. Implementação que não é opcional para o broker. É meramente opcional que o cliente configure um último tópico da vontade.
Ghanima 11/01
Foi isso que eu quis dizer. O cliente não pode enviar como parte do pacote de conexão.
Cogitoergosum