定义
RabbitMQ:顾名思义就是消息队列,本质是队列,只不过队列中存放的是message,是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)
队列的特点:FIFO先进先出,消息之间可以相互通讯,如A给B发信息,那么A就是上游,B就是下游
为什么要用MQ
1 流量削峰:
场景:例如用户下订单,假如订单系统的并发最多能承受5000次/s ,当流量超过这个临界值时就会导致订单系统宕机,这种情况就可以通过MQ,将消息存到队列中
2 应用解耦
我们A系统将产生的数据发入消息队列中,其它的系统再去消息队列来进行消费,减少了系统间的耦合,这样还有一个好处就是如果一旦A系统出现了故障,其他服务直接来调用A也会导致调用失败。而直接从队列中获取数据这样就能避免这样的问题
3 异步处理
有些服务间的调用是异步的,例如A调用B,B需要花费很长时间执行,但是A需要知道B什么时候能执行完,以前一般有2种处理方式,A过一段调用B的的查询Api,或者A提供一个Callback(回调)Api,B执行完之后调用Api通知A,但是这两种方式都不是很优雅。🔥使用消息队列后,只需要监听B处理完的消息,当B执行完成之后发消息MQ,MQ将消息转发给A服务🔥
MQ的分类
1 ActiveMQ:
JMS(Java Message Service)JAVA消息服务: 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现
2 Kafka:谈到大数据中的消息传递则绕不开Kafka,kafaka是分布式的,为大数据而生的消息中间件,目前使用的比较多,最大优点就是高吞吐量、时效ms级可用性非常高,kafka web管理界面kafaka-manager,在日志领域比较成熟
3 RoketMQ:阿里巴巴开源消息中间件,用java实现,设计时参考了Kafaka
RabbitMQ的优点
可复用的企业级消息系统,是当前最主流的消息中间件之一,性能较好,吞吐量达到万级
RabbitMQ的安装
Docker的安装方式后续再拓展
1 官网下载页面:
https://www.rabbitmq.com/download.html
Erlang-rpm下载地址:https://github.com/rabbitmq/erlang-rpm/releases
1 上传rabbitMQ到/usr/local/rabbitMQ路径下
2 安装文件顺序:
1 rpm -ivh erlang-21.2.6-1.el7.x86_64.rpm
2 yum install socat -y
3 rpm -ivh rabbitmq-server-3.7.13-1.el7.noarch.rpm
常用命令
1 添加开机启动rabbitMQ的命令
chkconfig rabbitmq-server on
2 启动服务:/sbin/service rabbitmq-server start
3 查看服务状态:/sbin/service rabbitmq-server status
4 停止服务:/sbin/service rabbitmq-server stop
安装web界面插件
-
安装插件之前需要先关闭服务器:/sbin/service rabbitmq-server stop
-
安装插件:rabbitmq-plugins enable rabbitmq_management
-
启动服务
访问rabbitmq页面:http://192.168.1.116:15672/
如果无法访问需要关闭防火墙,命令为: systemctl stop firewalld
添加用户并设置权限
rabbitmqctl add_user admin abc789(创建一个admin用户密码为abc789)
删除用户: rabbitmqctl delete_user user
改密码: rabbimqctl change_password
设置用户角色:
rabbitmqctl set_user_tags admin administrator
设置权限格式:
rabbitmqctl [-n
命令为:rabbitmqctl set_permissions -p "/" admin "." "." ".*"
查看所有用户:rabbitmqctl list_users
每个visual host代表着MQ的一个库,您可以自己来添加不同的visual host库,不同的库中的交换机和队列是不一样的
java操作MQ
以上安装好了MQ之后,接下来写如何通过java来往队列中放消息(生产者)然后转发给消费者
评论区