什么是rabbitmq
RabbitMQ是一个开源的消息代理软件,实现了高级消息队列协议(AMQP)的标准,提供了可靠的消息传递和支持消息的发布与订阅。通过RabbitMQ,可以实现系统之间的解耦合,提高系统的可扩展性和灵活性。其灵活的路由机制、消息持久化、集群和高可用性特性使得RabbitMQ在分布式系统中广泛应用。
rabbitmq优点
- 可靠性:RabbitMQ支持消息持久化,即使在消息代理重启后也不会丢失数据。它还提供了消息确认机制,确保消息被正确地发送和接收。
- 灵活的路由:RabbitMQ通过交换机和队列的绑定关系,实现了灵活的消息路由规则,可以根据需要将消息发送到指定的队列或多个队列。
- 高可用性:RabbitMQ支持集群部署,可以搭建多个节点以实现负载均衡和故障转移,提高系统的可用性和稳定性。
- 解耦合:通过引入消息队列,系统各个模块之间可以实现解耦合,提高系统的灵活性和可扩展性,减少模块之间的直接依赖关系。
- 流量控制:RabbitMQ提供了各种流量控制机制,可以限制消息的传输速率,避免消息过载导致系统崩溃。
rabbitmq不足
- 复杂性:RabbitMQ的配置和管理相对复杂,特别是在集群部署和高可用性设置方面。需要一定的技术知识和经验来正确地配置和运维。
- 性能限制:在高负载情况下,RabbitMQ的性能可能会受到限制。如果消息的处理速度无法跟上消息的产生速度,就可能导致消息堆积和延迟增加。
- 存储资源需求:为了实现消息的持久化和可靠性,RabbitMQ需要使用硬盘来存储消息。这意味着需要足够的存储资源来应对大量的消息存储需求。
- 复杂的错误处理:在使用RabbitMQ时,如果出现错误,如网络故障或消息格式错误,处理起来可能比较复杂,需要进行适当的错误处理和恢复机制。
- 依赖性:RabbitMQ作为一个独立的消息代理,需要额外的安装和配置,这增加了系统的依赖性。如果RabbitMQ发生故障或升级,可能会影响整个系统的运行。
与Kafka、ActiveMQ等消息队列系统的对比
- 消息传递模式:- RabbitMQ:采用AMQP(Advanced Message Queuing Protocol)作为消息传递协议,支持传统的队列模型和发布/订阅模型。- Kafka:采用发布/订阅模型,将消息以主题(Topic)的形式进行发布,并由多个消费者进行订阅。- ActiveMQ:支持队列和主题两种模式,可以根据需要选择使用。
- 可靠性和吞吐量:- RabbitMQ:在单节点部署时,提供较高的可靠性和一致性,适合需要确保每条消息可靠传递的场景。吞吐量适中。- Kafka:以分布式、高吞吐量和持久化为特点,适合处理大量数据流和实时数据管道的场景。- ActiveMQ:吞吐量适中,适合一般的消息传递需求。
- 存储方式:- RabbitMQ:默认使用磁盘存储消息,适合对消息进行持久化存储和长期保存。- Kafka:使用日志存储方式,允许高效地追加和读取消息,适合构建实时流处理系统。- ActiveMQ:支持多种存储方式,包括内存、数据库和文件系统等。
- 社区支持和成熟度:- RabbitMQ:具有活跃的开发社区和广泛的用户基础,拥有丰富的文档和解决方案。- Kafka:由Apache基金会维护,有着庞大的社区支持和活跃的开发生态系统。- ActiveMQ:也是一个成熟的开源项目,有着丰富的功能和广泛的应用案例。
搭建rabbitmq
传入指定的repo文件进yum.Repo.d中 ,网络差可以设置gpgcheck=0
安装relang指定环境;
[root@localhost ~]# dnf -y install erlang
[root@localhost yum.repos.d]# erl 验证能否进去
[root@localhost ~]# yum -y install socat 提供端口转发,网络中继。
[root@localhost ~]# yum -y install rabbitmq-server.noarch
[root@localhost yum.repos.d]# rabbitmqctl version 查看rabbitmq版本号
修改三台主机名,并且编写hosts文件,并重启系统。
2.启动服务,设置开机自启
[root@node01 ~]# systemctl start rabbitmq-server.service
[root@node01 ~]# systemctl enable rabbitmq-server.service
3.查看第一台的erlang的cookie值 保证3个cookie值一样
[root@node01 ~]# cat /var/lib/rabbitmq/.erlang.cookie
复制第一台的cookie值,去其他主机上添加;
[root@node02 ~]# echo "DZTTWHNPFIDJJTHKTLYI" > /var/lib/rabbitmq/.erlang.cookie
由于后面修改cookie值,需重启主机
4.放行通行端口; 4369 erlang通信端口
firewall-cmd --add-port=5762/tcp
firewall-cmd --add-port=4369/tcp
firewall-cmd --add-port=15762/tcp
firewall-cmd --add-port=25762/tcp
firewall-cmd --add-port=25762/tcp --permanent
firewall-cmd --add-port=5762/tcp --permanent
firewall-cmd --add-port=15762/tcp --permanent
firewall-cmd --add-port=4369/tcp --permanent
setenforce 0
5.在第二台第三台上;
[root@node03 ~]# rabbitmqctl stop_app 停止原本的集群服务
[root@node02 ~]# rabbitmqctl join_cluster rabbit@node01 --ram 加入node01集群
[root@node02 ~]# rabbitmqctl start_app 启动集群服务
第一台上查看信息;
[root@node01 ~]# rabbitmqctl cluster_status
防止认知错误,每次操作重启app集群服务
停止节点运行:
rabbitmqctl stop
移除node02节点:
rabbitmqctl forget_cluster_node rabbit@node02
node01上查看:
6.手动清除被删除的节点的集群信息
[root@node02 ~]# cd /var/lib/rabbitmq/mnesia/
[root@node02 mnesia]# rm rf *
加入节点同上
7.开启图形化管理界面;
[root@node03 ~]# rabbitmq-plugins enable rabbitmq_management
删除本来的访客用户;
[root@node01 ~]# rabbitmqctl delete_user guest
设置用户密码;
[root@node01 ~]# rabbitmqctl add_user root 123.com
设置权限;
[root@node01 ~]# rabbitmqctl set_user_tags root admininstrator
登录192.168.20.132:15762登陆进去
设置规则
添加队列设置
模拟发送信息
版权归原作者 ァ霖 所有, 如有侵权,请联系我们删除。