Encontrei o erro Connection rest by peer e assumi que o RabbitMQ não estava escutando na porta ou havia um firewall bloqueando-o. Esse não foi o caso.
Executando RabbitMQ no Ubuntu 16.04.2 LTS, versão instalada pelo apt:3.5.7-1ubuntu0.16.04.1
A saída de 'netstat -a' para a porta 5672 do Rabbit ficou assim:
$ netstat -a|grep -i amqp
tcp6 0 0 [::]:amqp [::]:* LISTEN
No entanto, o Rabbit estava de fato ouvindo tanto o endereço IPv4 quanto o endereço IPv6. Eu verifiquei isso com netcat.
Para acessar o Rabbit de outra máquina, você precisa configurar uma conta de usuário com algo como os seguintes comandos:
sudo rabbitmqctl add_user celery celerypassword
sudo rabbitmqctl add_vhost celery_vhost
sudo rabbitmqctl set_user_tags celery celerytag
sudo rabbitmqctl set_permissions -p celery_vhost celery .* .* .*
O problema era minha URL. O meu ficou assim:
BROKER_URL = 'amqp://celery:[email protected]//'
Depois dessa penúltima barra é o nome do vhost. Acima, dei ao meu vhost o nome celery_vhost. Para conectar, precisei alterar a URL para:
BROKER_URL = 'amqp://celery:[email protected]/celery_vhost'
Eu descobri isso olhando os logs do Rabbit em /var/log/rabbitmq. Há um arquivo .log que continha o seguinte erro quando eu tinha o URL errado:
{handshake_error,opening,0,
{amqp_error,access_refused,
"access to vhost '/' refused for user 'celery'",
'connection.open'}}