0


初识RabbitMQ

什么是rabbitmq

RabbitMQ是一个开源的消息代理软件,实现了高级消息队列协议(AMQP)的标准,提供了可靠的消息传递和支持消息的发布与订阅。通过RabbitMQ,可以实现系统之间的解耦合,提高系统的可扩展性和灵活性。其灵活的路由机制、消息持久化、集群和高可用性特性使得RabbitMQ在分布式系统中广泛应用。

rabbitmq优点

  1. 可靠性:RabbitMQ支持消息持久化,即使在消息代理重启后也不会丢失数据。它还提供了消息确认机制,确保消息被正确地发送和接收。
  2. 灵活的路由:RabbitMQ通过交换机和队列的绑定关系,实现了灵活的消息路由规则,可以根据需要将消息发送到指定的队列或多个队列。
  3. 高可用性:RabbitMQ支持集群部署,可以搭建多个节点以实现负载均衡和故障转移,提高系统的可用性和稳定性。
  4. 解耦合:通过引入消息队列,系统各个模块之间可以实现解耦合,提高系统的灵活性和可扩展性,减少模块之间的直接依赖关系。
  5. 流量控制:RabbitMQ提供了各种流量控制机制,可以限制消息的传输速率,避免消息过载导致系统崩溃。

rabbitmq不足

  1. 复杂性:RabbitMQ的配置和管理相对复杂,特别是在集群部署和高可用性设置方面。需要一定的技术知识和经验来正确地配置和运维。
  2. 性能限制:在高负载情况下,RabbitMQ的性能可能会受到限制。如果消息的处理速度无法跟上消息的产生速度,就可能导致消息堆积和延迟增加。
  3. 存储资源需求:为了实现消息的持久化和可靠性,RabbitMQ需要使用硬盘来存储消息。这意味着需要足够的存储资源来应对大量的消息存储需求。
  4. 复杂的错误处理:在使用RabbitMQ时,如果出现错误,如网络故障或消息格式错误,处理起来可能比较复杂,需要进行适当的错误处理和恢复机制。
  5. 依赖性:RabbitMQ作为一个独立的消息代理,需要额外的安装和配置,这增加了系统的依赖性。如果RabbitMQ发生故障或升级,可能会影响整个系统的运行。

与Kafka、ActiveMQ等消息队列系统的对比

  1. 消息传递模式:- RabbitMQ:采用AMQP(Advanced Message Queuing Protocol)作为消息传递协议,支持传统的队列模型和发布/订阅模型。- Kafka:采用发布/订阅模型,将消息以主题(Topic)的形式进行发布,并由多个消费者进行订阅。- ActiveMQ:支持队列和主题两种模式,可以根据需要选择使用。
  2. 可靠性和吞吐量:- RabbitMQ:在单节点部署时,提供较高的可靠性和一致性,适合需要确保每条消息可靠传递的场景。吞吐量适中。- Kafka:以分布式、高吞吐量和持久化为特点,适合处理大量数据流和实时数据管道的场景。- ActiveMQ:吞吐量适中,适合一般的消息传递需求。
  3. 存储方式:- RabbitMQ:默认使用磁盘存储消息,适合对消息进行持久化存储和长期保存。- Kafka:使用日志存储方式,允许高效地追加和读取消息,适合构建实时流处理系统。- ActiveMQ:支持多种存储方式,包括内存、数据库和文件系统等。
  4. 社区支持和成熟度:- RabbitMQ:具有活跃的开发社区和广泛的用户基础,拥有丰富的文档和解决方案。- Kafka:由Apache基金会维护,有着庞大的社区支持和活跃的开发生态系统。- ActiveMQ:也是一个成熟的开源项目,有着丰富的功能和广泛的应用案例。

搭建rabbitmq

  1. 传入指定的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登陆进去

设置规则

添加队列设置

模拟发送信息

标签: rabbitmq 分布式

本文转载自: https://blog.csdn.net/weixin_67363416/article/details/136769720
版权归原作者 ァ霖 所有, 如有侵权,请联系我们删除。

“初识RabbitMQ”的评论:

还没有评论