IoT hub'larından buluttan cihaza iletiler gönderme

Çözüm arka ucundan bir cihaz uygulamasına tek yollu bildirimler göndermek için IoT hub'ınıza buluttan cihaza iletiler gönderin. Azure IoT Hub tarafından desteklenen diğer buluttan cihaza seçenekleri hakkında daha fazla bilgi için bkz. Buluttan cihaza iletişim kılavuzu.

Not

Bu makalede açıklanan özellikler yalnızca IoT Hub standart katmanında kullanılabilir. Temel ve standart/ücretsiz IoT Hub katmanları hakkında daha fazla bilgi için bkz. doğru IoT Hub katmanını seçme.

Hizmete yönelik uç nokta (/messages/devicebound) aracılığıyla buluttan cihaza iletiler gönderirsiniz. Cihaz daha sonra iletileri cihaza özgü uç nokta olan /devices/{deviceId}/messages/devicebound aracılığıyla alır.

Buluttan cihaza her iletiyi tek bir cihazda hedeflemek için, IoT hub'ın özelliğini /devices/{deviceId}/messages/devicebound olarak ayarlar.

Her cihaz kuyruğu en fazla 50 buluttan cihaza ileti tutar. Aynı cihaza daha fazla ileti göndermeyi denemek bir hatayla sonuç verir.

Buluttan cihaza ileti yaşam döngüsü

En az bir kez ileti teslimi garantisi için IoT hub'ın cihaz başına kuyruklarda buluttan cihaza iletileri kalıcı olur. IoT hub'larının iletileri kuyruktan kaldırması için cihazların tamamlanmasını açıkça kabulleri gerekir. Bu yaklaşım, bağlantı ve cihaz hatalarına karşı güvenliği garantiler.

Yaşam döngüsü durum grafiği aşağıdaki diyagramda görüntülenir:

Buluttan cihaza ileti yaşam döngüsü

IoT hub hizmeti bir cihaza ileti gönderdiği zaman, hizmet ileti durumunu Enqueued olarak ayarlar. Cihaz bir ileti almak isterse, IoT hub'ı durumu Görünmez olarak ayarerek iletiyi kilitler. Bu durum, cihaza gelen diğer iş parçacıklarının diğer iletileri almaya başlamalarına olanak sağlar. Bir cihaz iş parçacığı bir iletinin işlemini tamamladıktan sonra iletiyi tamamlayarak IoT hub'a bilgi verir. Ardından IoT hub'ı durumu Tamamlandı olarak ayarlar.

Bir cihaz şunları da sağlar:

  • İletiyi reddedin; bu, IoT hub' ın bunu Posta İletisi durumuna ayarlamasını neden olur. Message Queuing Telemetri Taşıma (MQTT) Protokolü üzerinden bağlanan cihazlar buluttan cihaza iletileri reddeder.

  • IoT hub'ı iletiyi kuyruğa geri koyarak durum sıraya alındı olarak ayarlanmış olan iletiyi bırakın. MQTT Protokolü üzerinden bağlanan cihazlar buluttan cihaza iletileri bırakamıyor.

Bir iş parçacığı, IoT hub'ı bildirim göndermeden bir iletiyi işleyeyene kadar başarısız olabilir. Bu durumda, bir görünürlük zaman out (veya kilit zaman)'dan sonra iletiler Görünmez durumdan otomatik olarak Enqueued durumuna geri döner. Bu zaman out değerini bir dakikadır ve değiştirilemez.

IoT hub'ı üzerinde maksimum teslim sayısı özelliği, bir iletinin Enqueued ve Görünmez durumları arasında en fazla kaç kez geçilmelerini belirler. Bu geçiş sayısından sonra, IoT hub'ı iletinin durumunu Postasız olarak ayarlar. Benzer şekilde, IoT hub'ı bir iletinin durumunu süresi dolsaktan sonra ileti durumu Olarak Dead lettered olarak ayarlar. Daha fazla bilgi için bkz. Yaşam süresi.

IoT Hub ile buluttan cihaza ileti gönderme makalesinde buluttan cihaza iletileri gönderme ve bunları bir cihazda alma hakkında bilgi ve bilgi yer alır.

İleti kaybı uygulama mantığını etkilemese de cihaz normalde buluttan cihaza iletiyi tamamlar. Bunun bir örneği, cihazın ileti içeriğini yerel olarak kalıcı olarak yürütmesi veya bir işlemi başarıyla yürütmesi olabilir. İleti ayrıca geçici bilgiler de taşıyabilir ve bu bilgiler kaybı uygulamanın işlevselliğini etkilemez. Bazen, uzun süre çalışan görevler için şunları gerçekleştirebilirsiniz:

  • Cihaz görev açıklamasını yerel depolamada kalıcı olduktan sonra buluttan cihaza iletiyi tamamla.

  • Görevin ilerleme durumuna yönelik çeşitli aşamalarda bir veya daha fazla cihazdan buluta iletiyle çözüm arka ucunda bildirim gönderme.

İleti süre sonu (yaşam süresi)

Buluttan cihaza her iletinin süre sonu vardır. Bu süre, aşağıdakilerden biri tarafından ayarlanır:

  • Hizmette ExpiryTimeUtc özelliği
  • IoT hub'ı, IoT hub özelliği olarak belirtilen varsayılan yaşam süresi kullanılarak

Bkz. Buluttan cihaza yapılandırma seçenekleri.

İleti süre sonu avantajından yararlanmanın ve bağlantısı kesilmiş cihazlara ileti göndermekten kaçınmanın yaygın bir yolu, kısa süreli değerleri canlı değerlere ayarlamaktır. Bu yaklaşım, cihaz bağlantı durumunu korumakla aynı sonucu verir, ancak daha verimlidir. İleti onayları isteğiniz olduğunda, IoT hub'ı hangi cihazların olduğunu size bilgi verir:

  • İletiler alabilirsiniz.
  • Çevrimiçi değil veya başarısız oldu.

İleti geri bildirimi

Buluttan cihaza ileti gönderirken hizmet, iletinin son durumuyla ilgili ileti başına geri bildirimin teslimi isteği gönderebilir. Bunu yapmak için buluttan cihaza iletisinde aşağıdaki dört değerden biri için gönderilen iothub-ack uygulama özelliğini ayarlarsınız:

Ack özellik değeri Davranış
yok IoT hub'ı bir geri bildirim iletisi (varsayılan davranış) oluşturmaz.
pozitif Buluttan cihaza ileti Tamamlandı durumuna ulaşırsa IoT hub'ı bir geri bildirim iletisi üretir.
negatif Buluttan cihaza ileti Dead lettered durumuna ulaşırsa IoT hub'ı bir geri bildirim iletisi üretir.
Tam IoT hub'ı her iki durumda da bir geri bildirim iletisi üretir.

Ack değeri dolu ise ve bir geri bildirim iletisi almadıysanız, geri bildirim iletinin süresi doldu demektir. Hizmet, özgün iletiye ne olduğunu bilmiyor. Uygulamada bir hizmet, süresi dolmadan önce geri bildirimi işleyene kadar çalışa olduğundan emin olması gerekir. En uzun sona erme süresi iki gündür ve bir hata oluştuğunda hizmetin yeniden çalıştırıla dolması için zaman bırakır.

Noktalar'da açıklanmıştır;IoT hub'ı hizmete yönelik uç nokta (/messages/servicebound/feedback) aracılığıyla ileti olarak geri bildirim sağlar. Geri bildirim alma semantiği, buluttan cihaza iletilerde olduğu gibi olur. Mümkün olduğunda, ileti geri bildirimi aşağıdaki biçimde tek bir iletide toplu olarak gruplandı:

Özellik Açıklama
EnqueuedTime Geri bildirim iletisi hub tarafından ne zaman alınmıştır?
UserId {iot hub name}
Contenttype application/vnd.microsoft.iothub.feedback.json

Sistem, toplu iş 64 iletiye ulaştığında veya son göndermeden itibaren 15 saniye içinde (hangisi önce gelirse) geri bildirimi gönderir.

Gövde, her biri aşağıdaki özelliklere sahip olan JSON serileştirilmiş bir kayıt dizisidir:

Özellik Açıklama
enqueuedTimeUtc İletinin sonucunun ne zaman olduğunu belirten bir zaman damgası (örneğin, hub geri bildirim iletisi aldı veya özgün iletinin süresi doldu)
originalMessageId Bu geri bildirim bilgisinin ilişkili olduğu buluttan cihaza iletinin MessageId'i
statusCode IoT hub'ı tarafından oluşturulan geri bildirim iletisinde kullanılan gerekli bir dize:
Başarılı
Süresi Doldu
DeliveryCountExceeded
Reddedildi
Tasfiye
açıklama StatusCode için dize değerleri
deviceId Bu geri bildirim parçasının ilişkili olduğu buluttan cihaza iletinin hedef cihazın DeviceId'i
deviceGenerationId Bu geri bildirim parçasının ilişkili olduğu buluttan cihaza iletinin hedef cihazın DeviceGenerationId

Buluttan cihaza iletinin geri bildirimiyle özgün ileti arasında ilişki olması için hizmetin bir MessageId belirtmesi gerekir.

Geri bildirim iletisinin gövdesi aşağıdaki kodda gösterilmiştir:

[
  {
    "originalMessageId": "0987654321",
    "enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
    "statusCode": "Success",
    "description": "Success",
    "deviceId": "123",
    "deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
  },
  {
    ...
  },
  ...
]

Silinen cihazlar için bekleyen geri bildirimler

Bir cihaz silindiğinde, bekleyen geri bildirimler de silinir. Cihaz geri bildirimi toplu olarak gönderilir. Bir cihaz, dar pencerede (genellikle 1 saniyeden daha az), cihazın ileti alındığını doğruladığı ve bir sonraki geri bildirim toplu işi hazırlandığında, geri bildirim oluşmaz.

Cihazınızı silmeden önce bekleyen geri bildirimin gelmesi için bir süre bekledikten sonra bu davranışı ele alabilirsiniz. Bir cihaz silindikten sonra ilgili ileti geri bildirimi kaybedilmelidir.

Buluttan cihaza yapılandırma seçenekleri

Her IoT Hub 'ı, buluttan cihaza mesajlaşma için aşağıdaki yapılandırma seçeneklerini sunar:

Özellik Açıklama Aralık ve varsayılan
defaultTtlAsIso8601 Buluttan cihaza iletiler için varsayılan TTL Aralığı 2 güne kadar ISO_8601 (en az 1 dakika); Varsayılan: 1 saat
maxDeliveryCount Buluttan cihaza cihaz başına kuyruklar için en fazla teslimat sayısı 1-100; Varsayılan: 10
geri bildirim. ttlAsIso8601 Hizmet ile bağlantılı geri bildirim iletileri için bekletme Aralığı 2 güne kadar ISO_8601 (en az 1 dakika); Varsayılan: 1 saat
geri bildirim. maxDeliveryCount Geri bildirim kuyruğu için en fazla teslimat sayısı 1-100; Varsayılan: 10
geri bildirim. lockDurationAsIso8601 Geri bildirim kuyruğu için kilit süresi 5 ile 300 saniyeye ISO_8601 aralığı (en az 5 saniye); Varsayılan: 60 saniye.

Yapılandırma seçeneklerini aşağıdaki yollarla ayarlayabilirsiniz:

  • Azure Portal: IoT Hub 'ınızdaki hub ayarları altında yerleşik uç noktalar ' ı seçin ve buluta cihaz mesajlaşma 'ya gidin. ( Geri bildirimi ayarlanıyor. maxDeliveryCount ve feedback. lockDurationAsIso8601 özellikleri şu anda Azure Portal desteklenmemektedir.)

Portalda, buluttan cihaza mesajlaşma için yapılandırma seçeneklerini ayarlama

  • Azure CLI: az IoT Hub Update komutunu kullanın:

    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.defaultTtlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.ttlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.lockDurationAsIso8601=PT0H1M0S
    

Sonraki adımlar

Buluttan cihaza iletileri almak için kullanabileceğiniz SDK 'lar hakkında daha fazla bilgi için bkz. Azure IoT SDK 'ları.

Buluttan cihaza iletileri almayı denemek için, buluttan cihaza gönderim Öğreticisi ' ne bakın.