柚子快报邀请码778899分享:分布式 初识RabbitMQ

http://yzkb.51969.com/

什么是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登陆进去

设置规则

添加队列设置

模拟发送信息

 

柚子快报邀请码778899分享:分布式 初识RabbitMQ

http://yzkb.51969.com/

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。