【问题标题】:How do I protect celery queues when using the same rabbitmq for dev and production使用相同的rabbitmq进行开发和生产时如何保护芹菜队列
【发布时间】:2018-04-13 03:55:15
【问题描述】:

我正在使用 rabbitmq 和 celery 进行后端任务,我想使用相同的 rabbitmq 进行开发/测试,但不希望有人不小心将 celery 工人用于生产队列并将它们用于开发/测试。如果可能的话,如何保护 celery 队列不被任何也可以访问相同 rabbitmq 后端的 celery worker 访问。

【问题讨论】:

    标签: rabbitmq celery django-celery


    【解决方案1】:

    在 BROKER_TRANSPORT_OPTIONS 中保留不同的 queue_name_prefix 用于开发和测试。

    BROKER_TRANSPORT_OPTIONS = {
        'queue_name_prefix':'development/test',
        'wait_time_seconds': 10,
        'polling_interval': 30,
        'visibility_timeout': 3600 * 5
    }
    

    【讨论】:

    • 是的,但有人可能在测试时不小心添加了生产前缀
    • queue_name_prefix 可以作为系统的主机名 (gethostname()) 或任何其他随环境变化的变量传递。工作人员仅从 queue_name_prefix 识别任务, queue_name_prefix 用于您所要求的目的。我不知道任何其他解决方法。
    【解决方案2】:

    为了解决这个问题,我设置了一个 rabbitmq 虚拟主机,生产 rabbitmq 用户对其具有独占访问权限。然后,生产用户的密码与生产 django 密钥类似地存储。

    RABBIT_USER = os.environ.get('TANTALUS_RABBIT_USER', 'guest')
    RABBIT_PASSWORD = os.environ.get('TANTALUS_RABBIT_PASSWORD', 'guest')
    RABBIT_VHOST = os.environ.get('TANTALUS_RABBIT_VHOST', '')
    CELERY_BROKER_URL = 'amqp://{}:{}@1.2.3.4:5672/{}'.format(RABBIT_USER, 
    RABBIT_PASSWORD, RABBIT_VHOST)
    

    可以添加一个新的兔子用户:

    sudo rabbitmqctl add_user produser prodpassword
    sudo rabbitmqctl set_user_tags produser administrator
    sudo rabbitmqctl add_vhost prodvhost
    sudo rabbitmqctl set_permissions -p prodvhost produser ".*" ".*" ".*"
    

    【讨论】:

      猜你喜欢
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2014-09-27
      • 2023-01-05
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多