首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确处理访问键中包含'/‘字符的芹菜和Azure存储队列?

如何正确处理访问键中包含'/‘字符的芹菜和Azure存储队列?
EN

Stack Overflow用户
提问于 2020-02-25 20:20:39
回答 1查看 473关注 0票数 2

我正在使用以下语法创建一个Celery应用程序

代码语言:javascript
复制
celery_app = Celery(
    my_config_name,
    backend=my_backend,
    broker=my_broker,
)

对于my_broker,我使用的是Azure存储帐户的地址

代码语言:javascript
复制
my_broker = "azurestoragequeues://:jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA/EaO5aBxqEYSB2VPXJ2v4C58D==@myazurequeue"

请注意,密码位包含一个'/‘(这是对应的访问密钥,也可以在Azure门户中读取)。

如果我运行我的代码,我会得到

代码语言:javascript
复制
ValueError: invalid literal for int() with base 10: 'jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA'

这与我收到的错误相同

代码语言:javascript
复制
from kombu.utils.url import parse_url
parse_url(my_broker)

一个似乎有效的修复方法是这样的:

代码语言:javascript
复制
from kombu.utils.url import safequote
my_broker_fixed = "azurestoragequeues://:" + safequote(str.replace(my_broker, "azurestoragequeues://:", ""), safe = "=@")

它只能对访问密钥中的'/‘字符进行编码(而不能对地址的其余部分进行编码)。这在触发parse_url(my_broker)时也可以很好地解析,因为它产生了

代码语言:javascript
复制
{'hostname': 'myazurequeue',
 'password': 'jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA/EaO5aBxqEYSB2VPXJ2v4C58D==',
 'port': None,
 'transport': 'azurestoragequeues',
 'userid': None,
 'virtual_host': None}

这似乎可以作为一种解决办法,但有没有更好的解决方法?

EN

回答 1

Stack Overflow用户

发布于 2020-03-01 18:11:10

密码是传输连接中需要安全引用的部分。

将连接的用户名、密码、主机名存储为环境变量,并在应用程序中读取它们。

代码语言:javascript
复制
from kombu.utils.url import safequote

TRANSPORT_USER = os.getenv('TRANSPORT_USER'),
TRANSPORT_PASS = safequote(os.getenv('TRANSPORT_PASS')),
TRANSPORT_HOST = os.getenv('TRANSPORT_HOST')

my_broker = f'azurestoragequeues://{TRANSPORT_USER}:{TRANSPORT_PASS}@{TRANSPORT_HOST}'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60394534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档