Um cliente MQTT pode assinar um tópico criado por ele mesmo?

18

No meu entendimento, no MQTT, um tópico é criado quando um cliente publica algo com o nome do tópico correspondente.

Não há necessidade de configurar um tópico, basta publicar nele.

A partir daqui .

É possível que um cliente se inscreva no seu próprio tópico, depois de publicado, criado? Não encontrei nenhuma restrição nas especificações . Não está listado como possível comportamento anormal nem:

5.4.8 Detectando comportamentos anormais

As implementações do servidor podem monitorar o comportamento do cliente para detectar possíveis incidentes de segurança. Por exemplo:

  • Tentativas repetidas de conexão
  • Tentativas repetidas de autenticação
  • Terminação anormal de conexões
  • Varredura de tópicos (tentativas de enviar ou assinar muitos tópicos)
  • Enviando mensagens não entregues (sem assinantes dos tópicos)
  • Clientes que se conectam, mas não enviam dados

Com base nisso, acho que é certamente possível. Então, eu estou interessado em quais são os casos de uso desse recurso?

Por que o padrão permite esse mecanismo, seria complicado rastrear o proprietário dos tópicos? Portanto, simplesmente permite que os clientes se inscrevam em seu próprio tópico.

Um caso de uso em que consigo pensar é que dessa maneira um cliente pode verificar seus dados publicados.

Bence Kaulics
fonte

Respostas:

19

Sim, é possível se inscrever em um tópico criado por ele mesmo.

Um cliente MQTT pode ser um publicador e assinante ao mesmo tempo. Em termos do MQTT, um cliente inclui ambos subscriberse publishers.

Estou interessado em quais são os casos de uso desse recurso?

Um possível caso de uso (presumo) é que, suponha que haja três clientes (x, y, z) inscritos em um tópico x-topiccriado por x. Sempre que uma mensagem é publicada x-topic, todos os usuários inscritos nesse tópico receberão a mensagem. Se ypublicar uma mensagem em um tópico x-topic(presumo que isso possa ser feito), se xnão assinar esse tópico, mesmo que tenha criado o tópico, ele não receberá as mensagens.

Portanto, um cliente precisa estar inscrito em um tópico para receber mensagens, mesmo que este seja o criador original desse tópico.

Mas o mecanismo pode ser controlado usando corretores como um meio.

bravokeyl
fonte
Sim, essa opção passou pela minha cabeça. Apenas não tinha certeza se um novo cliente pode publicar em um tópico existente, já usado por outro editor.
Bence Kaulics
Sim, um novo cliente pode publicar em um tópico existente. Lembre-se de que os clientes não se comunicam diretamente, todas as publicações e assinaturas acontecem através de um corretor.
bravokeyl
0

Sim.

Os clientes MQTT estão conectados a um broker que pode ser uma nuvem ou outro dispositivo.

Não existe algo como criação de tópico. Eles são usados ​​como cabeçalho para uma mensagem. Portanto, se seu cliente se inscreveu em um tópico e se ele publica algo sobre esse tópico, a mensagem será recebida por meio do broker para o cliente novamente.

Exemplos de bons corretores são o Mosquitto para execução em dispositivos e o CloudMqtt para corretor baseado em nuvem

Hitesh Pratyush V
fonte
4
Isso realmente não expande o corpo de conhecimento além do que a outra resposta já forneceu um ano atrás. Você é livre para adicionar novas respostas, mesmo para perguntas respondidas. No entanto, essas respostas devem oferecer informações adicionais ou atualizadas sobre a pergunta ou a solução.
Helmar