Azure IoT 中心上并发设备连接和遥测的支持请求

问题描述 投票:0回答:1

azure-iot-device:2.14.0 azure-iot-hub:2.6.1 asyncio:3.4.3 Python 版本:3.10.12 Azure IoTHub 详细信息:层: S1

问题描述: 我使用 Azure IoT SDK 开发了一个 Python 脚本,将 670 个设备连接到 Azure IoT 中心。该脚本旨在异步连接每个设备、更新设备孪生并并行发送遥测数据。

但是,在同时为所有 670 台设备运行脚本时,我面临着连接限制: 在 337 台设备成功连接、更新其孪生设备并开始发送遥测数据后,其余设备无法建立连接。 日志指示超出初始 337 连接的设备出现新的连接错误,并包含以下详细信息:

  pipeline_stages_mqtt.py:83 - MQTTTransportStage(ConnectOperation): Connection watchdog expired. Cancelling op  mqtt_transport.py:441 - disconnecting MQTT client  async_adapter.py:72 - Callback completed with error Transport timeout on connection operation  async_adapter.py:73 - ['azure.iot.device.common.pipeline.pipeline_exceptions.OperationTimeout: Transport timeout on connection operation\n']  mqtt_transport.py:150 - Creating client for connecting using MQTT over TCP

在异常中,收到的错误消息是:Error: Could not Complete operation before timeout.

有趣的是,当我将工作负载分成两批,每批 335 个设备,并在同一 IP 地址的 Python 脚本的不同实例中运行它们时,所有连接都会成功,并且每个设备都会更新其孪生设备并按预期发送遥测数据。

python-3.x python-asyncio azure-iot-hub azure-sdk-python
1个回答
0
投票

根据此文档,同时连接的设备数量没有具体限制,但根据所选的层和单位,每秒允许的新连接数量有限制。

对于免费套餐和 S1,新连接数限制为每秒 100 个,或每单位每秒 12 个连接。

为了满足 670 个设备的要求,您需要 S3 层,因为它每台每秒最多可以处理 6,000 个新连接。所有层的并发连接设备流的最大数量为 50。

我提到了这个doc,每个作业运行多达1,000台设备。

async def device_twin_job(job_id, device_id, execution_time):
    print ( "" )
    print ( "Scheduling job " + str(job_id) )

    job_request = JobRequest()
    job_request.job_id = job_id
    job_request.type = "scheduleUpdateTwin"
    job_request.start_time = datetime.datetime.utcnow().isoformat()

    job_request.update_twin = Twin(etag="*", properties=TwinProperties(desired=UPDATE_PATCH))
    job_request.max_execution_time_in_seconds = execution_time
    job_request.query_condition = "DeviceId in ['{}']".format(device_id)


输出:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.