Azure IoT Edge yayımlama ve abone olma (önizleme)
Uygulama hedefi:
IoT Edge 1,2
İleti yayımlamak Azure IoT Edge abone olmak için MQTT aracısı ile birlikte kullanabilirsiniz. Bu makalede, bu aracıya bağlanma, kullanıcı tanımlı konular üzerinden iletiler yayımlama ve iletilere abone olma ve mesajlaşma temel IoT Hub nasıl kullanabileceğiniz gösterir. MQTT IoT Edge aracı, IoT Edge hub'dır. Daha fazla bilgi için bkz. IoT Edge hub' IoT Edge.
Not
IoT Edge MQTT aracısı şu anda genel önizlemededir.
Ön koşullar
Geçerli aboneliği olan bir Azure hesabı
CLI uzantısının yüklü olduğu Azure
azure-iotCLI. Daha fazla bilgi için bkz. Azure CLI için Azure IoT uzantısı yükleme adımları.SKU IoT Hub F1, S1, S2 veya S3 ile ilgili bir örnek.
MQTT aracı özelliği açık ve TLS dışı bağlantıları etkinleştirmek için ana bilgisayarla sınırlı edgeHub bağlantı noktası 1883'ü kullanarak edgeAgent ve edgeHub modülleri sürüm 1.2 veya üzerini içeren bir IoT Edge cihazı dağıtın. 1.2 IoT Edge 1.2'yi bu makalede açıklanan adımları kullanarak bir Azure VM'sinde otomatik olarak dağıtabilirsiniz. MQTT IoT Edge şu anda genel önizlemede olduğu için, MQTT aracıyı etkinleştirmek için edgeHub modülünde aşağıdaki ortam değişkenlerini de true olarak ayarlamanız gerekir:
Name Değer experimentalFeatures__enabledtrueexperimentalFeatures__mqttBrokerEnabledtrueüzerinde açık yetkilendirme ilkesiyle IoT Edge bir dağıtım oluşturmak için ekte bu örnek dağıtım
test_topicbildirimini kullanabilirsiniz:Dağıtım dosyasını çalışma klasörünüze kaydedin
Aşağıdaki Azure CLI komutunu kullanarak IoT Edge bu dağıtımı uygulama. Bu komut hakkında daha fazla bilgi için bkz. Azure CLI Azure IoT Edge modüllerini dağıtma.
az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [deployment file path]
IoT Edge cihaza yüklenmiş mosquitto istemcileri. Bu makalede popüler Mosquitto istemcileri tarafından MOSQUITTO_PUB ve MOSQUITTO_SUB. Bunun yerine diğer MQTT istemcileri kullanılabilir. Mosquitto istemcilerini bir Ubuntu cihazına yüklemek için aşağıdaki komutu çalıştırın:
sudo apt-get update && sudo apt-get install mosquitto-clientsMQTT bağlantı noktalarının (8883 ve 1883) engellenmesine neden olabilir ve merkeziyle çakışmaya neden IoT Edge yükleyin.
Bağlan hub IoT Edge ya
IoT Edge hub'a bağlanma, genel bir MQTT istemcisiyle IoT Hub'a bağlanma makalesinde veya IoT Edge hub'ı makalesi kavramsal açıklamasında açıklanan adımları izler. Bu adımlar:
- İsteğe bağlı olarak, MQTT istemcisi Aktarım Katmanı Güvenliği (TLS) kullanarak IoT Edge hub ile güvenli bir bağlantı oluşturur
- MQTT istemcisi, hub'da kendi IoT Edge doğrular
- IoT Edge hub'ı MQTT istemcisini yetkilendirme ilkesine göre yetkilendir
Güvenli bağlantı (TLS)
Aktarım Katmanı Güvenliği (TLS), istemci ile veri merkezi arasında şifrelenmiş bir iletişim IoT Edge kullanılır.
TLS'yi devre dışı bırakmak için 1883 (MQTT) bağlantı noktasını kullanın ve edgeHub kapsayıcısını 1883 bağlantı noktasına bağlayın.
TLS'yi etkinleştirmek için, bir istemci 8883 (MQTTS) bağlantı noktası üzerinden MQTT aracıya bağlanırsa bir TLS kanalı başlatılır. Aracı, istemcinin doğrulaması gereken sertifika zincirini gönderir. Sertifika zincirini doğrulamak için MQTT aracısını kök sertifikasının istemciye güvenilir bir sertifika olarak yüklenmiş olması gerekir. Kök sertifikaya güvenilmiyorsa, istemci kitaplığı MQTT aracısı tarafından bir sertifika doğrulama hatasıyla reddedilir. İstemciye aracının bu kök sertifikasını yüklemek için izlenebilecek adımlar, saydam ağ geçidi olayıyla aynıdır ve aşağı akış cihazı hazırlama belgelerinde açıklanmıştır.
Kimlik Doğrulaması
MQTT istemcisinin kendi kimliğini doğrulaması için önce MQTT aracısı adına bir bağlantı başlatmak için bir CONNECT paketi göndermesi gerekir. Bu paket üç kimlik doğrulama bilgisi sağlar: client identifier , bir username ve : password
alanı,
client identifiercihaz veya modül adı olarak IoT Hub. Aşağıdaki söz dizimlerini kullanır:Bir cihaz için:
<device_name>Bir modül için:
<device_name>/<module_name>
MQTT aracıya bağlanmak için bir cihazın veya modülün IoT Hub.
Aracı aynı kimlik bilgilerini kullanarak birden çok istemciden gelen bağlantılara izin vermez. İkinci bir istemci aynı kimlik bilgilerini kullanarak bağlanırsa aracı, zaten bağlı olan istemcinin bağlantısını keser.
Alanı, cihaz veya modül adı türetilen ve cihazın ait olduğu
usernameIoTHub adı aşağıdaki söz dizimi kullanılarak kullanılır:Bir cihaz için:
<iot_hub_name>.azure-devices.net/<device_name>/?api-version=2018-06-30Bir modül için:
<iot_hub_name>.azure-devices.net/<device_name>/<module_name>/?api-version=2018-06-30
passwordCONNECT paketinin alanı kimlik doğrulama moduna bağlıdır:- Simetrik anahtar kimlik doğrulaması kullanılırkenalanı bir SAS
passwordbelirtecidir. - X.509 otomatik olarak imzalanan kimlik doğrulaması kullanılırken
passwordalanı mevcut değildir. Bu kimlik doğrulama modunda bir TLS kanalı gereklidir. İstemcinin TLS bağlantısı kurmak için 8883 bağlantı noktasına bağlanması gerekir. TLS el sıkışması sırasında MQTT aracısı bir istemci sertifikası talep ediyor. Bu sertifika, istemcinin kimliğini doğrulamak için kullanılır ve bu nedenle, DAHA sonra CONNECT paketi gönder gerektiğindepasswordalana gerek yoktur. Hem istemci sertifikası hem de parola alanı göndererek hataya neden olur ve bağlantı kapatılır. MQTT kitaplıkları ve TLS istemci kitaplıkları genellikle bağlantı başlatan bir istemci sertifikası göndermek için bir yol sağlar. İstemci kimlik doğrulaması için X509Sertifikası kullanma bölümünde adım adım bir örnek bulabilirsiniz.
- Simetrik anahtar kimlik doğrulaması kullanılırkenalanı bir SAS
IoT Edge tarafından dağıtılan modüller simetrik anahtar kimlik doğrulaması kullanır ve çevrimdışı olduğunda bile program aracılığıyla bir SAS belirteci almak IoT Edge iş yükü API'sini çağırabilirsiniz.
Yetkilendirme
Bir MQTT istemcisinin IoT Edge doğrulandıktan sonra, istemcinin bağlanması için yetkilendirilmiş olması gerekir. Bağlandıktan sonra, belirli konularda yayımlama veya abone olma yetkisine sahip olması gerekir. Bu yetkilendirmeler, IoT Edge hub'ı tarafından yetkilendirme ilkesine göre vetir. Yetkilendirme ilkesi, ikizi aracılığıyla IoT Edge hub'a gönderilen JSON yapısı olarak ifade edilen deyim kümesidir. Yetkilendirme IoT Edge yapılandırmak için bir hub ikizini düzenleyin.
Not
Genel önizleme için yalnızca Azure CLI, MQTT aracısı yetkilendirme ilkelerini içeren dağıtımları destekler. Aşağıdaki Azure portal hub ikizini ve yetkilendirme IoT Edge düzenlemeyi desteklemez.
Her yetkilendirme ilkesi deyimi , veya etkileri identities ve allow deny operations birleşiminden resources oluşur:
identitiesilkenin konusunu açıklama. İstemciler tarafındanusernameCONNECT paketlerinde gönderilen ile eş olmalı ve veya biçiminde<iot_hub_name>.azure-devices.net/<device_name><iot_hub_name>.azure-devices.net/<device_name>/<module_name>olmalıdır.allowveyadenyetkileri, işlemlere izin verile mi yoksa işlemlerin redded mi olduğunu tanımlar.operationsyetkilendirmek için eylemleri tanımlayın.mqtt:connect,mqtt:publishmqtt:subscribeve desteklenen üç eylemdir.resourcesilkenin nesnesini tanımlayın. MQTT joker karakterleriyle tanımlanan bir konu veya konu deseni olabilir.
Aşağıda, "rogue_client" istemcisinin bağlanmasına açıkça izin vermeyen, tüm Azure IoT istemcilerinin bağlanmasına izin veren ve "sensor_1" konusunu yayımlamasına izin veren bir yetkilendirme ilkesi örneği events/alerts verilmiştir.
{
"$edgeHub":{
"properties.desired":{
"schemaVersion":"1.2",
"routes":{
"Route1":"FROM /messages/* INTO $upstream"
},
"storeAndForwardConfiguration":{
"timeToLiveSecs":7200
},
"mqttBroker":{
"authorizations":[
{
"identities":[
"<iot_hub_name>.azure-devices.net/rogue_client"
],
"deny":[
{
"operations":[
"mqtt:connect"
]
}
]
},
{
"identities":[
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:connect"
]
}
]
},
{
"identities":[
"<iot_hub_name>.azure-devices.net/sensor_1"
],
"allow":[
{
"operations":[
"mqtt:publish"
],
"resources":[
"events/alerts"
]
}
]
}
]
}
}
}
}
Yetkilendirme ilkenizi yazarken göz dışı tutmanız gereken birkaç şey:
İkiz
$edgeHubşeması sürüm 1.2 gerektirirVarsayılan olarak tüm işlemler reddedilir.
Yetkilendirme deyimleri, JSON tanımında görünme sırasına göre değerlendirilir. İlk olarak istekle
identitieseşan ilk izin ver veya reddet deyimlerini seçin. İzin verme ve reddetme deyimleri arasındaki çakışmalar durumunda reddetme deyimi kazanır.Yetkilendirme ilkesinde çeşitli değişkenler (örneğin değiştirmeler) kullanılabilir:
{{iot:identity}}, o anda bağlı olan istemcinin kimliğini temsil eder. Örneğin, gibi bir cihaz kimliği<iot_hub_name>.azure-devices.net/myDeviceveya gibi bir modül<iot_hub_name>.azure-devices.net/myEdgeDevice/SampleModulekimliği.{{iot:device_id}}, o anda bağlı olan cihazın kimliğini temsil eder. Örneğin, gibi bir cihaz kimliğimyDeviceveya gibi bir modülün çalıştır olduğu cihazmyEdgeDevicekimliği.{{iot:module_id}}, o anda bağlı olan modülün kimliğini temsil eder. Bu değişken bağlı cihazlar veya gibi bir modül kimliği içinSampleModuleboştur.{{iot:this_device_id}}, yetkilendirme ilkesi çalıştıran IoT Edge cihazın kimliğini temsil eder. Örneğin,myIoTEdgeDevice.
IoT hub'ı konu başlıkları için yetkilendirmeler, kullanıcı tanımlı konulardan biraz farklı şekilde ele alınmalı. Anımsanacak önemli noktalar:
- Azure IoT cihazları veya modüllerinin hub MQTT aracınıza bağlanmak için IoT Edge bir yetkilendirme kuralı gerekir. Varsayılan bir bağlantı yetkilendirme ilkesi aşağıda verilmiştir.
- Azure IoT cihazları veya modülleri, herhangi bir açık yetkilendirme kuralı olmadan kendi IoT Hub konularına varsayılan olarak erişebilir. Ancak, bu durumda üst/alt ilişkilerden oluşan yetkilendirmeler ve bu ilişkilerin ayarlanması gerekir. IoT Edge modüller otomatik olarak IoT Edge cihazlarının alt öğeleri olarak ayarlanır ancak cihazların IoT Edge ağ geçitlerinde açıkça bir alt öğe olarak ayarlanması gerekir.
Bu, tüm Azure IoT cihazlarının veya modüllerinin aracısına bağlanmasını sağlamak için kullanılabilecek varsayılan bir yetkilendirme ilkesidir:
{
"$edgeHub":{
"properties.desired":{
"schemaVersion":"1.2",
"mqttBroker":{
"authorizations":[
{
"identities": [
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:connect"
]
}
]
}
]
}
}
}
}
IoT Edge MQTT aracısına nasıl bağlanacağınızı anladığınıza göre, önce Kullanıcı tanımlı konularda, daha sonra IoT Hub konularında ve son olarak başka bir MQTT aracısına ileti yayımlamak ve abone olmak için nasıl kullanılabileceğinizi görelim.
Kullanıcı tanımlı konularda yayımlayın ve abone olun
Bu makalede, bir konuya abone olan sub_client adlı bir istemciyi ve bir konuya yayımlayan pub_client adlı başka bir istemciyi kullanacaksınız. Simetrik anahtar kimlik doğrulamasını kullanacağız, ancak aynı şekilde x. 509.440 otomatik imzalı kimlik doğrulama veya x. 509.440 CA-imzalı kimlikdoğrulamasıyla yapılabilir.
Yayımcı ve abone istemcileri oluşturma
IoT Hub iki IoT cihazı oluşturun ve parolalarını alın. Terminalinizden Azure CLı kullanarak şunları yapın:
IoT Hub iki IoT cihazı oluşturun:
az iot hub device-identity create --device-id sub_client --hub-name <iot_hub_name> az iot hub device-identity create --device-id pub_client --hub-name <iot_hub_name>Üst öğesini IoT Edge cihazınız olacak şekilde ayarlayın:
az iot hub device-identity parent set --device-id sub_client --hub-name <iot_hub_name> --pd <edge_device_id> az iot hub device-identity parent set --device-id pub_client --hub-name <iot_hub_name> --pd <edge_device_id>SAS belirteci oluşturarak parolalarını alın:
Bir cihaz için:
az iot hub generate-sas-token -n <iot_hub_name> -d <device_name> --key-type primary --du 3600Burada 3600, SAS belirtecinin saniye cinsinden süresi (örneğin, 3600 = 1 saat).
Bir modül için:
az iot hub generate-sas-token -n <iot_hub_name> -d <device_name> -m <module_name> --key-type primary --du 3600Burada 3600, SAS belirtecinin saniye cinsinden süresi (örneğin, 3600 = 1 saat).
Çıktıdan "SAS" anahtarına karşılık gelen değer olan SAS belirtecini kopyalayın. Yukarıdaki Azure CLı komutundan bir örnek çıktı aşağıda verilmiştir:
{ "sas": "SharedAccessSignature sr=example.azure-devices.net%2Fdevices%2Fdevice_1%2Fmodules%2Fmodule_a&sig=H5iMq8ZPJBkH3aBWCs0khoTPdFytHXk8VAxrthqIQS0%3D&se=1596249190" }
Yayımcı ve abone istemcilerini yetkilendirme
Yayımcıyı ve aboneyi yetkilendirmek için, aşağıdaki yetkilendirme ilkesini içeren bir IoT Edge dağıtımında IoT Edge hub ikizi düzenleyin.
Not
Şu anda, MQTT yetkilendirme özelliklerini içeren dağıtımlar yalnızca Azure CLı kullanan IoT Edge cihazlara uygulanabilir.
{
"$edgeHub":{
"properties.desired":{
"schemaVersion":"1.2",
"mqttBroker":{
"authorizations":[
{
"identities": [
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:connect"
]
}
]
},
{
"identities": [
"<iot_hub_name>.azure-devices.net/sub_client"
],
"allow":[
{
"operations":[
"mqtt:subscribe"
],
"resources":[
"test_topic"
]
}
],
},
{
"identities": [
"<iot_hub_name>.azure-devices.net/pub_client"
],
"allow":[
{
"operations":[
"mqtt:publish"
],
"resources":[
"test_topic"
]
}
]
}
]
}
}
}
}
TLS olmadan simetrik anahtarlar kimlik doğrulaması
Abonelik
sub_client mqtt istemcinizi mqtt aracısına Bağlan ve test_topic IoT Edge cihazınızda aşağıdaki komutu çalıştırarak abone olun:
mosquitto_sub \
-t "test_topic" \
-i "sub_client" \
-u "<iot_hub_name>.azure-devices.net/sub_client/?api-version=2018-06-30" \
-P "<sas_token>" \
-h "<edge_device_address>" \
-V mqttv311 \
-p 1883
<edge_device_address> = localhost Bu örnekte, istemcinin IoT Edge ile aynı cihazda çalıştığından bu yana.
Bu ilk örnekte, TLS olmadan bağlantı noktası 1883 (MQTT) kullanıldığını unutmayın. Bu özelliğin çalışması için, edgeHub bağlantı noktası 1883 ' nin, oluşturma seçenekleri aracılığıyla konağa bağlanması gerekir. Önkoşul bölümünde bir örnek verilmiştir. TLS etkinleştirilmiş bağlantı noktası 8883 (MQTTS) ile başka bir örnek, sonraki bölümde gösterilmiştir.
MQTT istemcisi sub_client artık başlatılmış ve üzerinde gelen iletileri bekliyor test_topic .
Yayımlama
pub_client mqtt istemcinizi mqtt aracısına Bağlan ve test_topic diğer terminalden IoT Edge cihazınızda aşağıdaki komutu çalıştırarak yukarıdaki gibi bir ileti yayımlar:
mosquitto_pub \
-t "test_topic" \
-i "pub_client" \
-u "<iot_hub_name>.azure-devices.net/pub_client/?api-version=2018-06-30" \
-P "<sas_token>" \
-h "<edge_device_address>" \
-V mqttv311 \
-p 1883 \
-m "hello"
<edge_device_address> = localhost Bu örnekte, istemcinin IoT Edge ile aynı cihazda çalıştığından bu yana.
Komutu yürütürken MQTT istemcisinin sub_client "Merhaba" iletisini alır.
TLS ile simetrik anahtarlar kimlik doğrulaması
TLS 'i etkinleştirmek için, bağlantı noktasının MQTT Aracısı tarafından gönderilen sertifika zincirini doğrulayabilmesi için 1883 (MQTT) ile 8883 (MQTTS) arasında değiştirilmesi gerekir. Bu işlem, güvenli bağlantı (TLS)bölümünde belirtilen adımları izleyerek yapılabilir.
İstemciler, yukarıdaki örnekteki MQTT Aracısı ile aynı cihazda çalıştığından, TLS 'i etkinleştirmek için aynı adımlar geçerlidir:
- 1883 (MQTT) numaralı bağlantı noktası numarasını 8883 (MQTTS) olarak değiştirme
- CA kök sertifikasını mosquitto_pub geçirme ve şuna benzer bir parametre kullanarak istemciler mosquitto_sub
--cafile /certs/certs/azure-iot-test-only.root.ca.cert.pem - Gerçek ana bilgisayar adını IoT Edge olarak ayarlanan
localhostkonak adı parametresi aracılığıyla değil, mosquitto_pub ve mosquitto_sub istemcileri, Sertifika zincirinin doğrulanmasını etkinleştirmek için geçirme
IoT Hub yayımlama ve abone olma konuları
Azure IoT cihaz SDK 'ları , istemcilerin IoT Hub işlemler gerçekleştirmesine izin veriyor, ancak kullanıcı tanımlı konularda yayımlama/abone olma izni yok. IoT Hub işlemler, IoT Hub temel elemanlar protokollerinin kullanıldığı sürece Yayımla ve abone olma semantiği kullanılarak gerçekleştirilen MQTT istemcileri kullanılarak gerçekleştirilebilir. Bu protokollerin nasıl çalıştığını anlamak için, aşağıdaki kavrama ilerliyoruz.
Telemetri verilerini IoT Hub gönder
Telemetri verilerinin IoT Hub gönderilmesi Kullanıcı tanımlı bir konu üzerinde yayımlamaya benzer, ancak belirli bir IoT Hub konusunu kullanmaktır:
- Bir cihaz için telemetri şu konuya gönderilir:
devices/<device_name>/messages/events/ - Bir modül için telemetri şu konuya gönderilir:
devices/<device_name>/modules/<module_name>/messages/events/
Ayrıca, FROM /messages/* INTO $upstream IoT Edge MQTT aracılarından IoT Hub 'ına telemetri göndermek için gibi bir yol oluşturun. Yönlendirme hakkında daha fazla bilgi için bkz. yolları bildirme.
İkizi al
Cihaz/modül ikizi alma tipik bir MQTT deseninin değildir. İstemcinin, IoT Hub sunacak bir ikizi için bir istek vermesi gerekir.
TWINS almak için, istemcinin IoT Hub belirli bir konuya abone olması gerekir $iothub/twin/res/# . Bu konu adı IoT Hub devralınır ve tüm istemcilerin aynı konuya abone olmaları gerekir. Cihazların veya modüllerin birbirini ikizi aldığı anlamına gelmez. IoT Hub ve IoT Edge hub, tüm cihazlar aynı konu adını dinlerken bile hangi ikizi teslim edileceğini bilir.
Abonelik yapıldıktan sonra istemci, $iothub/twin/GET/?rid=<request_id>/# rastgele bir tanımlayıcı olan IoT Hub belirli bir konuya bir ileti yayımlayarak ikizi için istekte bulunur <request_id> . IoT Hub daha sonra yanıtını, istemcinin abone olduğu konu üzerine istenen verilerle gönderir $iothub/twin/res/200/?rid=<request_id> . Bu, bir istemcinin isteklerini yanıtlarla eşleştirmesine yönelik bir istekdir.
İkizi düzeltme eklerini al
İkizi düzeltme eklerini almak için, bir istemcinin özel ıothub konusuna abone olması gerekir $iothub/twin/PATCH/properties/desired/# . Abonelik yapıldıktan sonra istemci, bu konuda IoT Hub tarafından gönderilen ikizi düzeltme eklerini alır.
Doğrudan Yöntemler al
Doğrudan bir yöntem alınması, istemcinin çağrıyı aldığını doğrulamak için gereken ek ile tam TWINS almaya benzer. İlk olarak istemci IoT Hub 'ı özel konusuna abone olur $iothub/methods/POST/# . Bu konuda doğrudan bir yöntem alındıktan sonra, istemcinin rid doğrudan yöntemin alındığı alt konudan istek tanımlayıcısını ayıklayıp, son olarak IoT Hub özel konusunda bir onay iletisi yayımlaması gerekir $iothub/methods/res/200/<request_id> .
Doğrudan Yöntemler gönder
Doğrudan bir yöntemi göndermek bir HTTP çağrısıdır ve bu nedenle MQTT aracısına gitmez. IoT Hub 'a doğrudan yöntem göndermek için bkz. doğrudan yöntemleri anlama ve çağırma. Doğrudan bir yöntemi başka bir modüle yerel olarak göndermek için bkz. Azure ıOT C# SDK doğrudan yöntem çağırma örneği.
MQTT aracıları arasında yayımlama ve abone olma
İki MQTT aracılarını bağlamak için IoT Edge hub 'ı bir MQTT Köprüsü içerir. Bir MQTT Köprüsü, başka bir MQTT aracısına çalışan bir MQTT aracısına bağlanmak için yaygın olarak kullanılır. Yalnızca yerel trafiğin bir alt kümesi, genellikle başka bir aracıya gönderilir.
Not
IoT Edge hub Köprüsü şu anda yalnızca iç içe IoT Edge cihazları arasında kullanılabilir. IoT Hub tam özellikli bir MQTT Aracısı olmadığından IoT Hub 'a veri göndermek için kullanılamaz. Daha fazla IoT Hub MQTT aracı özellikleri desteğini öğrenmek için bkz. MQTT protokolünü kullanarak IoT Hub 'ınız Ile Iletişim kurma. IoT Edge cihazların iç içe geçirilmesi hakkında daha fazla bilgi için, bkz. bir aşağı akış IoT Edge cihazını Azure IoT Edge ağ geçidine Bağlan.
İç içe bir yapılandırmada, IoT Edge hub MQTT Köprüsü, üst MQTT aracısının bir istemcisi olarak davranır. bu nedenle, alt EdgeHub 'ın, köprünün yapılandırıldığı belirli kullanıcı tanımlı konuları yayımlamasına ve abone olmalarına izin vermek için üst EdgeHub 'da yetkilendirme kurallarının ayarlanması gerekir.
MQTT Köprüsü IoT Edge, IoT Edge hub 'ına ikizi üzerinden gönderilen bir JSON yapısı aracılığıyla yapılandırılır. MQTT Köprüsü yapılandırmak için bir IoT Edge hub ikizi düzenleyin.
Not
Genel önizleme için, MQTT köprü yapılandırması içeren dağıtımları yalnızca Azure CLı destekler. Azure portal Şu anda IoT Edge hub ikizi ve MQTT Köprüsü yapılandırmasını düzenlemenizi desteklemiyor.
MQTT Köprüsü, bir IoT Edge hub MQTT aracısına birden çok dış aracıya bağlanacak şekilde yapılandırılabilir. Her dış aracı için aşağıdaki ayarlar gereklidir:
endpoint, Bağlanılacak uzak MQTT aracısının adresidir. Şu anda yalnızca üst IoT Edge cihazları destekleniyor ve değişken tarafından tanımlandı$upstream.settingsbir uç nokta için hangi konuların köprü oluşturmak gerektiğini tanımlar. Uç nokta başına birden fazla ayar olabilir ve yapılandırmak için aşağıdaki değerler kullanılır:direction:inUzak aracı konularına abone olmak veyaoutUzak aracı konularına yayımlamak içintopic: eşleştirilecek temel konu deseninin. MQTT joker karakterleri , bu düzenin tanımlanması için kullanılabilir. Yerel aracıda ve uzak aracıda bu konu düzenine farklı ön ekler uygulanabilir.outPrefix:topicUzak aracıda modele uygulanan önek.inPrefix:topicYerel aracıda modele uygulanan önek.
Aşağıda, bir üst IoT Edge IoT Edge cihazı konu başlıkları altında alınan tüm iletileri aynı konularda bir alt IoT Edge cihazına yeniden yayımlar ve bir alt IoT Edge cihazı konularına gönderilen tüm iletileri konu başlıkları altında bir üst IoT Edge cihazına yeniden yayımlar bir IoT Edge MQTT köprüsü yapılandırması örneği alerts/# /local/telemetry/# /remote/messages/# verilmiştir.
{
"schemaVersion": "1.2",
"mqttBroker": {
"bridges": [{
"endpoint": "$upstream",
"settings": [{
"direction": "in",
"topic": "alerts/#"
},
{
"direction": "out",
"topic": "#",
"inPrefix": "/local/telemetry/",
"outPrefix": "/remote/messages/"
}
]
}]
}
}
Merkez MQTT IoT Edge diğer notlar:
- MQTT protokolü, MQTT aracısı kullanılırken otomatik olarak yukarı akış protokolü olarak kullanılır ve bu IoT Edge iç içe geçmiş yapılandırmada ( örneğin, belirtilen bir
parent_hostnameyapılandırmada) kullanılır. Yukarı akış protokolleri hakkında daha fazla bilgi edinmek için bkz. Bulut iletişimi. İç içe yapılandırmalar hakkında daha fazla bilgi edinmek için bkz. Bağlan aşağı akış IoT Edge bir Azure IoT Edge ağ geçidine yerleştirme.
Sonraki adımlar
Ek - Örnek dağıtım bildirimi
Aşağıda, MQTT Aracısı'nın IoT Edge'de etkinleştirmek için kullanabileceğiniz tam dağıtım IoT Edge. MQTT IoT Edge, edgeHub bağlantı noktası 1883 etkin ve üzerinde açık yetkilendirme ilkesi ile 1.2 sürümünü test_topic dağıtır.
{
"modulesContent":{
"$edgeAgent":{
"properties.desired":{
"schemaVersion":"1.1",
"runtime":{
"type":"docker",
"settings":{
"minDockerVersion":"v1.25",
"loggingOptions":"",
"registryCredentials":{
}
}
},
"systemModules":{
"edgeAgent":{
"type":"docker",
"settings":{
"image":"mcr.microsoft.com/azureiotedge-agent:1.2",
"createOptions":"{}"
}
},
"edgeHub":{
"type":"docker",
"status":"running",
"restartPolicy":"always",
"settings":{
"image":"mcr.microsoft.com/azureiotedge-hub:1.2",
"createOptions":"{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}],\"1883/tcp\":[{\"HostPort\":\"1883\"}]}}}"
},
"env":{
"experimentalFeatures__mqttBrokerEnabled":{
"value":"true"
},
"experimentalFeatures__enabled":{
"value":"true"
},
"RuntimeLogLevel":{
"value":"debug"
}
}
}
},
"modules":{
}
}
},
"$edgeHub":{
"properties.desired":{
"schemaVersion":"1.2",
"routes":{
"Upstream":"FROM /messages/* INTO $upstream"
},
"storeAndForwardConfiguration":{
"timeToLiveSecs":7200
},
"mqttBroker":{
"authorizations":[
{
"identities":[
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:connect"
]
}
]
},
{
"identities":[
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:publish",
"mqtt:subscribe"
],
"resources":[
"test_topic"
]
}
]
}
]
}
}
}
}
}