芹菜与亚马逊SQS
我想使用Amazon SQS作为Celery的后盾。 芹菜依赖于Kombu的SQS运输实施。 但是没有足够的文档来使用它,所以我找不到如何在Celery上configurationSQS。 有没有人成功在芹菜上configurationSQS?
我遇到了这个问题几次,但仍然不完全确定如何设置芹菜与SQS合作。 事实certificate,使用最新版本的Kombu和芹菜是相当容易的。 作为另一个答案中提到的BROKER_URL语法的替代方法,您可以简单地设置transport,options,user和password,如下所示:
BROKER_TRANSPORT = 'sqs' BROKER_TRANSPORT_OPTIONS = { 'region': 'us-east-1', } BROKER_USER = AWS_ACCESS_KEY_ID BROKER_PASSWORD = AWS_SECRET_ACCESS_KEY
这解决了URLparsing器的一个问题,它不允许在API密钥中使用正斜杠,这似乎是AWS的一种常见现象。 由于目前还没有关于这个话题的大量信息,所以我也在这里写了一篇关于这个话题的简短的博客文章:
http://www.caktusgroup.com/blog/2011/12/19/using-django-and-celery-amazon-sqs/
我正在使用Celery 3.0,并在使用BROKER_USER / BROKER_PASSWORD设置启动worker时收到了弃用警告。
我查看了kombo.utils.url._parse_url中的SQS URLparsing,并且正在调用URL的用户名和密码元素上的urllib.unquote。
所以,为了解决带有斜杠的密钥问题,我能够成功地使用BROKER_URL的以下内容:
import urllib BROKER_URL = 'sqs://%s:%s@' % (urllib.quote(AWS_ACCESS_KEY_ID, safe=''), urllib.quote(AWS_SECRET_ACCESS_KEY, safe=''))
我不确定访问键是否可以在它们中间有斜杠,但是也不会引用它。
对于这个问题的任何人来说,我可以用SQS开箱即用(不需要修补),但是我确实需要升级到Celery和Kombu的最新版本才能工作(1.4。 5和1.5.1截至目前)。 使用上面的configuration行,它应该工作(虽然你可能会想改变默认区域)。
需要注意的是,为了使用上面的URL格式,您需要确保您的AWS秘密不包含斜线,因为这会混淆URLparsing器。 只要继续产生新的秘密,直到你没有斜线得到一个。
没有人回答这个问题。 无论如何,我试图configuration与亚马逊SQS芹菜,看来我取得了一个小小的成功。
Kombu应该补丁,所以我写了一些补丁,也有我的拉请求 。 您可以通过在补丁sqs://
上的Celery中设置BROKER_URL
sqs://
scheme的sqs://
来configurationAmazon SQS。 例如:
BROKER_URL = 'sqs://AWS_ACCESS:AWS_SECRET@:80//' BROKER_TRANSPORT_OPTIONS = { 'region': 'ap-northeast-1', 'sdb_persistence': False }
我在IAM consonle中重新生成了证书,直到我得到一个没有斜杠( /
)的密钥。 parsing问题只与该字符,所以如果你的秘密没有一个,你会没事的。
不是最可怕的优雅的解决scheme,但绝对保持代码干净的黑客。