定位发现是连接rabbitmq使用的用户没有赋予访问权限,我创建的是admin用户,给admin用户赋予‘/’目录的访问权限就可以,执行如下命令:
SpringBoot整合RabbitMQ集群时报如下错误
RabbitMQ集群配置参考:https://blog.csdn.net/weixin_42465125/article/details/88368784
rabbitmqctl set_permissions -p / cuit '.*' '.*' '.*'
通过 Caused by 可以定位 vhost 名称没找到
处理方式一(推荐)
在 application.properties 文件中添加 spring.rabbitmq.virtual-host=my_vhost
处理方式二(推荐)
在 rabbitmq 管理后天中添加 my_vhost 目录
处理方式三
在启动docker时指定vhost : RABBITMQ_DEFAULT_VHOST=my_vhost
docker run -d --name rabbitmq3.8.2-management-alpine -p 5672:5672 -p 15672:15672 --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 27676558455e
1
######################
#用户角色
#######################
RabbitMQ的用户角色分类:
none、management、policymaker、monitoring、administrator
RabbitMQ各类角色描述:
none
不能访问 management plugin
management
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
policymaker
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters
monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息
administrator
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connections
创建用户并设置角色:
可以创建管理员用户,负责整个MQ的运维,例如:
$sudo rabbitmqctl add_user user_admin passwd_admin
赋予其administrator角色:
$sudo rabbitmqctl set_user_tags user_admin administrator
可以创建RabbitMQ监控用户,负责整个MQ的监控,例如:
$sudo rabbitmqctl add_user user_monitoring passwd_monitor
赋予其monitoring角色:
$sudo rabbitmqctl set_user_tags user_monitoring monitoring
可以创建某个项目的专用用户,只能访问项目自己的virtual hosts
$sudo rabbitmqctl add_user user_proj passwd_proj
赋予其monitoring角色:
$sudo rabbitmqctl set_user_tags user_proj management
创建和赋角色完成后查看并确认:
$sudo rabbitmqctl list_users
########################
#RabbitMQ 权限控制:
########################
默认virtual host:"/"
默认用户:guest
guest具有"/"上的全部权限,仅能有localhost访问RabbitMQ包括Plugin,建议删除或更改密码。可通过将配置文件中loopback_users置孔来取消其本地访问的限制:
[{rabbit, [{loopback_users, []}]}]
用户仅能对其所能访问的virtual hosts中的资源进行操作。这里的资源指的是virtual hosts中的exchanges、queues等,操作包括对资源进行配置、写、读。配置权限可创建、删除、资源并修改资源的行为,写权限可向资源发送消息,读权限从资源获取消息。比如:
exchange和queue的declare与delete分别需要exchange和queue上的配置权限
exchange的bind与unbind需要exchange的读写权限
queue的bind与unbind需要queue写权限exchange的读权限
发消息(publish)需exchange的写权限
获取或清除(get、consume、purge)消息需queue的读权限
对何种资源具有配置、写、读的权限通过正则表达式来匹配,具体命令如下:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
其中,<conf> <write> <read>的位置分别用正则表达式来匹配特定的资源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和默认的exchange,'^$'不匹配任何资源
需要注意的是RabbitMQ会缓存每个connection或channel的权限验证结果、因此权限发生变化后需要重连才能生效。
为用户赋权:
$sudo rabbitmqctl set_permissions -p /vhost1 user_admin '.*' '.*' '.*'
该命令使用户user_admin具有/vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源
查看权限:
$sudo rabbitmqctl list_user_permissions user_admin
Listing permissions for user "user_admin" ...
/vhost1<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*
$sudo rabbitmqctl list_permissions -p /vhost1
Listing permissions in vhost "/vhost1" ...
user_admin<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*
————————————————
版权声明:本文为CSDN博主「zyz511919766」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zyz511919766/article/details/42292655
分享到:
相关推荐
这个库提供了基础的池化对象框架,我们可以基于此构建RabbitMQ连接池。首先,我们需要配置`PooledConnectionFactory`,设置最大连接数、超时时间等参数。然后,创建一个`PoolableConnectionFactory`,将`...
通过源码,我们可以看到RabbitMQ客户端如何处理网络故障、服务器异常等错误情况,以及如何实现重连和自动恢复策略。 10. **性能优化** 分析源码还可以发现RabbitMQ如何优化内存管理、网络通信效率以及并发处理...
这个压缩包“Java获取MQ连接数的Demo.zip”提供了一个简单的Java示例,用于展示如何通过编程方式获取RabbitMQ服务器的连接数。以下是对这个Demo的详细解释: 首先,为了与RabbitMQ交互,我们需要引入RabbitMQ的Java...
在实现过程中,你需要创建连接工厂、通道(Channel),然后定义交换机和队列,最后进行绑定。此外,还要处理异常,确保消息的可靠传输。 为了封装RabbitMQ.Client库,你可以创建一个RabbitMQService类,提供一系列...
# 创建 RabbitMQ 连接 credentials = pika.PlainCredentials("michael", "michael") connection = pika.BlockingConnection(pika.ConnectionParameters( host='192.168.2.188', credentials=credentials )) ...
同时,代码中的详细备注对于初学者和经验丰富的开发者来说都是一份宝贵的资源,它们有助于了解工程结构,学习如何连接到RabbitMQ服务器,发送和接收消息,以及处理各种AMQP操作。 在工程结构中,通常会包含以下几个...
安装完成后,你可以创建一个连接工厂来建立与RabbitMQ服务器的连接: ```csharp using RabbitMQ.Client; using RabbitMQ.Client.Framing.v0_9_1; // 创建连接工厂 var factory = new ConnectionFactory() { ...
1. **创建连接和通道**:使用`ConnectionFactory`创建与RabbitMQ服务器的连接,并通过`Channel`进行具体操作。`Channel`是执行大部分AMQP操作的对象,如声明交换机、队列、绑定等。 2. **声明队列**:在订阅者端,...
4. **配置TP6**:在 TP6 的配置文件 `config.php` 或特定的环境配置文件中添加RabbitMQ的连接信息,如主机名、端口、用户、密码和虚拟主机。 5. **创建生产者**:在TP6应用中,你需要创建一个生产者类来发送消息到...
6. **异常处理**:内置异常处理机制,能够捕获并适当地处理RabbitMQ操作过程中可能出现的错误。 **三、使用方法** 1. **引入DLL**:将C# RabbitMQ Helper编译后的DLL文件引入到你的项目中,添加对它的引用。 2. *...
2. **RabbitMQ连接配置**: 在Spring Boot的`application.properties`或`application.yml`中,我们需要配置RabbitMQ服务器的相关信息,包括主机地址、端口、用户名和密码,例如: ```properties spring.rabbitmq....
1. **连接管理**:`RabbitmqUtil`通常包含初始化RabbitMQ连接的方法,如设置服务器地址、端口、用户名和密码。这些参数可以根据项目需求进行配置,确保工具类可以连接到正确的RabbitMQ服务器。 2. **创建通道...
2. **rabbitmq-c库**:`rabbitmq-c`提供了C语言的API,允许开发者连接到RabbitMQ服务器,创建和管理连接、通道、交换机和队列,发布和消费消息。关键函数包括`amqp_new_connection`(创建连接)、`amqp_socket_open`...
这样可以确保在应用生命周期内正确地创建、管理和关闭RabbitMQ连接。 **总结** `RabbitMQDemo.rar`压缩包可能包含了一个C#项目,演示了如何使用`RabbitMQ.Client`或`Wenli.Data.RabbitMQ`库在.NET环境中进行消息...
在C#中,我们可以使用`PooledConnection`类来自定义一个连接池,管理RabbitMQ连接的生命周期。确保在使用完连接后将其归还到池中,而不是立即关闭,这样可以避免不必要的开销。 2. **通道池(Channel Pooling)** ...
同时,确保正确处理连接异常和关闭。 3. **声明交换机和队列**:根据业务需求,声明所需的交换机类型(如Direct、Fanout、Topic或Header)和队列。交换机决定了消息如何路由,而队列则存储待处理的消息。 4. **...
它会创建一个RabbitMQ连接,打开通道,声明交换机,并将消息发布到指定的队列。在实际应用中,生产者通常负责执行业务逻辑后发送消息,比如订单创建、用户注册等事件。 2. ESBTest.RMQ.ConsoleWorker1和ESBTest.RMQ...
10. **示例应用的结构**:"rabbitmqDemo"可能包括多个MFC类,分别负责与RabbitMQ交互的不同方面,例如连接管理、消息发布和消费等。 通过研究这个"rabbitmqdemo"项目,开发者可以了解如何在MFC环境下实现RabbitMQ的...
连接建立后,客户端可以创建通道(Channel),这是RabbitMQ中的一个逻辑连接,用于执行AMQP命令。 2. 创建交换机与队列:客户端可以创建交换机和队列,定义其类型(如direct、topic、headers或fanout)以及相关属性...
- **通道(Channel)**: 通道是RabbitMQ通信的轻量级机制,模拟了网络上的多路复用,允许在一个TCP连接上同时处理多个独立的请求。 3. 使用AMQP客户端库: - 连接:通过`ConnectionFactory`创建连接,然后使用`...