Aracılığıyla paylaş


IoT hub'ından buluttan cihaza mesajlaşmayı anlama

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:

Buluttan cihaza iletilerin yaşam döngüsü durumu grafiğini gösteren diyagram.

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

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