Todos os produtos
Search
Central de documentação

ApsaraMQ for MQTT:Modelo de mensagens P2P

Última atualização: Jun 28, 2026

Além do modelo padrão de publicação/assinatura (Pub/Sub) definido pelo protocolo MQTT, o ApsaraMQ for MQTT oferece suporte ao modelo de mensagens ponto a ponto (P2P). O P2P permite que um remetente entregue uma mensagem diretamente a um cliente específico, sem exigir que o destinatário assine um tópico previamente.

Por que usar P2P

Em um fluxo de trabalho Pub/Sub padrão, a comunicação um para um exige que remetente e destinatário concordem antecipadamente com um tópico compartilhado. O destinatário precisa assinar ativamente esse tópico antes da chegada de qualquer mensagem, o que adiciona sobrecarga tanto à lógica da aplicação quanto ao registro de assinaturas.

O P2P elimina essas restrições:

  • Sem tópico pré-definido -- O remetente direciona a mensagem ao destinatário usando o ID do cliente. Nenhuma das partes precisa coordenar um nome de tópico com antecedência.

  • Assinatura desnecessária -- O destinatário recebe mensagens P2P assim que se conecta e conclui a inicialização. Não é necessária nenhuma chamada explícita de assinatura.

  • Menor latência de push -- O link de mensagens é otimizado separadamente para entrega P2P, reduzindo a latência de ponta a ponta em comparação à distribuição Pub/Sub.

Comparação entre P2P e Pub/Sub

Dimensão

Pub/Sub

P2P

Topologia

Um para muitos ou muitos para muitos

Um para um

Acordo de tópico

Remetente e destinatário devem concordar com um tópico antecipadamente

O remetente especifica o ID do cliente destinatário diretamente no tópico

Assinatura

O destinatário deve assinar o tópico antes de receber mensagens

Assinatura desnecessária -- basta que o destinatário conclua a inicialização

Caso de uso típico

Transmissão de atualizações para múltiplos consumidores

Envio de um comando ou notificação direcionada a um dispositivo específico

Formato do tópico

As mensagens P2P utilizam uma estrutura de tópico de três níveis:

{parentTopic}/p2p/{receiverClientID}

Segmento

Descrição

Exemplo

{parentTopic}

Tópico de primeiro nível no qual seu cliente MQTT tem permissão para publicar

mytopic

p2p

Palavra-chave fixa que identifica esta mensagem como P2P (definida como tópico de segundo nível)

p2p

{receiverClientID}

ID do cliente do destinatário pretendido (defina como tópico de terceiro nível)

GID_xxxx@@@DEVICEID_001

O tópico montado apresenta o seguinte formato:

mytopic/p2p/GID_xxxx@@@DEVICEID_001

Enviar mensagens P2P

Usando um SDK MQTT

Construa o tópico P2P anexando /p2p/{receiverClientID} ao seu tópico pai e, em seguida, publique nele.

Java

// Build the P2P topic: parentTopic + /p2p/ + receiver's client ID
String p2pTopic = topic + "/p2p/GID_xxxx@@@DEVICEID_001";
sampleClient.publish(p2pTopic, message);

Usando um SDK do ApsaraMQ for RocketMQ

No SDK do ApsaraMQ for RocketMQ, os tópicos pai e subtópicos são configurados separadamente. Defina a propriedade de usuário MqttSecondTopic com a string do subtópico P2P.

Java

// Set the subtopic to target a specific MQTT client
String subTopic = "/p2p/GID_xxxx@@@DEVICEID_001";
msg.putUserProperties(PropertyKeyConst.MqttSecondTopic, subTopic);

Downloads de SDK e código de exemplo

Baixe um SDK e visualize o código de exemplo para envio de mensagens P2P em cada linguagem compatível.

Linguagem

SDK

Código de exemplo

.NET

Eclipse Paho .NET SDK

Código de exemplo .NET

C

Eclipse Paho C SDK

Código de exemplo C

Java

Eclipse Paho SDK

Código de exemplo Java

JavaScript

Eclipse Paho JavaScript

Código de exemplo JavaScript

Python

Eclipse Paho Python SDK

Código de exemplo Python

PHP

Mosquitto-PHP

Código de exemplo PHP

Nota

O SDK Go não oferece suporte ao envio ou recebimento de mensagens P2P.

Receber mensagens P2P

Não é necessária nenhuma assinatura. Conclua a inicialização padrão do cliente MQTT e ele receberá automaticamente qualquer mensagem P2P endereçada ao seu ID de cliente.