代码= 403,ACCESS_REFUSED

时间:2018-07-17 17:22:48

标签: c# rabbitmq

我是RabbitMQ的新手。我已经安装了v3.7.7。仔细阅读以下内容,我已经用尽了所有其他权限才能获得通行证this error

我在本地安装RabbitMQ,创建了一个接收器和一个要测试的客户端。我正在使用默认交换,并且能够读取和写入通过C#代码创建的队列。.我在远程计算机上安装RabbitMQ并尝试了相同的操作,但无法使Receiver或Write做更多的事情连接到服务器。所以我知道授权是正确的,但似乎在某处缺少许可。

在远程服务器上,这是我用于测试的命令:

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启动,代码= 403,文本=“ ACCESS_REFUSED-用户'gavin'拒绝访问虚拟主机'/ 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);

1 个答案:

答案 0 :(得分:0)

解决了以下问题:

rabbitmqctl clear_permissions -p /els gavin
rabbitmqctl set_permissions -p /els gavin ".*" ".*" ".*"