As regras de saída de dados encaminham mensagens do ApsaraMQ for MQTT para o ApsaraMQ for RocketMQ. Isso permite que aplicações backend consumam mensagens MQTT com recursos nativos do RocketMQ, como mensagens ordenadas e transacionais.
Atualmente, o ApsaraMQ for MQTT suporta troca de dados apenas com o ApsaraMQ for RocketMQ. Este tutorial aborda duas tarefas: crie uma regra de saída de dados no console e execute um exemplo em Java que publica mensagens via MQTT pela Internet e as consome a partir do RocketMQ.
Como funciona
O fluxo de exportação de dados tem três etapas:
Cliente MQTT publica uma mensagem. Um dispositivo ou aplicação se conecta ao ApsaraMQ for MQTT e publica uma mensagem em um tópico MQTT (por exemplo,
sensor/temperature).Regra de saída de dados encaminha a mensagem. O ApsaraMQ for MQTT compara a mensagem com as regras de saída configuradas e a encaminha para o tópico correspondente no ApsaraMQ for RocketMQ.
Consumidor RocketMQ recebe a mensagem. Uma aplicação backend assina o tópico do RocketMQ e processa a mensagem encaminhada usando recursos como rastreamento de mensagens e tentativas automáticas.

Limitações
As regras de saída de dados aceitam apenas instâncias do ApsaraMQ for RocketMQ 4.x como destino.
Não há suporte para encaminhamento entre regiões. A instância MQTT e a instância RocketMQ devem estar na mesma região.
Acesso à rede
O ApsaraMQ for MQTT oferece dois tipos de endpoints:
|
Tipo de endpoint |
Caso de uso |
|
Public Endpoint |
Acesso pela Internet. Geralmente utilizado por dispositivos IoT e móveis. |
|
VPC Endpoint |
Acesso dentro de uma Virtual Private Cloud (VPC). Comumente usado por aplicações em cloud. |
Utilize sempre o nome de domínio, e não o endereço IP resolvido, para conectar os clientes. Os endereços IP mudam dinamicamente durante atualizações de resolução de nomes de domínio. O ApsaraMQ for MQTT não se responsabiliza por falhas e perdas diretas ou indiretas causadas pelo uso de endereços IP fixos no código ou regras de firewall baseadas em IPs.
Pré-requisitos
Antes de começar, certifique-se de ter:
IntelliJ IDEA ou Eclipse instalado
Java 8 ou 11 instalado
Uma instância do ApsaraMQ for MQTT com um tópico e um grupo criados. Consulte Criar recursos
Uma instância do ApsaraMQ for RocketMQ 4.x com um tópico e um grupo criados. Consulte Etapa 2: Criar recursos
Um par de AccessKey para autenticação. Consulte Criar um par de AccessKey
Etapa 1: Crie uma regra de saída de dados
Acesse o console do ApsaraMQ for MQTT. No painel de navegação à esquerda, clique em Instances.
Na barra de navegação superior, selecione a região da sua instância. Clique no nome da instância para abrir a página Instance Details.
No painel de navegação à esquerda, clique em Rules. No canto superior esquerdo, clique em Create Rule.
-
Preencha o assistente Create Rule:
-
Configure Basic Information: Insira um ID de regra e defina Rule Type como Data Outbound.

-
Configure Rule Source: Selecione um tópico na sua instância do ApsaraMQ for MQTT.

-
Configure Rule Destination: Escolha sua instância do ApsaraMQ for RocketMQ e um tópico nessa instância.

-
Etapa 2: Configure o projeto de exemplo
Baixe o código de exemplo
Clone ou baixe o projeto mqtt-java-demo.
Abra a pasta
lmq-java-demono IntelliJ IDEA.Verifique se o arquivo
pom.xmlinclui as seguintes dependências:
<dependencies>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>ons-client</artifactId>
<version>1.8.5.Final</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-onsmqtt</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>
</dependencies>
Configure credenciais de acesso
Obtenha um par de AccessKey. Para mais detalhes, consulte Criar um par de AccessKey.
-
Defina as seguintes variáveis de ambiente. Para mais informações, consulte Configurar uma credencial de acesso.
Variável
Descrição
MQTT_AK_ENVAccessKey ID
MQTT_SK_ENVAccessKey secret
Não codifique pares de AccessKey diretamente no código-fonte. Armazene-os em variáveis de ambiente para evitar exposição acidental.
Etapa 3: Execute o código de exemplo
A classe MQ4IoTSendMessageToRocketMQ.java demonstra todo o fluxo de dados: ela envia mensagens pelo ApsaraMQ for MQTT e as consome via ApsaraMQ for RocketMQ. Antes de executar o exemplo, substitua os espaços reservados pelas informações dos seus recursos.
Substitua os seguintes espaços reservados:
|
Espaço reservado |
Descrição |
Onde encontrar |
|
|
ID do grupo RocketMQ |
Console do ApsaraMQ for RocketMQ |
|
|
Endpoint TCP do RocketMQ |
Página Instance Details no console do ApsaraMQ for RocketMQ |
|
|
Nome do tópico RocketMQ |
Console do ApsaraMQ for RocketMQ |
|
|
ID da instância MQTT |
Página Instance Details no console do ApsaraMQ for MQTT |
|
|
Endpoint MQTT |
Página Instance Details no console do ApsaraMQ for MQTT |
|
|
ID do cliente MQTT (formato: |
Gere usando seu ID de grupo MQTT e um ID de dispositivo único |
Requisitos do Client ID:
Formato:
GroupID@@@DeviceID. O ID do grupo é aquele criado no console do ApsaraMQ for MQTT. O ID do dispositivo é um identificador personalizado.Comprimento máximo: 64 caracteres.
Cada conexão TCP deve usar um client ID exclusivo. IDs duplicados causam exceções de conexão e desconexões inesperadas.
Etapa 4: Verifique o resultado
Após executar a classe MQ4IoTSendMessageToRocketMQ, valide a entrega de mensagens ponta a ponta usando um dos métodos abaixo.
Verifique a saída do código
Se a saída do console exibir mensagens semelhantes às seguintes, o cliente MQTT enviou as mensagens e o consumidor RocketMQ as recebeu:

Verifique no console
Confirme que as mensagens foram enviadas:
Acesse a página Instance Details no console do ApsaraMQ for MQTT.
No painel de navegação à esquerda, clique em Message Trace Query.
Pesquise por ID do grupo e ID do dispositivo para confirmar que as mensagens foram publicadas.

Confirme que as mensagens foram consumidas:
Acesse a página Instance Details no console do ApsaraMQ for RocketMQ.
No painel de navegação à esquerda, clique em Message Query.
Pesquise por tópico para confirmar que as mensagens foram encaminhadas ao RocketMQ.

Clique em Message Trace na coluna Actions para verificar se a mensagem foi consumida.
