本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
MQTT 橋接元件 (aws.greengrass.clientdevices.mqtt.Bridge
) 會在用戶端裝置、本機 Greengrass 發佈/訂閱和 之間轉送 MQTT 訊息 AWS IoT Core。您可以使用此元件對自訂元件中用戶端裝置的 MQTT 訊息採取行動,並同步用戶端裝置與 AWS 雲端。
注意
用戶端裝置是連線至 Greengrass 核心裝置的本機 IoT 裝置,用於傳送 MQTT 訊息和要處理的資料。如需詳細資訊,請參閱與本機 IoT 裝置互動。
您可以使用此元件在下列訊息代理程式之間轉送訊息:
-
Local MQTT – 本機 MQTT 代理程式會處理用戶端裝置與核心裝置之間的訊息。
-
本機發佈/訂閱 – 本機 Greengrass 訊息代理程式會處理核心裝置上的元件之間的訊息。如需如何在 Greengrass 元件中與這些訊息互動的詳細資訊,請參閱 發佈/訂閱本機訊息。
-
AWS IoT Core – AWS IoT Core MQTT 代理程式會處理 IoT 裝置和 AWS 雲端 目的地之間的訊息。如需如何在 Greengrass 元件中與這些訊息互動的詳細資訊,請參閱 發佈/訂閱 AWS IoT Core MQTT 訊息。
注意
MQTT 橋接器使用 QoS 1 來發佈和訂閱 AWS IoT Core,即使用戶端裝置使用 QoS 0 來發佈和訂閱本機 MQTT 代理程式也一樣。因此,當您從本機 MQTT 代理程式上的用戶端裝置轉送 MQTT 訊息時,可能會觀察到額外的延遲 AWS IoT Core。如需核心裝置上 MQTT 組態的詳細資訊,請參閱設定 MQTT 逾時和快取設定。
版本
此元件具有下列版本:
-
2.3.x 版本
-
2.2.x 版本
-
2.1.x
-
2.0.x
Type
此元件是外掛程式元件 (aws.greengrass.plugin
)。Greengrass 核會在與核相同的 Java 虛擬機器 (JVM) 中執行此元件。當您在核心裝置上變更此元件的版本時,核會重新啟動。
此元件使用與 Greengrass 核相同的日誌檔案。如需詳細資訊,請參閱監控 AWS IoT Greengrass 日誌。
如需詳細資訊,請參閱元件類型。
作業系統
此元件可以安裝在執行下列作業系統的核心裝置上:
Linux
Windows
要求
此元件有下列需求:
-
如果您將核心裝置的 MQTT 代理程式元件設定為使用預設連接埠 8883 以外的連接埠,則必須使用 MQTT 橋接器 v2.1.0 或更新版本。將其設定為在代理程式操作的連接埠上連線。
-
支援 MQTT 橋接元件在 VPC 中執行。
相依性
當您部署元件時, AWS IoT Greengrass 也會部署其相依性的相容版本。這表示您必須符合元件及其所有相依性的要求,才能成功部署元件。本節列出此元件發行版本的相依性,以及為每個相依性定義元件版本的語意版本限制。您也可以在AWS IoT Greengrass 主控台
下表列出此元件 2.3.2 版的相依性。
相依性 | 相容版本 | 相依性類型 |
---|---|---|
用戶端裝置驗證 | >=2.2.0 <2.6.0 | 硬式 |
如需元件相依性的詳細資訊,請參閱元件配方參考。
組態
此元件提供下列組態參數,您可以在部署元件時自訂這些參數。
mqttTopicMapping
-
您要橋接的主題映射。此元件會訂閱來源主題的訊息,並將收到的訊息發佈至目的地主題。每個主題映射都會定義主題、來源類型和目的地類型。
此物件包含下列資訊:
topicMappingNameKey
-
此主題映射的名稱。將
topicMappingNameKey
取代為可協助您識別此主題映射的名稱。此物件包含下列資訊:
topic
-
要橋接來源和目標代理程式的主題或主題篩選條件。
您可以使用
+
和#
MQTT 主題萬用字元,在所有符合主題篩選條件的主題上轉送訊息。如需詳細資訊,請參閱《 AWS IoT Core 開發人員指南》中的 MQTT 主題。注意
若要搭配
Pubsub
來源代理程式使用 MQTT 主題萬用字元,您必須使用 Greengrass 核元件的 v2.6.0 或更新版本。 targetTopicPrefix
-
當此元件轉送訊息時,要新增至目標主題的字首。
source
-
來源訊息代理程式。您可以從以下選項中選擇:
-
LocalMqtt
– 用戶端裝置通訊的本機 MQTT 代理程式。 -
Pubsub
– 本機 Greengrass 發佈/訂閱訊息代理程式。 -
IotCore
– AWS IoT Core MQTT 訊息代理程式。注意
MQTT 橋接器使用 QoS 1 來發佈和訂閱 AWS IoT Core,即使用戶端裝置使用 QoS 0 來發佈和訂閱本機 MQTT 代理程式也一樣。因此,當您從本機 MQTT 代理程式上的用戶端裝置轉送 MQTT 訊息時,可能會觀察到額外的延遲 AWS IoT Core。如需核心裝置上 MQTT 組態的詳細資訊,請參閱設定 MQTT 逾時和快取設定。
source
和target
必須不同。 -
target
-
目標訊息代理程式。您可以從以下選項中選擇:
-
LocalMqtt
– 用戶端裝置通訊的本機 MQTT 代理程式。 -
Pubsub
– 本機 Greengrass 發佈/訂閱訊息代理程式。 -
IotCore
– AWS IoT Core MQTT 訊息代理程式。注意
MQTT 橋接器使用 QoS 1 來發佈和訂閱 AWS IoT Core,即使用戶端裝置使用 QoS 0 來發佈和訂閱本機 MQTT 代理程式也一樣。因此,當您從本機 MQTT 代理程式上的用戶端裝置轉送 MQTT 訊息時,可能會觀察到額外的延遲 AWS IoT Core。如需核心裝置上 MQTT 組態的詳細資訊,請參閱設定 MQTT 逾時和快取設定。
source
和target
必須不同。 -
- mqtt5RouteOptions
-
(選用) 提供設定主題映射的選項,以將訊息從來源主題橋接到目的地主題。
此物件包含下列資訊:
mqtt5RouteOptionsNameKey
-
主題映射的路由選項名稱。將
mqtt5RouteOptionsNameKey
取代為mqttTopicMapping
欄位中定義的相符topicMappingNameKey
。此物件包含下列資訊:
- noLocal
-
(選用) 啟用時,橋接器不會轉送橋接器本身發佈之主題的訊息。使用此選項來防止迴圈,如下所示:
{ "mqtt5RouteOptions": { "toIoTCore": { "noLocal": true } }, "mqttTopicMapping": { "toIoTCore": { "topic": "device", "source": "LocalMqtt", "target": "IotCore" }, "toLocal": { "topic": "device", "source": "IotCore", "target": "LocalMqtt" } } }
noLocal
僅支援source
為 的路由LocalMqtt
。預設:false
- retainAsPublished
-
(選用) 啟用時,橋接器轉送的訊息具有與發佈至該路由之代理程式的訊息相同的
retain
旗標。retainAsPublished
僅支援source
為 的路由LocalMqtt
。預設:false
- mqtt
-
(選用) 用於與本機代理程式通訊的 MQTT 通訊協定設定。
- version
-
(選用) 橋接器用來與本機代理程式通訊的 MQTT 通訊協定版本。必須與 核組態中選取的 MQTT 版本相同。
請選擇下列項目:
-
mqtt3
-
mqtt5
當
mqttTopicMapping
物件的source
或target
欄位設定為 時,您必須部署 MQTT 代理程式LocalMqtt
。如果您選擇mqtt5
選項,則必須使用 MQTT 5 代理程式 (EMQX)。預設:
mqtt3
-
- ackTimeoutSeconds
-
(選用) 在操作失敗之前等待 PUBACK、SUBACK 或 UNSUBACK 封包的時間間隔。
預設:60
- connAckTimeoutMs
-
(選用) 關閉連線之前等待 CONNACK 封包的時間間隔。
預設:20000 (20 秒)
- pingTimeoutMs
-
(選用) 橋接器等待從本機代理程式接收 PINGACK 訊息的時間,以毫秒為單位。如果等待超過逾時,則橋接會關閉,然後重新開啟 MQTT 連線。此值必須小於
keepAliveTimeoutSeconds
。預設:30000 (30 秒)
- keepAliveTimeoutSeconds
-
(選用) 橋接器為保持 MQTT 連線運作而傳送的每個 PING 訊息之間的秒數。此值必須大於
pingTimeoutMs
。預設:60
- maxReconnectDelayMs
-
(選用) MQTT 重新連線的秒數上限。
預設:30000 (30 秒)
- minReconnectDelayMs
-
(選用) MQTT 重新連線的最短秒數。
- receiveMaximum
-
(選用) 橋接器可以傳送的未確認 QoS1 封包數量上限。
預設:100
- maximumPacketSize
-
用戶端接受 MQTT 封包的最大位元組數。
預設: null (無限制)
- sessionExpiryInterval
-
(選用) 您可以請求工作階段在橋接器與本機代理程式之間持續的時間秒數。
預設:4294967295 (工作階段永不過期)
brokerUri
-
(選用) 本機 MQTT 代理程式的 URI。如果您將 MQTT 代理程式設定為使用與預設連接埠 8883 不同的連接埠,則必須指定此參數。使用下列格式,並將
連接埠
取代為 MQTT 中介裝置操作的連接埠:ssl://localhost:
。port
預設:
ssl://localhost:8883
- startupTimeoutSeconds
-
(選用) 元件啟動的秒數上限。
BROKEN
如果元件超過此逾時,元件的狀態會變更為 。預設:
120
範例:組態合併更新
下列範例組態更新會指定下列項目:
-
在符合 AWS IoT Core 主題篩選條件
clients/+/hello/world
的主題上,將訊息從用戶端裝置轉送到 。 -
將訊息從用戶端裝置轉送到本機發佈/訂閱符合
clients/+/detections
主題篩選條件的主題,並將events/input/
字首新增至目標主題。產生的目標主題符合events/input/clients/+/detections
主題篩選條件。 -
在符合
clients/+/status
主題篩選條件的主題 AWS IoT Core 上,將訊息從用戶端裝置轉送到 ,並將$aws/rules/StatusUpdateRule/
字首新增至目標主題。此範例會將這些訊息直接轉送至名為 的AWS IoT 規則StatusUpdateRule
,以使用基本擷取降低成本。
{
"mqttTopicMapping": {
"ClientDeviceHelloWorld": {
"topic": "clients/+/hello/world",
"source": "LocalMqtt",
"target": "IotCore"
},
"ClientDeviceEvents": {
"topic": "clients/+/detections",
"targetTopicPrefix": "events/input/",
"source": "LocalMqtt",
"target": "Pubsub"
},
"ClientDeviceCloudStatusUpdate": {
"topic": "clients/+/status",
"targetTopicPrefix": "$aws/rules/StatusUpdateRule/",
"source": "LocalMqtt",
"target": "IotCore"
}
}
}
範例:設定 MQTT 5
下列範例組態會更新下列項目:
-
讓橋接器搭配本機代理程式使用 MQTT 5 通訊協定。
-
將 MQTT 保留設定為
ClientDeviceHelloWorld
主題映射的發佈設定。
{ "mqttTopicMapping": { "ClientDeviceHelloWorld": { "topic": "clients/+/hello/world", "source": "LocalMqtt", "target": "IotCore" } }, "mqtt5RouteOptions": { "ClientDeviceHelloWorld": { "retainAsPublished": true } }, "mqtt": { "version": "mqtt5" } }
本機日誌檔案
此元件使用與 Greengrass 核元件相同的日誌檔案。
/logs/greengrass.log
/greengrass/v2
檢視此元件的日誌
-
在核心裝置上執行下列命令,以即時檢視此元件的日誌檔案。將
或/greengrass/v2
C:\greengrass\v2
取代為 AWS IoT Greengrass 根資料夾的路徑。sudo tail -f
/logs/greengrass.log/greengrass/v2
變更記錄
下表說明每個版本的元件的變更。
版本 |
變更 |
---|---|
2.3.2 |
針對用戶端裝置驗證 2.5.0 版更新版本。 |
2.3.1 |
|
2.3.0 |
|
2.2.6 |
|
2.2.5 |
針對用戶端裝置驗證 2.4.0 版更新版本。 |
2.2.4 |
針對 Greengrass 用戶端裝置驗證 2.3.0 版更新版本。 |
2.2.3 |
此版本包含錯誤修正和改善。 |
2.2.2 |
|
2.2.1 |
|
2.2.0 |
|
2.1.1 |
|
2.1.0 |
|
2.0.1 |
此版本包含錯誤修正和改善。 |
2.0.0 |
初始版本。 |