擅长:python、mysql、java
<p>我通过对等错误找到了连接rest,并假设RabbitMQ没有监听端口,或者有防火墙阻止它。事实并非如此。</p>
<p>在Ubuntu 16.04.2lts上运行RabbitMQ,apt安装的版本:3.5.7-1ubuntu0.16.04.1</p>
<p>Rabbit端口5672的“netstat-a”输出如下:</p>
<pre><code>$ netstat -a|grep -i amqp
tcp6 0 0 [::]:amqp [::]:* LISTEN
</code></pre>
<p>然而,Rabbit实际上同时监听IPv4地址和IPv6地址。我用netcat验证了这一点。</p>
<p>要从另一台计算机访问Rabbit,必须使用以下命令设置用户帐户:</p>
<pre><code>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 .* .* .*
</code></pre>
<p>问题是我的网址。我的看起来像:</p>
<pre><code>BROKER_URL = 'amqp://celery:celerypassword@10.0.3.3//'
</code></pre>
<p>倒数第二个正斜杠后面是vhost的名称。上面,我给我的主机取名芹菜主机。要连接,我需要将URL更改为:</p>
<pre><code>BROKER_URL = 'amqp://celery:celerypassword@10.0.3.3/celery_vhost'
</code></pre>
<p>我通过查看Rabbit的/var/log/rabbitmq日志发现了这一点。当我使用错误的URL时,有一个.log文件包含以下错误:</p>
<pre><code>{handshake_error,opening,0,
{amqp_error,access_refused,
"access to vhost '/' refused for user 'celery'",
'connection.open'}}
</code></pre>