Todos os produtos
Search
Central de documentação

IoT Platform:Assinatura do lado do servidor (MNS)

Última atualização: Jun 26, 2026

Este tópico descreve como configurar uma assinatura do lado do servidor para enviar notificações de alteração de status do dispositivo de um produto para uma fila da Simple Message Queue (antigo MNS) (SMQ). Seu servidor pode receber essas notificações ao escutar a fila MNS.

Pré-requisitos

Configure uma assinatura do lado do servidor

No console do IoT Platform, crie uma assinatura do lado do servidor para MNS e selecione os tipos de mensagem desejados.

  1. Faça login no console do IoT Platform.

  2. Na página Overview, localize a instância que deseja gerencie e clique em no ID ou no nome da instância.

  3. No painel de navegação à esquerda, escolha Devices > Products. Em seguida, clique em Create Product para crie um produto de detector de gás.

  4. Escolha Devices > Add Device para crie um dispositivo no produto de detector de gás.

    O certificado do dispositivo é necessário durante a configuração do SDK do lado do dispositivo.

  5. No painel de navegação à esquerda, escolha Rules Engine > Server-side Subscription. Depois, clique em Create Subscription para crie uma assinatura do lado do servidor para MNS. Para mais informações, consulte Usar assinaturas do lado do servidor para MNS.

    Nota

    Ao configurar o encaminhamento de mensagens para o MNS pela primeira vez, clique em Authorize na mensagem solicitada. Você será redirecionado ao console do RAM para conceder acesso do IoT Platform ao MNS.

    Neste exemplo, selecione Device Status Change Notification como tipo de mensagem. Isso garante que todas as notificações de alteração de status do dispositivo para o produto sejam enviadas à fila MNS.

    Após a criação da assinatura, o IoT Platform cria automaticamente uma fila no MNS para receber mensagens. O nome da fila segue o formato aliyun-iot-${yourProductKey}. Utilize esse nome de fila ao configurar o SDK do MNS para escutar mensagens.

    Na lista de assinaturas, clique em no ícone ao lado de MNS para visualize o nome da fila MNS.

Configure o SDK do MNS no servidor

Este exemplo utiliza a demonstração do SDK do MNS para Java.

  1. Acesse as Notas de versão do SDK do MNS para Java, baixe o pacote de amostra e descompacte-o.

    Este exemplo usa o pacote de amostra aliyun-sdk-mns-samples-1.1.9.1.zip.

  2. No IntelliJ IDEA, importe a pasta aliyun-sdk-mns-samples-1.1.9.1 como um projeto.

  3. Em seu diretório local, em C:\Users\${YourComputerUserName}, crie um arquivo de propriedades chamado .aliyun-mns.properties. Nesse arquivo, adicione suas credenciais de autenticação do MNS no seguinte formato:

    Nota

    O diretório home no Linux é /home/YOURNAME/. No Windows, o diretório home é C:\Users\YOURNAME.

    mns.accountendpoint=http://${your_accountId}.mns.${your_regionId}.aliyuncs.com
    mns.accesskeyid=${your_accesskeyid}
    mns.accesskeysecret=${your_accesskeysecret}

    Parâmetro

    Descrição

    accountendpoint

    Endpoint do seu serviço MNS. Encontre essa informação no console do Message Service (MNS). Selecione a região onde sua fila está localizada e clique em Details para a fila.

    accesskeyid

    O AccessKey ID e o AccessKey secret da sua conta Alibaba Cloud.

    Faça login no console do IoT Platform, passe o ponteiro sobre a foto do perfil e clique em AccessKey Management para obter o AccessKey ID e o AccessKey secret.

    accesskeysecret

  4. No arquivo ComsumerDemo.java, localizado no diretório src\main\java\com.aliyun.mns.sample.Queue, especifique o nome da fila da Simple Message Queue (antigo MNS) criada automaticamente pelo IoT Platform.

        public static void main(String[] args) {
            CloudAccount account = new CloudAccount(
                    ServiceSettings.getMNSAccessKeyId(),
                    ServiceSettings.getMNSAccessKeySecret(),
                    ServiceSettings.getMNSAccountEndpoint());
            MNSClient client = account.getMNSClient(); // Initialize the client.
            // Consume messages.
            try{
                CloudQueue queue = client.getQueueRef("aliyun-iot-a1eN7La****");// Replace this with the queue name automatically created by IoT Platform.
                for (int i = 0; i < 10; i++)
                {
                    Message popMsg = queue.popMessage(); // Pop a message from the queue.
                    if (popMsg != null){
                        System.out.println("message handle: " + popMsg.getReceiptHandle());
                        System.out.println("message body: " + popMsg.getMessageBodyAsString()); // Get the raw message body.
                        System.out.println("message id: " + popMsg.getMessageId());
                        System.out.println("message dequeue count:" + popMsg.getDequeueCount());
                        // Add your message processing logic here.
                        // Delete the message from the queue.
                        queue.deleteMessage(popMsg.getReceiptHandle());
                        System.out.println("delete message successfully.\n");
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
  5. Execute o arquivo ComsumerDemo.java.

Configure o SDK do lado do dispositivo

  1. Acesse o Link SDK e selecione o SDK para Java.

  2. Baixe a demonstração do Link SDK para Java e descompacte o pacote.

    Nota

    Ao baixar esta demonstração, você concorda com o Contrato de Licença de Software.

  3. No IntelliJ IDEA, importe o projeto JavaLinkKitDemo.

  4. No arquivo device_id, insira as informações do certificado do seu dispositivo.

    {
      "productKey": "xxx",
      "deviceName": "Esensor",
      "productSecret": "",
      "deviceSecret": "1xxx?2"
    }
  5. No arquivo MqttSample.java, localizado no diretório src\main\java\com.aliyun.alink.devicesdk.demo, defina o tópico de publicação como o tópico do seu dispositivo.

    public class MqttSample extends BaseSample {
        final static String TAG = "MqttSample";
        public MqttSample(String pk, String dn) { super(pk, dn); }
        /**
         * An example of the publishing API.
         */
        public void publish() {
            MqttPublishRequest request = new MqttPublishRequest();
            // Specify the topic based on your use case.
            request.topic = "/sys/" + productKey + "/" + deviceName + "/thing/deviceinfo/update";
        }
    }
  6. No arquivo HelloWorld.java, localizado no diretório src\main\java\com.aliyun.alink.devicesdk.demo, insira as informações de conexão do dispositivo.

    Para obter as informações de conexão do dispositivo, consulte Visualizar e configurar endpoints de instância. O formato de channelHost é {productKey}.iot-as-mqtt.{region}.aliyuncs.com:1883. Código de exemplo:

    public void init(final DeviceInfoData deviceInfoData) {
        this.pk = deviceInfoData.productKey;
        this.dn = deviceInfoData.deviceName;
        LinkKitInitParams params = new LinkKitInitParams();
        /**
         * Set MQTT initialization parameters.
         */
        IoTMqttClientConfig config = new IoTMqttClientConfig();
        config.productKey = deviceInfoData.productKey;
        config.deviceName = deviceInfoData.deviceName;
        config.deviceSecret = deviceInfoData.deviceSecret;
        config.channelHost = pk + ".iot-as-mqtt." + deviceInfoData.region + ".aliyuncs.com:1883";
        /**
         * Specifies whether to receive offline messages.
         * This corresponds to the cleanSession field in MQTT.
         */
        // ...
    }
  7. Execute o arquivo HelloWorld.java para conectar o dispositivo.

Verifique os resultados

Após a execução do SDK do lado do dispositivo, a notificação de dispositivo online é enviada para a fila da Simple Message Queue (antigo MNS) por meio da assinatura do lado do servidor. O SDK da Simple Message Queue (antigo MNS) consome a mensagem da fila e a exclua.

O exemplo a seguir mostra a saída quando o SDK da Simple Message Queue (antigo MNS) recebe e exclua uma mensagem com sucesso.

message handle: 519xxx...AgMA==
message body:
  {"payload":"eyJsYXN0xxx...IiwiY2xpZW5xxx...","topic":"/as/mqtt/status/xxx/device1","messageid":15xxx,"timestamp":1661158432}
message id: 51xxx...C49
message dequeue count:1
delete message successfully.