【发布时间】:2018-07-18 02:30:57
【问题描述】:
我是 RabbitMQ 的新手。我安装了 v3.7.7。通过以下挖掘,我已经用尽任何其他权限来获得通过this error。
我在本地安装了 RabbitMQ,创建了一个接收器和一个客户端进行测试。我正在使用默认交换器,并且能够读取和写入我通过 C# 代码创建的队列。我在远程机器上安装了 RabbitMQ 并尝试了相同的操作,但无法让接收器或写入器执行任何操作连接到服务器。所以我知道授权是正确的,但似乎在某处缺少权限。
在远程服务器上,这是我用于测试的命令:
rabbitmqctl add_vhost /els
rabbitmqctl delete_user guest
rabbitmqctl add_user gavin gavin
rabbitmqctl authenticate_user gavin gavin
rabbitmqctl set_permissions -p /els gavin "^gavin-.*" ".*" ".*"
当我执行以下操作时:
QueueDeclareOk ok = _channel.QueueDeclare(queue.ToString(), durable, exclusive, autoDelete, null);
我收到此错误:
AMQP 操作被中断:AMQP 关闭原因,由 Peer 发起,code=403,text="ACCESS_REFUSED - 用户 'gavin' 拒绝访问 vhost '/els' 中的队列 'Ping'",classId=50 , methodId=10, cause=
在本地,即使 Ping 队列还不存在,它也会在我下面的 BasicConsume() 方法中创建它。我错过了什么吗?有没有办法在访问之前创建这些队列,或者我需要通过 RabbitMQ 的命令添加队列还是什么?
我的监听器代码,它在一个被多次调用的函数中,每个队列一个:
//if queue exists or not, this will return 0 if there are no messages in the queue.
QueueDeclareOk ok = _channel.QueueDeclare(
queue.ToString(),
durable,
exclusive,
autoDelete,
null);
//returns the number of messages in Ready state in the queue
if (ok.MessageCount > 0)
Console.WriteLine($" ## {queue.ToString()} has {ok.MessageCount} messages in it's queue. ##");
//create a call back consumer
AsyncEventingBasicConsumer consumer = new AsyncEventingBasicConsumer(_channel);
//method to bind callback to.
consumer.Received += Consumer_Received;
//consume existing and future messages
string consumerTag = _channel.BasicConsume(queue: queue.ToString(),
autoAck: autoAck,
consumer: consumer);
//add to dictionary so it can be cancel
_consumerTag.Add(queue, consumerTag);
【问题讨论】: