赞
踩
MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。
优点:
异步通信:消息队列允许多个处理程序并行处理消息,这可以减轻应用程序的负载,提高系统的吞吐量。
可靠性:消息队列通常支持事务性操作,这有助于确保消息的可靠传递,以及在失败时能够进行重试。
解耦:消息队列可以用于将应用程序的不同部分解耦,使它们能够以松散或独立的方式进行通信。
可扩展性:MQ支持在分布式系统中进行扩展,允许系统之间的通信跨越不同的节点和网络。削峰填谷:举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。
缺点:延迟:如果多个消息排队等待处理,消息队列可能会引入延迟。特别是在高并发环境下,这种情况可能会更加明显。
性能:由于消息队列需要维护消息的持久性和可靠性,因此在处理大量消息时可能会面临性能问题。
复杂性:使用消息队列需要一定的技术知识和配置,这可能会增加系统的复杂性。
资源占用:处理大量的消息需要大量的内存和磁盘空间,这可能会对系统资源产生压力。
不支持实时性:消息队列主要用于异步通信,不支持实时性要求较高的场景。
RabbitMQ
是一个开源的消息代理软件,实现了高级消息队列协议(AMQP)。RabbitMQ使用Erlang语言编写,这是一种高性能的编程语言,特别适合于分布式系统的开发。RabbitMQ的核心功能包括消息的发布与订阅、路由、可靠性、安全等。它主要用于实现应用程序之间的异步通信和解耦,允许一个应用程序(生产者)生成消息,而另一个应用程序(消费者)异步地消费这些消息。RabbitMQ支持多种客户端接口,包括Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP和STOMP等,因此可以与多种编程语言和平台集成。
此外,RabbitMQ在易用性、扩展性和高可用性方面表现出色,适用于需要处理大量消息和实现复杂消息路由的应用场景。
1、队列模式
一个发布者发布消息,下面的接收者按队列顺序接收,比如发布了10个消息,两个接收者A,B那就是A,B总共会收到10条消息,不重复。
2、主题模式
对于Topic模式,一个发布者发布消息,有两个接收者A,B来订阅,那么发布了10条消息,A,B各收到10条消息。
3、RabbitMQ的模式
生产者生产消息后不直接直接发到队列中,而是发到一个交换空间:Exchange,Exchange会根据Exchange类型和Routing Key来决定发到哪个队列中,这个讲到发布订阅在详细来看
rabbitmq是erlang语言编写的,安装rabbitmq之前,需要先安装erlang。
- #关闭防火墙
- systemctl stop firewalld
- systemctl disable firewalld
- #安装编译环境
- yum install -y make gcc gcc-c++ m4 openssl openssl-devel ncurses-devel unixODBC unixODBC-devel java java-devel
- #切换到src目录
- cd /usr/local/src
- #下载erlang地址
- https://packagecloud.io/rabbitmq/erlang?page=1
- #curl下载erlang rpm包
- curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
- #更新yum
- yum -y update
- #用yum安装
- sudo yum install erlang socat
- #验证
- erl
(1)、下载rabbitmq
- #导入
- #下载rabbitmq-server rpm包
- wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm
- curl -s https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.5/rabbitmq-server-3.8.5-1.el7.noarch.rpm.sh | sudo bash
-
- #安装rabbitmq
- rpm -ivh rabbitmq-server-3.8.5-1.el7.noarch.rpm
- #设置开机自启动
- systemctl enable rabbitmq-server
- #开启rabbitmq-server服务
- systemctl start rabbitmq-server
- #关闭rabbitmq-server服务
- systemctl stop rabbitmq-server
- #查看状态
- systemctl status rabbitmq-server
- # 停止rabbitmq
- systemctl stop rabbitmq-server
-
- # 停止开启web管理端
- rabbitmq-plugins enable rabbitmq_management
- # 然后启动rabbitmq就可以访问管理页面
- systemctl start rabbitmq-server
- #访问地址 现在访问不了 默认的账号:guest 密码:guest 只能在本地访问 需要添加账号
- ip:15672
-
- #####################
- #如果开启web管理报错则
- #修改/etc/hosts文件底部添加 一行 原有的不要改
- #ip 主机名
- 192.168.91.70 tomcat
- #重启系统 重新关掉防火墙和rabbitmq-server重新执行web端开启命令
- rabbitmq-plugins enable rabbitmq_management
- ########################################
-
- #添加账号设置权限
- #这个是查看rabbitmq下面有多少用户
- rabbitmqctl list_users
- #增加账户admin并在设置admin的密码
- rabbitmqctl add_user admin 密码
- #设置admin的角色为管理员
- rabbitmqctl set_user_tags admin administrator
- #设置admin的权限
- rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
- #修改密码
- rabbitmqctl change_password username password
- #删除用户
- rabbitmqctl delete_user username
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。