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:
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.
İ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
İ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.
Uç 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||


|Contenttype||


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.)
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.