Run Multiple Django Apps With Celery On One Server With Rabbitmq VHosts

Apr 29, 2014 · Updated: Jul 12, 2021 · by Tim Kamanin

Sometimes, we can have multiple Django apps, each running celery, on a single server. If celery workers use Rabbitmq as a broker, we need to isolate them so that each worker uses a separate rabbitmq instance.

Luckily, Rabbitmq has a concept of virtual hosts, so we can create a host per celery app and call it a day. Here's how to do this:

  1. Create rabbitmq server vhost at first:

    sudo rabbitmqctl add_vhost our_app_vhost

  2. Add user / password pair

    sudo rabbitmqctl add_user username password

  3. Grant permissions to our user on our vhost:

    sudo rabbitmqctl set_permissions -p our_app_vhost username ".*" ".*" ".*"

  4. If you want to give our user access to management backend execute this command:

    sudo rabbitmqctl set_user_tags username management

  5. Now you can add BROKER_URL to your Django app settings
    BROKER_URL = "amqp://username:password@localhost:5672/our_app_vhost"

We have just created a virtual host for our Django app. Using this technique, create a virtual host for every Django/Celery app you have and enjoy the peace of mind.

Hey, if you've found this useful, please share the post to help other folks find it:

There's even more:

Subscribe for updates

  • via Twitter: @timonweb
  • old school RSS:
  • or evergreen email ↓ ↓ ↓