场景
使用用户名称000010直接消费RabbitMQ队列中消息,返回异常错误:
com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=403, reply-text=ACCESS_REFUSED - access to queue 'passerby-000010' in vhost '/' refused for user '000010', class-id=60, method-id=20)
分析
提示说明当前用户没有访问该队列的权限
通过WEB RabbitMQ网页管理配置界面,发现User:000010用户的Permissions的读取规则(Read regexp)是passby-000010而不是passerby-000010(配置该用户允许读取的队列名称),所以才导致程序接收不到数据,仅仅是少了er,第三方配置的问题
配置权限错误图片
解决
通过重新配置下读取的匹配规则,解决问题:passerby-000010
备注
上述是采用了java代码返回了访问权限的问题,C++的代码不会提示任何的错误,当然也无法收到数据
amqp_channel_open(conn, 1);
amqp_basic_consume(conn, 1, amqp_cstring_bytes("passerby-000010"), amqp_empty_bytes, 0, 0, 0, amqp_empty_table);
amqp_rpc_reply_t replyComsume = amqp_get_rpc_reply(conn);
延申
NOT_ALLOWED - access to vhost '/' refused for user 'test'
定位发现是连接rabbitmq使用的用户没有赋予访问权限