我正在使用以下语法创建芹菜应用程序
celery_app = Celery(
my_config_name,
backend=my_backend,
broker=my_broker,
)
对于my_broker
,我使用的是一个Azure存储帐户的地址,该帐户读取
my_broker = "azurestoragequeues://:jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA/EaO5aBxqEYSB2VPXJ2v4C58D==@myazurequeue"
请注意,密码位包含一个“/”(这是相应的访问密钥,也可以在Azure门户中读取)
如果我运行我的代码,我会
ValueError: invalid literal for int() with base 10: 'jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA'
这和我犯的错误是一样的
from kombu.utils.url import parse_url
parse_url(my_broker)
一个似乎有效的修复方法是
from kombu.utils.url import safequote
my_broker_fixed = "azurestoragequeues://:" + safequote(str.replace(my_broker, "azurestoragequeues://:", ""), safe = "=@")
它只能对访问密钥中的“/”字符进行编码(但不能在地址的其余部分进行编码)。
当触发parse_url(my_broker)
时,这也可以很好地解析,因为它会产生
{'hostname': 'myazurequeue',
'password': 'jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA/EaO5aBxqEYSB2VPXJ2v4C58D==',
'port': None,
'transport': 'azurestoragequeues',
'userid': None,
'virtual_host': None}
这似乎是一个不错的解决办法,但有更好的解决办法吗
密码是传输连接中需要安全引用的部分
将连接的用户名、密码和主机名存储为环境变量,并在应用程序中读取这些变量
相关问题 更多 >
编程相关推荐