Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Buluttan cihaza iletiler, çözüm arka ucunuzdan bir cihaz uygulamasına tek yönlü bildirimlerdir. 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.
Uyarı
Bu makalede açıklanan özellikler yalnızca IoT Hub'ın standart katmanında kullanılabilir. Temel ve standart/ücretsiz IoT Hub katmanları hakkında daha fazla bilgi için bkz. çözüm için doğru IoT Hub katmanını ve boyutunu seçme.
Hizmete yönelik uç nokta ( /messages/devicebound) aracılığıyla buluttan cihaza iletiler gönderirsiniz. Ardından bir cihaz, cihaza özgü uç nokta olan /devices/{deviceId}/messages/devicebound üzerinden iletileri alır.
Buluttan cihaza her iletiyi tek bir cihazda hedeflemek için IoT hub'ınız özelliğini /devices/{deviceId}/messages/devicebound olarak ayarlar.
Her cihaz kuyruğunda en fazla 50 buluttan cihaza ileti bulunur. Aynı cihaza daha fazla ileti göndermeye çalıştığınızda bir hata oluşur.
Bu makalede, buluttan cihaza iletilerle ilgili kavramlar ve işlemler ele alınmaktadır. Buluttan cihaza iletileri işleyen uygulamalar geliştirme konusunda rehberlik için bkz . Buluttan cihaza iletileri gönderme ve alma.
Buluttan cihaza ileti yaşam döngüsü
En az bir kez ileti teslimini garanti etmek için IoT hub'ınız cihaz başına kuyruklarda buluttan cihaza iletileri kalıcı hale getirir. IoT hub'ı iletiyi kuyruktan kaldırmadan önce cihazların bir iletinin tamamlanmasını açıkça kabul etmesi gerekir. Bu yaklaşım, bağlantı ve cihaz hatalarına karşı dayanıklılığı garanti eder.
Yaşam döngüsü durum grafiği aşağıdaki diyagramda görüntülenir:
IoT hub hizmeti bir cihaza ileti gönderdiğinde, hizmet ileti durumunu Enqueued olarak ayarlar. Bir cihaz iş parçacığı ileti almaya hazır olduğunda IoT hub'ı durumu Görünmez olarak ayarlayarak iletiyi kilitler. Bu durum, cihazdaki diğer iş parçacıklarının diğer iletileri almaya başlamasını sağlar. Bir cihaz iş parçacığı iletinin işlenmesini tamamladığında, iletiyi tamamlayarak IoT hub'ına bildirimde bulunur. Ardından IoT hub'ı durumu Tamamlandı olarak ayarlar.
Bir cihaz şunları da yapabilir:
IoT hub'ının mesajı "Yanıtsız mektup" durumuna ayarlamasına neden olan iletiyi reddedin. Bu iletileri kurtarmak için bir ölü harf kuyruğu yok. MQTT protokolü üzerinden bağlanan cihazlar, buluttan cihaza gönderilen iletileri reddedemez.
İletiyi Bırakın, mesajın durumunu Sıraya Alındı olarak ayarlayarak mesajı IoT hub'ının yeniden kuyruğa koymasına sebep olur. MQTT protokolü üzerinden bağlanan cihazlar buluttan cihaza iletileri bırakamaz.
Bir iş parçacığı, IoT hub'ına bildirmeden bir iletiyi işleyemeyebilir. Bu durumda, iletiler görünürlük zaman aşımından (veya kilit zaman aşımından) sonra otomatik olarak Görünmez durumundan Sıralı duruma geri döner. Bu zaman aşımının uzunluğu bir dakikadır ve değiştirilemez.
IoT hub'ının maksimum teslim sayısı özelliği, bir iletinin Enqueued ve Invisible durumları arasında en fazla kaç kez geçiş yapabileceğinizi belirler. Bu sayıda geçiş sonrasında IoT hub, iletinin durumunu Ölü Mektup olarak ayarlar. Benzer şekilde, IoT hub, bir mesajın durumunu son kullanma tarihinden sonra Ölü Mektup olarak ayarlar.
İleti kaybı uygulama mantığını etkilemediğinde bir cihaz normalde buluttan cihaza iletisini tamamlar. Bu tamamlamaya örnek olarak, cihaz ileti içeriğini yerel olarak sakladığında veya bir işlemi başarıyla gerçekleştirdiğinde verilebilir. İleti, kayıpları uygulamanın işlevselliğini etkilemeyen geçici bilgiler de taşıyabilir. Bazen, uzun süre çalışan görevler için şunları yapabilirsiniz:
Cihaz görev açıklamasını yerel depolamada depoladıktan sonra, buluttan cihaza mesaj işlemini tamamlayın.
Görevin ilerlemesinin çeşitli aşamalarında bir veya daha fazla cihazdan buluta iletiyle çözüm arka ucuna bildirimde bulunun.
İleti süre sonu (yaşam süresi)
Buluttan cihaza her iletinin bir son kullanma süresi vardır. Aşağıdaki seçeneklerden biri sona erme süresini ayarlar:
- Hizmetteki ExpiryTimeUtc özelliği
- IoT hub, IoT hub özelliği olarak belirtilen varsayılan yaşam süresini kullanarak
İleti süre sonu hakkında daha fazla bilgi için bkz . Buluttan cihaza yapılandırma seçenekleri.
İleti süresinin sona ermesinden faydalanmanın ve bağlantısı kesilmiş cihazlara ileti gönderilmesini önlemenin yaygın yollarından biri, yaşama süresi değerlerini kısa tutmaktır. Bu yaklaşım, cihaz bağlantı durumunu korumakla aynı sonucu elde eder, ancak daha verimlidir. İleti bildirimleri istediğinizde IoT hub'ı hangi cihazları size bildirir:
- Mesajları alabiliyor.
- Çevrimiçi değil veya başarısız oldu.
Mesaj geri bildirimi
Buluttan cihaza bir ileti gönderdiğinizde, hizmet bu iletinin son durumuyla ilgili ileti başına geri bildirimin teslimini isteyebilir. Buluttan cihaza gönderilen iletide iothub-ack uygulama özelliğini aşağıdaki dört değerden birine ayarlayarak ileti geri bildirimini yapılandırabilirsiniz:
| Ack özellik değeri | Davranış |
|---|---|
| yok | Varsayılan. IoT hub geri bildirim iletisi üretmez. |
| pozitif | Buluttan cihaza ileti Tamamlandı durumuna ulaşırsa IoT hub'ı bir geri bildirim iletisi oluşturur. |
| negatif | Buluttan cihaza ileti Ölü Harf durumuna ulaşırsa, IoT hub'ı bir geri bildirim iletisi oluşturur. |
| dolu | IoT hub'ı her iki durumda da bir geri bildirim iletisi oluşturur. |
Ack özellik değeri dolu olarak ayarlandıysa ve geri bildirim iletisi almıyorsanız, geri bildirim iletisinin süresi dolmuş demektir. Hizmet, özgün iletiye ne olduğunu bilemez. Uygulamada bir hizmet, süresi dolmadan önce geri bildirimi işleyebilmesini sağlamalıdır. En fazla süre sonu süresi iki gündür ve bu da bir hata oluştuğunda hizmetin yeniden çalıştırılması için zaman bırakır.
IoT Hub uç noktalarında açıklandığı gibi, IoT hub'ı hizmete yönelik bir uç nokta (/messages/servicebound/feedback) üzerinden ileti olarak geri bildirim sunar. Geri bildirim alma semantiği, buluttan cihaza iletilerle aynıdır. Mümkün olduğunda, ileti geri bildirimi aşağıdaki biçimde tek bir iletide toplu olarak oluşturulur:
| Mülk | Açıklama |
|---|---|
| EnqueuedTime | Hub'ın geri bildirim iletisini ne zaman aldığını gösteren zaman damgası. |
| Kullanıcı Kimliği | {iot hub name} |
| İçerik Türü | application/vnd.microsoft.iothub.feedback.json |
Sistem, toplu iş 64 iletiye ulaştığında veya en son gönderilen iletiden 15 saniye içinde (hangisi önce gelirse) geri bildirim gönderir.
Gövde, her biri aşağıdaki özelliklere sahip JSON serileştirilmiş bir kayıt dizisidir:
| Mülk | Açıklama |
|---|---|
| enqueuedTimeUtc | İletinin sonucunun ne zaman gerçekleştiğini gösteren zaman damgası. Örneğin, hub'ın geri bildirim iletisini aldığı veya özgün iletinin süresinin ne zaman dolduğunu gösteren bir zaman damgası. |
| orijinalMesajId | Buluttan cihaza mesajın, bu geri bildirim bilgileriyle ilişkili olan, MessageId'si. |
| durum kodu | Geri bildirim iletileri oluştururken IoT hub'ı tarafından kullanılan gerekli bir dize: Başarı Süresi Doldu TeslimatSayısıAşıldı Reddedildi Tasfiye |
| açıklama | StatusCode için dize değerleri. |
| cihazId | Bu geri bildirimin ilgili olduğu buluttan cihaza mesajın hedef cihazının DeviceId değeri. |
| cihazNesilKimlik | Buluttan cihaza iletinin hedef cihazına ait DeviceGenerationId, bu geri bildirimin ilgili olduğu parça ile ilişkilidir. |
Buluttan cihaza iletisinin geri bildirimini özgün iletiyle ilişkilendirebilmesi için hizmetin bir MessageId belirtmesi gerekir.
Geri bildirim iletisinin gövdesi aşağıdaki kod örneğinde 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 bildirim
Bir cihaz silindiğinde, bekleyen geri bildirimler de silinir. Cihaz geri bildirimi toplu olarak gönderilir. Genellikle bir saniyeden kısa olan dar bir pencere, bir cihazın iletinin alındığını onaylamasıyla bir sonraki geri bildirim toplu işleminin hazırlanması arasında meydana gelebilir. Bu dar pencerede bir cihaz silinirse geri bildirim gerçekleşmez.
Cihazınızı silmeden önce bekleyen geri bildirimlerin gelmesini bir süre bekleyerek bu davranışı giderebilirsiniz. Cihaz silindikten sonra ilgili ileti geri bildiriminin kaybolduğu varsayılmalıdır.
Buluttan cihaza yapılandırma seçenekleri
Her IoT hub'ı, buluttan cihaza mesajlaşma için aşağıdaki yapılandırma seçeneklerini kullanıma sunar:
| Mülk | Açıklama | Aralık ve varsayılan |
|---|---|---|
| defaultTtlAsIso8601 | Buluttan cihaza iletiler için varsayılan TTL | İki güne kadar ISO_8601 aralık (en az bir dakika); varsayılan: bir saat |
| maksimumTeslimatSayısı | Buluttan cihaza cihaz başına kuyruklar için maksimum teslim sayısı | 1 ile 100; varsayılan: 10 |
| Geri bildirim ttlAsIso8601 | Hizmete bağlı geri bildirim iletilerinin saklanması | İki güne kadar ISO_8601 aralık (en az bir dakika); varsayılan: bir saat |
| feedback.maxTeslimatSayisi | Geri bildirim kuyruğu için en yüksek teslim sayısı | 1 ile 100; varsayılan: 10 |
| feedback.lockDurationAsIso8601 | Geri bildirim kuyruğunun süresini kilitleme | 5 ile 300 saniye (en az beş saniye) arasında ISO_8601 aralığı; varsayılan: 60 saniye. |
Yapılandırma seçeneklerini Azure portalında veya Azure CLI'da ayarlayabilirsiniz:
Azure portalı: IoT hub'ınızdaki Hub ayarları'nın altında Yerleşik uç noktalar'ı seçin ve Buluttan cihaza mesajlaşma'ya gidin. ( feedback.maxDeliveryCount veya feedback.lockDurationAsIso8601 özelliğinin ayarlanması şu anda Azure portalında 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 işlemek için kullanabileceğiniz SDK'lar hakkında bilgi için bkz . Azure IoT Hub SDK'ları.
Buluttan cihaza iletileri işleyen uygulamalar geliştirme konusunda rehberlik için bkz . Buluttan cihaza iletileri gönderme ve alma.