⼿把⼿教你SpringBoot集成消息服务中间件RabbitMQ
⼀,消息服务中间件的概述
1,⼤多应⽤中,可通过消息服务中间件来提升系统异步通信、扩展解耦能⼒。
2,消息服务中有两个概念:消息代理和⽬的地
当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定⽬的地。
3,消息队列主要由两种形式的⽬的地。
(1)队列:点对点消息通信(⼀对⼀)
(2)主题:发布/订阅消息通信(⼀对多)
1,消息队列的应⽤场景:
⼀个⽹站,⽤户需要注册,注册后还需要发送注册邮件,还要发送注册短信,假如每⼀步都需要花费5秒的话,那么注册使⽤同步的⽅式,需要花费15秒,如果使⽤异步的⽅式注册,让注册邮件和注册短信同时进⾏,那么花费10秒。
那么问题来了,哪⾥⽤到了消息服务中间件呢?
⽤户注册信息之后,花费0.5秒的时间把信息写⼊消息中间件,然后提⽰⽤户注册成功,⽤户注册就只花费了5.5秒的时间。
写⼊消息中间件之后就不⽤管了,剩下的就交给消息队列⾃⼰执⾏了。
2,消息服务中间件的作⽤详述
应⽤解耦:
订单系统---------库存系统
订单系统每次减少⼀个库存,都要访问库存系统,告诉他已经卖了⼀单了,库存要减少⼀个。
订单系统----------消息队列-----------库存系统
订单系统减少⼀个库存时,写⼊消息队列,然后库存系统订阅该消息队列,得到订单系统写⼊的信息,然后库存系统⾃⼰减少⼀个库存。
流量削峰:
双⼗⼀那天会同时有超级多的⽤户同时抢购某⼀个东西,⽐如淘宝,那么如果特别多的⽤户同时访问服务器,服务器肯定是受不了的,解决办法就是把接到的请求订单信息写⼊消息队列,然后让服务器订阅该消息队列,⾃⼰取信息,如果请求数量超过了消息队列的上限,那么消息队列会拒收,所以减⼩了服务器的压⼒。springboot是啥
3,消息队列的模式
点对点式:
消息发送消息,消息代理将其放⼊⼀个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列。
消息只有唯⼀的发送者和接受者。
发布订阅式:
发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息。
JMS,JAVA消息服务,基于JVM消息代理的规范,ActiveMQ,HornetMQ是JMS实现。
AMQP,⾼级消息队列协议,也是⼀个消息代理的规范,兼容JMS,RabbitMQ是AMQP的实现。
⼆,RabbitMQ的安装和使⽤
1,下载和安装
在安装RabbitMQ之前,⾸先需要安装ErLang包,因为RabbitMQ是基于ErLang语⾔的。
下载的RabbitMQ安装包和RabbitMQ安装包的版本要⼀致,否则环境会搭建失败,出现很多问题。如果查看对应⼀致的版本?
在RabbitMQ官⽹有和ErLang版本对照表。
本次安装选择在Linux虚拟机进⾏安装,在安装之前要准备三个安装包。
ErLang的 rpm包
RabbitMQ的 rpm包
socat的 rpm包
rabbitmq安装依赖于socat,所以需要下载socat。
下载好之后的rpm包
打开Linux虚拟机,进⼊/usr/local/software⽂件夹,使⽤xftp⼯具把rpm安装包上传到该⽂件夹下。
安装顺序:1:erlang 2:socat(密钥) 3:rabbitmq
⾸先安装erlang的rpm安装包
[fanjiangfeng@localhost software]$ rpm -ivh erlang-18.s.x86_64.rpm
注意⼀点:要切换到root⽤户才有权限安装,否则没有权限。
其次安装socat的rpm安装包(该密钥为RabbitMQ服务所依赖,如果不安装的话,rabbitMQ会安装失败)[root@localhost software]# rpm -ivh socat-1.7.3.2-1.el6.lux.x86_64.rpm
最后安装RabbitMQ的rpm安装包
[root@localhost software]# rpm -ivh rabbitmq-server-3.arch.rpm
安装到此结束。
2,修改配置⽂件
安装完成后,rabbitmq会默认安装到/usr/lib/rabbitmq/lib路径下。
进⼊ebin⽬录,修改配置⽂件rabbit.app。
[root@localhost ebin]# pwd
/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin
vim rabbit.app
到下⾯这个地⽅
修改为
RabbitMQ安装就完成了。
3,命令⾏与管控台-基础操作
rabbitmqctl stop_app 关闭应⽤
rabbitmqctl start_app 开启应⽤
rabbitmqctl status 节点状态
rabbitmqctl add_user username password 添加⽤户
rabbitmqctl list_users 列出所有⽤户
rabbitmqctl delete_user usernmae 删除⽤户
rabbitmqctl clear_permissions -p vhostpath username 清除⽤户权限
rabbitmqctl add_vhost vhostpath 创建虚拟主机
rabbitmqctl list_vhosts 列出所有虚拟主机
rabbitmqctl list_permissions -p vhostpath 列出虚拟主机上所有权限rabbitmqctl delete_vhost vhostpath 删除虚拟主机
rabbitmqctl list_queues 查看所有队列信息
rabbitmqctl -p vhostpath purge_queue blue 清除队列⾥的消息
4,命令⾏与管控台-⾼级操作
rabbitmqctl reset 移除所有数据,要在rabbitmqctl stop_app 之后使⽤rabbitmqctl join_cluster [–ram] 组成集命令
rabbitmqctl cluster_status 查看集状态
5,来些基本操作
⾸先启动rabbitmq服务
[root@localhost software]# rabbitmqctl start_app
异常:Error: unable to connect to node rabbit@localhost: nodedown
如果出现上⾯的异常的话,解决⽅式如下:
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
rabbitmqctl start_app
## 成功启动rabbitmq
## 启动neutrou-server,openstack恢复正常
systemctl start neutron-server.service
基本操作
[root@localhost software]# lsof -i:5672 查看rabbitmq是否启动(此为已启动的状态)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
beam 6172 rabbitmq 48u IPv6 73786 0t0 TCP *:amqp (LISTEN)
[root@localhost software]# rabbitmqctl list_queues 查看消息队列(空,因为刚安装的)
Listing queues ...
[root@localhost software]# rabbitmqctl list_vhosts 查看虚拟主机(空)
Listing vhosts ...
/
[root@localhost software]#
6,管控台
啥是管控台?
说⽩了,命令⾏是命令的⽅式进⾏管理,⽽管控台则是可视化视图的⽅式进⾏管理,当然管控台更⽅便了。只要是rabbitmqctl命令⾏有的,管控台全都有!
进⼊/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/sbin的⽬录
[root@localhost sbin]# ls
rabbitmqctl rabbitmq-defaults rabbitmq-env rabbitmq-plugins rabbitmq-server
运⾏命令查看已安装的插件列表
[root@localhost sbin]# rabbitmq-plugins list
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@localhost
|/
[ ] amqp_client 3.6.5
[ ] cowboy 1.0.3
[ ] cowlib 1.0.1
[ ] mochiweb 2.13.1
[ ] rabbitmq_amqp1_0 3.6.5
[ ] rabbitmq_auth_backend_ldap 3.6.5
运⾏命令启动RabbitMQ的管控台
[root@localhost sbin]# rabbitmq-plugins enable rabbitmq_management
然后管控台就启动了,在浏览器的url地址栏输⼊虚拟机的 ip 和端⼝号为15672,就进⼊了管控台。
默认端⼝号就是15672。
账号密码默认为guest,登录
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论