Este tópico descreve como conectar um cliente Java Message Service (JMS) que usa o protocolo Advanced Message Queuing Protocol (AMQP) ao Alibaba Cloud IoT Platform e receber mensagens do IoT Platform pelo recurso de assinatura no lado do servidor.
Pré-requisitos
Obtenha o ID do grupo de consumidores que assina as mensagens de um tópico.
Use o grupo de consumidores padrão DEFAULT_GROUP ou crie um grupo de consumidores no console do IoT Platform. Para mais informações, consulte Gerenciar grupos de consumidores.
Configure um grupo de consumidores para assinar as mensagens de um tópico. Para mais informações, consulte Configurar assinatura AMQP no lado do servidor.
Ambiente de desenvolvimento
Neste exemplo, o ambiente de desenvolvimento inclui os seguintes componentes:
Sistema operacional: Windows 10
Java Development Kit (JDK): JDK 8
Ambiente de desenvolvimento integrado (IDE): IntelliJ IDEA Community Edition
Baixe o cliente Apache Qpid JMS
Para baixar o cliente e visualizar as instruções, acesse Qpid JMS 0.57.0.
Neste exemplo, adicione as seguintes dependências a um projeto Maven para baixar o cliente Qpid JMS:
<!-- amqp 1.0 qpid client -->
<dependency>
<groupId>org.apache.qpid</groupId>
<artifactId>qpid-jms-client</artifactId>
<version>0.57.0</version>
</dependency>
<!-- util for base64-->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
Demonstração
Use um cliente AMQP para receber mensagens do IoT Platform com uma conta Alibaba Cloud ou um usuário RAM. Por exemplo, a Empresa A tem uma conta Alibaba Cloud chamada Conta A e a Empresa B tem uma conta Alibaba Cloud chamada Conta B. A Empresa A configurou uma assinatura no lado do servidor no console do IoT Platform usando a Conta A.
-
Use a Conta A ou seu usuário do Resource Access Management (RAM) com permissões concedidas diretamente
NotaPara um usuário RAM autorizado diretamente, conceda a permissão de uso do recurso de assinatura AMQP no lado do servidor (iot:sub). Caso contrário, a conexão falhará. Para mais informações sobre como conceder permissões, consulte Autorização RAM para IoT Platform.
Para melhorar a segurança dos dados, recomendamos conceder permissões operacionais específicas aos usuários RAM por meio de funções RAM. Para mais informações, consulte a seção a seguir.
Para mais informações, consulte a seção Receber mensagens de assinatura no lado do servidor na conta atual deste tópico.
-
Use um usuário RAM que assume uma função RAM
O usuário RAM pode pertencer à Conta A ou à Conta B. Use esse usuário RAM para conectar um cliente AMQP ao IoT Platform ativado na Conta A. Assim, você recebe mensagens de dispositivos pelo recurso de assinatura no lado do servidor.
Para mais informações, consulte a seção Receber mensagens de assinatura no lado do servidor como um usuário RAM que assume uma função RAM deste tópico.
Receber mensagens de assinatura no lado do servidor na conta atual
Baixe o pacote de demonstração e descompacte-o.
-
Abra o IntelliJ IDEA e importe o projeto de exemplo amqp-demo-en do pacote de demonstração.
O arquivo
pom.xmljá contém as dependências Maven necessárias para baixar o cliente Qpid JMS. -
No arquivo
AmqpClient.java, localizado no diretóriosrc/main/java/com.aliyun.iotx.demo, especifique os parâmetros de conexão AMQP descritos na tabela a seguir.ImportanteEspecifique valores válidos para os parâmetros. Caso contrário, o cliente AMQP não conseguirá se conectar ao IoT Platform.
Neste exemplo, o trecho de código
Thread.sleep(60 * 1000);encerra o programa 1 minuto após a inicialização. Defina a duração conforme os requisitos do seu negócio.
Para mais informações, consulte Conectar um cliente AMQP ao IoT Platform.
Parâmetro
Descrição
accessKey
AccessKey ID e AccessKey secret da conta Alibaba Cloud ou do usuário RAM.
Faça login no console do IoT Platform, passe o ponteiro sobre a foto de perfil no canto superior direito e clique em AccessKey Management para obter o AccessKey ID e o AccessKey secret.
accessSecret
consumerGroupId
ID do grupo de consumidores na instância do IoT Platform.
Faça login no console do IoT Platform. Na instância correspondente, acesse para visualizar o ID do grupo de consumidores.
iotInstanceId
ID da instância do IoT Platform. Visualize o ID da instância na aba Overview no console do IoT Platform.
Se o ID da instância for exibido, defina este parâmetro com o ID da instância.
Se a aba Overview não for exibida ou a instância não tiver ID, deixe este parâmetro vazio no formato
iotInstanceId = "".
clientId
ID do cliente. Defina este ID com até 64 caracteres. Recomendamos usar um identificador exclusivo, como UUID, endereço MAC ou endereço IP do servidor onde o cliente AMQP está localizado.
Após conectar e iniciar o cliente AMQP, faça login no console do IoT Platform. Na aba Consumer Groups da página da instância, clique em View ao lado do grupo de consumidores. A página Consumer Group Details exibirá este parâmetro para facilitar a identificação dos clientes.
connectionCount
Número de conexões habilitadas no cliente AMQP. Valor máximo: 128. Use este parâmetro para expansão horizontal em cenários de envio de mensagens em tempo real.
Na página Consumer Group Details, cada cliente conectado aparece como
${clientId}+"-"+ Number. O número mínimo é 0.host
Endpoint usado pelo cliente AMQP para se conectar ao IoT Platform.
Para mais informações sobre o endpoint a especificar na variável
${YourHost}, consulte Gerenciar endpoints de instância. -
Execute o programa
AmqpClient.java.-
Se a saída for semelhante ao exemplo abaixo, o cliente AMQP estará conectado ao IoT Platform e pronto para receber mensagens:
topic = /***********/******/thing/event/property/post, message = 2**************7, content = {"temperature":29,"humidity":29,"time":1617357297270}Parâmetro
Descrição
topic
Tópico usado para enviar propriedades do dispositivo.
messageId
ID da mensagem.
content
Conteúdo da mensagem.
-
Se ocorrer um erro no código ou no ambiente de rede, o cliente AMQP não conseguirá se conectar ao IoT Platform.
Verifique o código e as configurações de rede no log de erros. Corrija o problema e execute o código novamente.
-
Receber mensagens de assinatura no lado do servidor como um usuário RAM que assume uma função RAM
Pré-requisitos
Atribua a função RAM ao usuário RAM para acessar os recursos de assinatura no lado do servidor do IoT Platform pertencentes à Conta A. Para mais informações, consulte Autorizar um usuário RAM da conta Alibaba Cloud atual a usar a assinatura no lado do servidor e Autorizar um usuário RAM de outra conta a usar a assinatura no lado do servidor.
Procedimento
Baixe o pacote de demonstração e descompacte-o.
-
Abra o IntelliJ IDEA e importe o projeto de exemplo amqp-sts-demo do pacote de demonstração.
O arquivo
pom.xmljá contém as dependências Maven necessárias para baixar o cliente Qpid JMS. -
No arquivo
AmqpStsTokenClient.java, localizado no diretóriosrc/main/java/com/aliyun/iotx/demo, especifique os parâmetros de conexão AMQP descritos na tabela a seguir.ImportanteEspecifique valores válidos para os parâmetros. Caso contrário, o cliente AMQP não conseguirá se conectar ao IoT Platform.
Um token do Security Token Service (STS) tem validade máxima de 1 hora. Atualize regularmente os parâmetros de conexão AMQP para garantir a reconexão do cliente ao IoT Platform. Para mais informações, consulte a seção
scheduledExecutorService.scheduleAtFixedRateno código de demonstração.Neste exemplo, o trecho de código
Thread.sleep(6000 * 1000);encerra o programa 1 minuto após a inicialização. Defina a duração conforme os requisitos do seu negócio.
Para mais informações, consulte Conectar um cliente AMQP ao IoT Platform.
Parâmetro
Descrição
CONNECTION_COUNT
Número de conexões habilitadas no cliente AMQP. Valor máximo: 128. Use este parâmetro para expansão horizontal em cenários de envio de mensagens em tempo real.
Na página Consumer Group Details no console do IoT Platform, cada cliente conectado aparece como
"clientId-"+ Number. O número mínimo é 0.DURATION_SECONDS
Período de validade do token STS. A validade não pode exceder 1 hora. Valores válidos: 15 a 60. Unidade: minutos.
STS_ENDPOINT
Endpoint usado para obter o token STS. Para mais informações, consulte Endpoints.
STS_ACCESS_KEY
AccessKey ID e AccessKey secret do usuário RAM que assume a função RAM da Conta A.
STS_ACCESS_SECRET
STS_ROLE_ARN
Alibaba Cloud Resource Name (ARN) da função RAM a ser assumida. Formato:
acs:ram::<account-id>:role/<role-name>.<role-name>é o nome da função RAM em letras minúsculas. Após criar uma função RAM, clique em no nome da função para visualizar o ARN na seção Basic Information.CONSUMER_GROUP_ID
ID do grupo de consumidores que assina as mensagens de assinatura no lado do servidor.
Para visualizar o ID do grupo de consumidores: faça login no console do IoT Platform e clique em no cartão da instância desejada. No painel de navegação à esquerda, escolha . O ID aparece na aba Consumer Groups.
IOT_INSTANCE_ID
ID da instância do IoT Platform na Conta A.
Faça login no console do IoT Platform e visualize o ID da instância na aba Overview.
Se o ID da instância for exibido, defina este parâmetro com o ID da instância.
Se a aba Overview não for exibida ou a instância não tiver ID, deixe este parâmetro vazio no formato
IOT_INSTANCE_ID = "".
HOST
Endpoint usado pelo cliente AMQP para se conectar à instância do IoT Platform na Conta A. Para mais informações, consulte Gerenciar endpoints de instância.
-
Execute o programa
AmqpStsTokenClient.java.-
Se a saída for semelhante ao exemplo abaixo, o cliente AMQP estará conectado ao IoT Platform e pronto para receber mensagens:
topic = /***********/******/thing/event/property/post, message = 2**************7, content = {"temperature":29,"humidity":29,"time":1617357297270}Parâmetro
Descrição
topic
Tópico usado para enviar propriedades do dispositivo.
messageId
ID da mensagem.
content
Conteúdo da mensagem.
-
Se ocorrer um erro no código ou no ambiente de rede, o cliente AMQP não conseguirá se conectar ao IoT Platform.
Verifique o código e as configurações de rede no log de erros. Corrija o problema e execute o código novamente.
-
Referências
Para mais informações sobre códigos de erro relacionados ao recurso de assinatura no lado do servidor, consulte a seção Códigos de erro relacionados a mensagens do tópico "Logs do IoT Platform".