Aracılığıyla paylaş


MQTT protokolunu kullanarak DPS ile iletişim kurma

Azure IoT Cihaz Sağlama Hizmeti (DPS), cihazların şu kullanarak DPS cihaz uç noktasıyla iletişim kurmasını sağlar:

DPS tam özellikli bir MQTT aracısı değildir ve MQTT v3.1.1 standardında belirtilen tüm davranışları desteklemez. Bu makalede, cihazların DPS ile iletişim kurmak için desteklenen MQTT davranışlarını nasıl kullanabileceği açıklanmaktadır.

DPS ile tüm cihaz iletişimleri TLS/SSL kullanılarak güvenli hale getirilmelidir. Bu nedenle DPS, 1883 numaralı bağlantı noktası üzerinden güvenli olmayan bağlantıları desteklemez.

Not

DPS şu anda MQTT protokolü üzerinden TPM kanıtlama mekanizması kullanan cihazları desteklememektedir.

DPS'ye bağlanma

Bir cihaz, aşağıdaki seçeneklerden herhangi birini kullanarak bir DPS örneğine bağlanmak için MQTT protokolunu kullanabilir.

  • Azure IoT Sağlama SDK'larındaki kitaplıklar.
  • MQTT protokolü doğrudan.

MQTT protokolunu doğrudan kullanma (cihaz olarak)

Cihaz SDK'larını kullanamıyorsa, 8883 numaralı bağlantı noktasındaki MQTT protokolunu kullanarak genel cihaz uç noktalarına bağlanmaya devam edebilir. CONNECT paketinde cihaz aşağıdaki değerleri kullanmalıdır:

  • ClientId alanı için registrationId değerini kullanın.

  • Kullanıcı adı alanı için kullanın{idScope}/registrations/{registration_id}/api-version=2019-03-31; burada {idScope}DPS'nin kimlik kapsamı ve {registration_id} cihazınızın Kayıt Kimliği'dir.

    Not

    X.509 sertifika kimlik doğrulaması kullanıyorsanız, kayıt kimliği cihaz yaprak (son varlık) sertifikanızın konu ortak adı (CN) tarafından sağlanır. {registration_id} kullanıcı adı alanında ortak adla eşleşmelidir.

  • Parola alanı için sas belirteci kullanın. SAS belirtecinin biçimi hem HTTPS hem de AMQP protokolleriyle aynıdır:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration kaynakURI'sinin biçiminde {idScope}/registrations/{registration_id}olması gerekir. İlke adı (skn) olarak registrationayarlanmalıdır.

    Not

    X.509 sertifika kimlik doğrulaması kullanıyorsanız SAS belirteci parolaları gerekli değildir.

    SAS belirteçleri oluşturma hakkında daha fazla bilgi için DPS'ye erişimi denetleme'nin güvenlik belirteçleri bölümüne bakın.

Aşağıdaki listede DPS uygulamasına özgü davranışlar yer alır:

  • DPS kalıcı oturumları desteklemez. CleanSession bayrağının değerinden bağımsız olarak her oturumu kalıcı olmayan olarak değerlendirir. CleanSession ayarını true olarak ayarlamanızı öneririz.

  • Bir cihaz uygulaması QoS 2 içeren bir konuya abone olduğunda, DPS SUBACK paketinde en fazla QoS düzey 1 verir. Bundan sonra DPS, QoS 1 kullanarak cihaza ileti teslim eder.

TLS/SSL yapılandırması

MQTT protokolünüzü doğrudan kullanmak için istemcinizin TLS 1.2 üzerinden bağlanması gerekir . Bu adımı atlama girişimleri bağlantı hatalarıyla başarısız olur.

Cihaz kaydetme

Bir cihazı DPS aracılığıyla kaydetmek için bir cihazın Konu Filtresi olarak kullanarak $dps/registrations/res/# abone olması gerekir. Konu Filtresi'ndeki çok düzeyli joker karakter # yalnızca cihazın konu adında daha fazla özellik almasına izin vermek için kullanılır. DPS, alt konuları filtrelemek için veya ? joker karakter kullanımına # izin vermez. DPS genel amaçlı bir pub-sub mesajlaşma aracısı olmadığından, yalnızca belgelenmiş konu adlarını ve konu filtrelerini destekler.

Cihaz, Konu Adı olarak kullanarak $dps/registrations/PUT/iotdps-register/?$rid={request_id} DPS'ye bir kayıt iletisi yayımlamalıdır. Yük, JSON biçiminde Cihaz Kaydı nesnesini içermelidir. Başarılı bir senaryoda, cihaz konu adında bir yanıt $dps/registrations/res/202/?$rid={request_id}&retry-after=x alır; burada x saniye olarak yeniden deneme sonrası değeridir.

Kayıt işlemi durumu yoklaması

Cihaz kayıt işleminin sonucunu almak için cihazın hizmeti düzenli aralıklarla yoklaması gerekir. Cihazın konuya zaten abone $dps/registrations/res/# olduğunu varsayarsak, konu adına bir alma işlemi durum iletisi $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} yayımlayabilir. Bu iletideki işlem kimliği, önceki adımda RegistrationOperationStatus yanıt iletisinde alınan değer olmalıdır. Başarılı bir durumda hizmet konu başlığına $dps/registrations/res/200/?$rid={request_id} yanıt verir. Yanıtın yükü RegistrationOperationStatus nesnesini içerir. Yanıt kodu yeniden deneme sonrasındaki süreye eşit bir gecikmeden sonra 202 olduğunda cihaz hizmeti yoklamayı sürdürmelidir. Hizmet 200 durum kodu döndürürse cihaz kayıt işlemi başarılı olur.

WebSocket üzerinden bağlanma

WebSocket üzerinden bağlanırken altprotokolü olarak mqttbelirtin. RFC 6455'i izleyin.

Sonraki adımlar

MQTT protokolü hakkında daha fazla bilgi edinmek için MQTT belgelerine bakın.

Örnek MQTT koduna göz atmak için bkz . MQTT uygulama örnekleri.

DPS'nin özelliklerini daha fazla keşfetmek için bkz: