Вам не нужно реализовывать собственную очередь сообщений.IotEdge обеспечивает автономную функциональность, как описано в этом сообщении в блоге и на этой странице документации .
EdgeHub будет локально хранить сообщения на edgeDevice, если нет соединения сIotHub.Он автоматически начнет отправку этих сообщений (в правильном порядке), как только соединение будет установлено снова.
Вы можете настроить, как долго edgeHub будет буферизировать сообщения, например:
"$edgeHub": {
"properties.desired": {
"schemaVersion": "1.0",
"routes": {},
"storeAndForwardConfiguration": {
"timeToLiveSecs": 7200
}
}
}
7200 секунд(2 часа) также используется по умолчанию, если вы ничего не настраиваете.
По умолчанию сообщения будут записываться в папку в док-контейнере edgeHub.Если вы хотите сохранить их где-то еще, вы можете сделать это с помощью этой конфигурации:
"edgeHub": {
"type": "docker",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.0",
"createOptions": {
"HostConfig": {
"Binds": ["<HostStoragePath>:<ModuleStoragePath>"],
"PortBindings": {
"8883/tcp": [{"HostPort":"8883"}],
"443/tcp": [{"HostPort":"443"}],
"5671/tcp": [{"HostPort":"5671"}]
}
}
}
},
"env": {
"storageFolder": {
"value": "<ModuleStoragePath>"
}
},
"status": "running",
"restartPolicy": "always"
}
Замените HostStoragePath и ModuleStoragePath требуемыми значениями.Пример:
"createOptions": {
"HostConfig": {
"Binds": [
"/etc/iotedge/storage/:/iotedge/storage/"
],
...
}
}
},
"env": {
"storageFolder": {
"value": "/iotedge/storage/"
},
...
Обратите внимание, что вам, вероятно, придется вручную предоставить пользователю iotEdge (или всем пользователям) доступ к этой папке (с помощью chmod).
Обновление :
Если вы просто ищете доступные значения IoTHubMessageDispositionResult , вы найдете ответ здесь :
class IoTHubMessageDispositionResult(Enum):
ACCEPTED = 0
REJECTED = 1
ABANDONED = 2
Обновление2:
Сообщения, которые были ПРИНЯТЫЕ , удаляются из очереди сообщений, поскольку они были успешно доставлены.
Сообщения, которые ABANDONED снова добавляются в очередь сообщений, и модуль попытается отправить ее снова, как определено в retryPolicy.Для получения более подробной информации о retryPolicy вы можете прочитать это thread .
Сообщения, которые REJECTED больше не добавляются в очередь сообщений.