Crie regras no ApsaraMQ for MQTT para enviar notificações de status do cliente ao ApsaraMQ for RocketMQ. Este tópico explica como criar essa regra para monitorar o status online dos clientes.
Contexto
Em diversos cenários de negócios, os serviços de backend precisam rastrear e analisar conexões e desconexões de clientes, além de enviar mensagens com base no status online. O ApsaraMQ for MQTT fornece notificações assíncronas de eventos de ciclo de vida para ajudar a acompanhar o status online dos clientes. Quando um cliente MQTT se conecta ou desconecta, o serviço MQTT aciona uma mensagem de notificação. Receba essas notificações das seguintes formas:
Use um SDK de nuvem para se conectar ao serviço ApsaraMQ for MQTT e obter o status online do cliente. Para mais informações, consulte Obter o status online dos clientes do ApsaraMQ for MQTT.
Crie uma regra de notificação de status do cliente para enviar as notificações ao ApsaraMQ for RocketMQ. Em seguida, inscreva-se nas mensagens do ApsaraMQ for RocketMQ para recuperar o status online do cliente.
Este tópico descreve como criar uma regra de notificação de status do cliente que permite a um aplicativo de backend obter o status online dos clientes.

Acesso à rede
O ApsaraMQ for MQTT disponibiliza o Public Endpoint e o VPC Endpoint.
O Public Endpoint é um endereço IP usado para acessar o ApsaraMQ for MQTT pela Internet. Geralmente, endpoints públicos são utilizados em cenários de IoT e Internet móvel.
O VPC Endpoint é um endereço IP usado para acessar o ApsaraMQ for MQTT em uma nuvem virtual privada (VPC). Na maioria dos casos, aplicações na nuvem utilizam endpoints de VPC para se conectar ao ApsaraMQ for MQTT.
Para conectar um cliente ao ApsaraMQ for MQTT, use o nome de domínio em vez do endereço IP, pois o IP muda dinamicamente. A equipe técnica do ApsaraMQ for MQTT não se responsabiliza por falhas e perdas diretas ou indiretas nos seguintes cenários:
Uso de endereço IP para acessar o cliente no ApsaraMQ for MQTT. Após a atualização da resolução de nomes de domínio pela equipe técnica do ApsaraMQ for MQTT, o endereço IP original torna-se inválido.
Existência de política de firewall configurada para endereços IP na rede onde o cliente está em execução. Após a atualização da resolução de nomes de domínio pela equipe técnica do ApsaraMQ for MQTT, os novos endereços IP são bloqueados devido à política de firewall.
Pré-requisitos
As regras de notificação de status do cliente para o ApsaraMQ for MQTT suportam apenas instâncias da série 4.x do ApsaraMQ for RocketMQ.
Não é possível utilizar regras de notificação de status do cliente para o ApsaraMQ for MQTT entre regiões diferentes. Portanto, crie os recursos do ApsaraMQ for MQTT e do ApsaraMQ for RocketMQ na mesma região.
1. Criar uma regra de notificação de status do cliente
Faça login no console do ApsaraMQ for MQTT. No painel de navegação à esquerda, clique em Instances.
Na barra de navegação superior, selecione a região onde reside a instância que você deseja gerenciar. Na página Instances, clique no nome da instância para acessar a página Instance Details.
No painel de navegação à esquerda, clique em Rules.
Na página Rules, clique na aba RocketMQ Rule e, em seguida, clique em Create Rule.
-
Na página Create Rule, conclua as etapas a seguir.
-
Configurar informações básicas. Insira um ID de regra e selecione um tipo de regra para notificações de status do cliente.
O ID da regra deve ter entre 3 e 64 caracteres e pode conter apenas letras, dígitos, hifens (-) e sublinhados (_). Após concluir a configuração, clique em Next.
-
Configurar origem da regra. Selecione o group ID criado para o ApsaraMQ for MQTT.
Clique em Next.
-
Configurar destino da regra. Selecione a instância e o tópico criados para o ApsaraMQ for RocketMQ.
Após concluir a seleção, clique em Create.
-
2. Preparar o código de teste
Use código para lidar com alterações de status do cliente e processar notificações de status. Este tópico fornece o código de demonstração Java necessário.
2,1 Baixe o código de exemplo
2,2 Código de conexão e desconexão do cliente
Na classe MQ4IoTSendMessageToMQ4IoTUseSignatureMode.java, preencha os parâmetros do recurso ApsaraMQ for MQTT seguindo as instruções nos comentários do código.
Para este teste, basta simular operações de conexão e desconexão; portanto, não é necessário enviar mensagens. Remova o código de envio de mensagens. O código abaixo é um exemplo.
2,3 Processar mensagens de notificação de status
Depois que as mensagens de notificação de status forem enviadas ao ApsaraMQ for RocketMQ, um consumidor deverá se inscrever e processar essas mensagens.
Na classe MQTTClientStatusNoticeProcessDemo.java, especifique os parâmetros dos recursos do ApsaraMQ for RocketMQ conforme instruído nos comentários do código. O código a seguir serve como exemplo.
3. Verifique o resultado
-
Execute a função
mainna classeMQ4IoTSendMessageToMQ4IoTUseSignatureMode.javapara simular um cliente entrando online. Realize as operações a seguir para verificar o status do cliente e o status de entrega da mensagem.NotaPara simular a desconexão de um cliente, interrompa a execução do método main.
Consultar o status do cliente. No console do ApsaraMQ for MQTT, acesse a página Device Status Query. Use o Device ID para consultar o cliente e confirmar que ele está online.
-
Consultar a entrega da mensagem de evento. No console do ApsaraMQ for RocketMQ, acesse a página Message Query. Consulte por tópico e verifique se a mensagem de evento online foi entregue.
Nos resultados da consulta, a Tag desta mensagem é
connect, o que indica um evento de cliente online.
-
Execute o método main na classe
MQTTClientStatusNoticeProcessDemo.java. O consumidor recebe a mensagem de evento online e o estadoClientStatusmuda defalseparatrue.D:\tools\jdk1.8.0_361\bin\java.exe ... ClientStatus :false ClientStatus :false ClientStatus :false {"clientId":"GID_xxx1","clientIp":"2xxx9","eventIndex":1726205886624,"eventType":"connect","time":1726205886624,"channelId":"3xxx1245b8cd"} ClientStatus :true ClientStatus :true ClientStatus :true ClientStatus :true ClientStatus :true