Tüm Ürünler
Search
Belge Merkezi

IoT Platform:İletişim için özel konuları kullanma

Son Güncelleme:Oct 03, 2026

Cihazların MQTT yayımla/abone ol ve AMQP sunucu tarafı aboneliği aracılığıyla IoT Platform ile iş sunucuları arasında mesaj alışverişi yapmak için özel konuları nasıl kullandığını öğrenin. Konular; sistem konuları, TSL model konuları ve özel konular olarak sınıflandırılır. Özel konular konsolda tanımlanmalıdır.

Arka plan bilgileri

Bu örnekte elektronik bir termometre, özel bir konuya abone olarak talimatlar alır ve başka bir konuya mesaj yayımlayarak sıcaklık verilerini bildirir. IoT Platform, verileri AMQP sunucu tarafı aboneliği aracılığıyla bir kullanıcı sunucusuna iletir. Sunucu, termometrenin hassasiyetini uzaktan yapılandırmak için Pub işlemi çağrısı yapar.

Custom topic communication

Geliştirme ortamı hazırlama

Bu örnekte Java SDK kullanılmaktadır. Resmi Java web sitesinden bir Java geliştirme ortamı indirin ve yükleyin.

Gerekli bileşenler:

Ürün ve cihaz oluşturma

  1. IoT Platform konsolu üzerinde oturum açın.

  2. Overview sayfasında yönetmek istediğiniz örneği bulun ve örnek kimliğine veya örnek adına tıklayın.

  3. Sol gezinme bölmesinde Devices > Products seçeneğini belirleyin.

  4. Bir termometre ürünü oluşturmak ve Productkey değerini (örneğin a1uzcH0****) almak için Create Product seçeneğine tıklayın.

  5. Ürün oluşturulduktan sonra ürünün yanındaki View seçeneğine tıklayın.

  6. Product Details sayfasında Topic Categories sekmesine tıklayın ve ardından özel bir konu kategorisi eklemek için Custom Topic seçeneğine tıklayın.

    İletişim için özel konuları kullanma.

    Bu örnekte aşağıdaki konu kategorileri gereklidir:

    • Cihazın mesaj yayımlayacağı konu: /a1uzcH0****/${deviceName}/user/devmsg (Yayımla izniyle).

    • Cihazın mesajlara abone olacağı konu: /a1uzcH0****/${deviceName}/user/cloudmsg (Abone Ol izniyle).

  7. Server-side Subscription sekmesine tıklayın ve ardından AMQP sunucu tarafı aboneliğini yapılandırmak için Create Subscription seçeneğine tıklayın. Device Upstream Notification mesajlarını Default Consumer Group grubuna abone edin.

    Device Upstream Notification özel konu ve TSL model mesajlarını içerir. AMQP sunucu tarafı aboneliğini yapılandırma.

  8. Sol gezinme bölmesinde Devices > Devices seçeneğini belirleyin. Ardından oluşturduğunuz termometre ürününe device1 adlı bir cihaz ekleyin. ProductKey, DeviceName ve DeviceSecret dahil olmak üzere cihaz sertifika bilgilerini alın.

Cihazın sunucuya mesaj göndermesini yapılandırma

Aşağıdaki şekilde cihazın sunucuya nasıl mesaj gönderdiği gösterilmektedir.

Custom topic communication

Sunucuyu ve cihazı aşağıdaki gibi yapılandırın:

  • AMQP istemcinizi IoT Platform'a bağlayın ve cihaz mesajlarını dinlemek üzere yapılandırın. Java SDK kullanarak AMQP istemcisini IoT Platform'a bağlama.

    Önemli

    AMQP istemcisinin tüketici grubu, cihazla aynı IoT Platform örneğinde olmalıdır.

  • Cihazı IoT Platform'a bağlamak ve cihazın mesaj göndermesini sağlamak için cihaz SDK'sını yapılandırın.

    • Cihazın kimliğini doğrulamak için parametreleri yapılandırın.

      final String productKey = "a1uzcH0****";
      final String deviceName = "device1";
      final String deviceSecret = "uwMTmVAMnxB****";
      final String region = "cn-shanghai";
      final String iotInstanceId = "iot-2w****";

      Aşağıdaki parametreleri yapılandırın:

      Parametre

      Örnek

      Açıklama

      productKey

      a1uzcH0****

      Cihaz sertifika bilgileri. Bu bilgilere IoT Platform konsolundaki Device Details sayfasından ulaşabilirsiniz.Cihaz ayrıntılarını görüntüleme.

      deviceName

      device1

      deviceSecret

      uwMTmVAMnxB****

      region

      cn-shanghai

      IoT Platform örneğinizin bölge kimliği. Bölgeler ve alanlar.

      iotInstanceId

      iot-2w****

      Cihazın ait olduğu örneğin kimliği.

      Örnek kimliğini IoT Platform konsolundaki Overview sayfasında görüntüleyebilirsiniz.

      • Örnek kimliği görüntüleniyorsa bu parametreyi belirtmeniz gerekir.

      • Örneğiniz için bir Overview veya kimlik oluşturulmamışsa parametre için boş bir dize (iotInstanceId = "") belirtin.

    • MQTT, cihaz ve TSL model parametreleriyle bağlantıyı başlatın.

      LinkKitInitParams params = new LinkKitInitParams();
      // Configure the MQTT connection parameters. Link SDK uses the MQTT protocol.
      IoTMqttClientConfig config = new IoTMqttClientConfig();
      config.productKey = productKey;
      config.deviceName = deviceName;
      config.deviceSecret = deviceSecret;
      config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";
      // Configure the device parameters.
      DeviceInfo deviceInfo = new DeviceInfo();
      deviceInfo.productKey = productKey;
      deviceInfo.deviceName = deviceName;
      deviceInfo.deviceSecret = deviceSecret;
      // Specify the initial status of the device.
      Map<String, ValueWrapper> propertyValues = new HashMap<String, ValueWrapper>();
      
      params.mqttClientConfig = config;
      params.deviceInfo = deviceInfo;
      params.propertyValues = propertyValues;

      Aşağıdaki parametreleri değiştirin:

      Parametre

      Örnek

      Açıklama

      config.channelHost

      config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";

      MQTT bağlantıları için alan adı.

      • Eski genel örnek: config.channelHost = productKey + ".iot-as-mqtt." + region + ".aliyuncs.com:1883";.

      • Yeni genel örnek ve Enterprise Edition örneği: config.channelHost = iotInstanceId + ".mqtt.iothub.aliyuncs.com:1883";.

    • Bağlantıyı başlatın.

      //Connect and configure the callback function that is invoked after the connection is established.
      LinkKit.getInstance().init(params, new ILinkKitConnectListener() {
           @Override
           public void onError(AError aError) {
               System.out.println("Init error:" + aError);
           }
      
           // Implement the callback function.
           @Override
           public void onInitDone(InitResult initResult) {
               System.out.println("Init done:" + initResult);
           }
       });
    • Cihazdan bir mesaj gönderin.

      Cihaz bağlandıktan sonra onInitDone işlevini değiştirerek özel konuya bir mesaj yayımlayın:

      @Override
       public void onInitDone(InitResult initResult) {
           // Specify the topic to which the message is published and the message content.
           MqttPublishRequest request = new MqttPublishRequest();
           request.topic = "/" + productKey + "/" + deviceName + "/user/devmsg";
           request.qos = 0;
           request.payloadObj = "{\"temperature\":35.0, \"time\":\"sometime\"}";
           // Publish the message and configure the callback functions that are used after the message is published.
           LinkKit.getInstance().publish(request, new IConnectSendListener() {
               @Override
               public void onResponse(ARequest aRequest, AResponse aResponse) {
                   System.out.println("onResponse:" + aResponse.getData());
               }
      
               @Override
               public void onFailure(ARequest aRequest, AError aError) {
                   System.out.println("onFailure:" + aError.getCode() + aError.getMsg());
               }
           });
       }

      Aşağıdaki parametreleri yapılandırın:


      Parametre


      Örnek


      Açıklama


      request.topic


      "/" + productKey + "/" + deviceName + "/user/devmsg"


      Cihazın Yayımla iznine sahip olduğu özel konu.


      request.payloadObj


      "{\"temperature\":35.0, \"time\":\"sometime\"}"


      Mesajın içeriği.

      Sunucu aşağıdaki mesajı alır:

      Message
      {payload={"temperature":35.0, "time":"sometime"},
      topic='/a1uzcH0****/device1/user/devmsg',
      messageId='1131755639450642944',
      qos=0,
      generateTime=1558666546105}

Sunucunun cihaza mesaj göndermesini yapılandırma

Aşağıdaki şekilde sunucunun cihaza nasıl mesaj gönderdiği gösterilmektedir.

Custom topic communication

  • Cihaz SDK'sını özel bir konuya abone olacak şekilde yapılandırın.

    Cihaz kimlik doğrulaması ve bağlantı kurulumu için Cihazın sunucuya mesaj göndermesini yapılandırma bölümündeki kodu yeniden kullanın.

    Cihazı özel konuya abone olacak şekilde yapılandırın:

    Aşağıdaki kodu kullanarak bir konuya abone olun:

    // Implement the callback function.
    @Override
    public void onInitDone(InitResult initResult) {
        // Specify the topic to which the device subscribes.
        MqttSubscribeRequest request = new MqttSubscribeRequest();
        request.topic = "/" + productKey + "/" + deviceName + "/user/cloudmsg";
        request.isSubscribe = true;
        // Send a subscription request and configure the callback functions that are invoked after the subscription succeeds or fails.
        LinkKit.getInstance().subscribe(request, new IConnectSubscribeListener() {
            @Override
            public void onSuccess() {
                System.out.println("");
            }
    
            @Override
            public void onFailure(AError aError) {
    
            }
        });
    
        // Configure a listener for downstream messages.
        IConnectNotifyListener notifyListener = new IConnectNotifyListener() {
            // Configure the callback function that is used after the downstream messages are received.
            @Override
            public void onNotify(String connectId, String topic, AMessage aMessage) {
                System.out.println(
                    "received message from " + topic + ":" + new String((byte[])aMessage.getData()));
            }
    
            @Override
            public boolean shouldHandle(String s, String s1) {
                return false;
            }
    
            @Override
            public void onConnectStateChange(String s, ConnectState connectState) {
    
            }
        };
        LinkKit.getInstance().registerOnNotifyListener(notifyListener);
    }

    request.topic değerini Abone Ol iznine sahip özel bir konu olarak ayarlayın.

  • Cihaza mesaj yayımlamak için cloud SDK'yı kullanarak Pub işlemi çağrısı yapın. Pub. Java SDK kullanma.

    • Cihazın kimliğini doğrulamak için parametreleri yapılandırın.

       String regionId = "cn-shanghai";
       String accessKey = "LTAI****";
       String accessSecret = "********";
       final String productKey = "a1uzcH0****";
       final String deviceName = "device1";
       final String iotInstanceId = "iot-2w****";

      Aşağıdaki parametreleri değiştirin:

      Parametre

      Örnek

      Açıklama

      accessKey

      LTAI****

      Alibaba Cloud hesabınızın AccessKey ID ve AccessKey Secret değerleri.

      IoT Platform konsolunda oturum açın, profil resminin üzerine gelin ve AccessKey ID ile AccessKey Secret değerlerini almak için AccessKey Management seçeneğine tıklayın.

      Not

      Bir RAM kullanıcısı kullanıyorsanız RAM kullanıcısına AliyunIOTFullAccess izin ilkesini eklemeniz gerekir. Bu ilke, RAM kullanıcısının IoT Platform kaynaklarını yönetmesine olanak tanır. AliyunIOTFullAccess izin ilkesini RAM kullanıcısına eklemezseniz IoT Platform bağlantısı başarısız olur. Bir RAM kullanıcısına izin verme hakkında daha fazla bilgi için bkz. RAM kullanıcısı erişimi.

      accessSecret

      ****

      productKey

      a1uzcH0****

      Cihaz sertifika bilgileri. Bu bilgilere IoT Platform konsolundaki Device Details sayfasından ulaşabilirsiniz.Cihaz ayrıntılarını görüntüleme.

      deviceName

      device1

      region

      cn-shanghai

      IoT Platform örneğinizin bölge kimliği. Bölgeler ve alanlar.

      iotInstanceId

      iot-2w****

      Cihazın ait olduğu örneğin kimliği.

      Örnek kimliğini IoT Platform konsolundaki Overview sayfasında görüntüleyebilirsiniz.

      • Örnek kimliği görüntüleniyorsa bu parametreyi belirtmeniz gerekir.

      • Örneğiniz için bir Overview veya kimlik oluşturulmamışsa parametre için boş bir dize (iotInstanceId = "") belirtin.

    • Bağlantı parametrelerini yapılandırın.

      //Configure the client parameters.
      DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKey, accessSecret);
      IAcsClient client = new DefaultAcsClient(profile);
    • Mesaj yayımlama parametrelerini yapılandırın.

      PubRequest request = new PubRequest();
      request.setIotInstanceId(iotInstanceId);
      request.setQos(0);
      // Specify the topic to which the message is published.
      request.setTopicFullName("/" + productKey + "/" + deviceName + "/user/cloudmsg");
      request.setProductKey(productKey);
      // Configure the MessageContent parameter. The message content must be encoded in Base64. Otherwise, the message content is displayed as garbled characters.
      request.setMessageContent(Base64.encode("{\"accuracy\":0.001,\"time\":now}"));

      Parametreleri gereksinimlerinize göre yapılandırın. Pub.

    • Mesajı yayımlayın.

      try {
           PubResponse response = client.getAcsResponse(request);
           System.out.println("pub success?:" + response.getSuccess());
       } catch (Exception e) {
           System.out.println(e);
       }

      Cihaz şunu alır:

      msg = [{"accuracy":0.001,"time":now}]

Ek: Örnek kod

Önemli

Parametreleri iş gereksinimlerinize uygun şekilde değiştirin.

Cloud SDK ve cihaz SDK örnek kodları için Pub/Sub demosunu indirin.

Bir AMQP istemcisini IoT Platform'a aşağıdaki SDK kılavuzlarını kullanarak bağlayın: