Azure Function运行Service Bus Topic触发器报c_uamqp导入错误
你遇到的MaxDeliveryCountExceeded死信是函数启动时依赖导入失败导致的:消息多次投递到函数,都因为依赖加载失败没有被正常消费确认,超过Service Bus设置的最大投递次数后进入死信队列,依赖问题修复后该问题会自动消失。
根因:uamqp是C语言编译实现的扩展包,跨环境兼容性差,你遇到的cannot import name 'c_uamqp'报错是因为流水线安装的uamqp二进制包和Azure Function Linux运行环境不匹配
修复步骤:
- 首先移除
requirements.txt中单独声明的uamqp依赖:azure-servicebus包本身已经内置了对应版本的uamqp依赖,手动额外声明uamqp会触发版本冲突,拉取与azure-servicebus不兼容的版本。 - 升级
azure-servicebus到最新稳定版(建议7.10.0及以上),你当前使用的7.0.0版本属于早期发行版,存在多个uamqp兼容已知问题。 - 检查Azure Function运行时的Python版本:uamqp 1.4.3暂不支持Python 3.11及以上版本,如果你的运行时版本为3.11,降级到Python 3.9/3.8即可解决。
- 调整部署流水线的依赖安装命令,强制拉取兼容Azure Linux运行环境的预编译包,避免流水线本地编译的二进制包不兼容:
pip install --platform manylinux2014_x86_64 --only-binary=:all: --target=<你的依赖安装路径> -r requirements.txt
- 优化业务代码冗余逻辑:你当前的函数已经配置了Service Bus Topic触发器,函数被触发时入参
message就是TOPIC_A推送过来的单条消息,不需要在代码中再主动创建Receiver重复拉取TOPIC_A的消息,删掉这部分重复拉取逻辑,避免消费逻辑冲突导致的消息异常投递。
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

