消息中间件原理及Linux环境下消息中间件RabbitMQ的安装配置

一.消息中间件原理简介:

1.什么是消息队列?
消息队列,一般我们会简称它为MQ(Message Queue),先看队列Queue,这是一种先进先出的数据结构,一种只允许在一端进行插入,在另一端进行删除的线性表结构。运行插入的一端叫队尾(rear),允许删除的一端叫队头(font)。
在这里插入图片描述
消息队列可以简单理解为:把要传输的数据放在队列中
在这里插入图片描述
其中:
生产者:把数据放到消息队列;
消费者:从消息队列里边取数据。

2.为什么要用消息队列?

  1. 解耦
    在这里插入图片描述

如图所示,将系统A的userId写到消息队列中,这样系统A就不用经常改动了。

  • 系统A只负责把数据写到队列中,谁想要或不想要这个数据(消息),系统A一点都不关心。
  • 即便现在系统D不想要userId这个数据了,系统B又突然想要userId这个数据了,都跟系统A无关,系统A一点代码都不用改。
  • 系统D拿userId不再经过系统A,而是从消息队列里边拿。系统D即便挂了或者请求超时,都跟系统A无关,只跟消息队列有关。

这样一来,系统A与系统B、C、D都解耦了。

  1. 异步方式,提高系统吞吐量

同步调用时:假设系统A运算出userId具体的值需要50ms,调用系统B的接口需要300ms,调用系统C的接口需要300ms,调用系统D的接口需要300ms。那么这次请求就需要50+300+300+300=950ms。

那么此时,为了提高用户体验和吞吐量,其实可以异步地调用系统B、C、D的接口:
在这里插入图片描述

系统A执行完了以后,将userId写到消息队列中,然后就直接返回了(至于其他的操作,则异步处理)。

本来整个请求需要用950ms(同步) 现在将调用其他系统接口异步化,只需要A运算50ms+消息发送50ms=100ms(异步)

  1. 削峰/限流
    在这里插入图片描述

服务器,Redis,MySQL各自的承受能力都不一样,如果全部流量照单全收肯定有问题,因此将把请求放到队列里面,然后至于每秒消费多少请求,就看自己的服务器处理能力,这样可能会比正常时候慢一点,但是不至于服务器挂掉,等到流量高峰过去,就恢复正常了。

二.安装RabbitMQ:

1.安装erlang语言环境:

  • 设置安装源:vim /etc/yum.repos.d/rabbitmq-erlang.repo
  • 输入如下erlang 22.X安装源(centos7上):
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/22/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
  • 执行yum安装:yum -y install erlang
    在这里插入图片描述

2.安装RabbitMQ-Server

  • 下载相应的Rabbit-Server版本:Rabbit-Server3.8.9
  • 使用xftp将Rabbit-Server包上传到/usr/local目录下:
    在这里插入图片描述
  • 采用yum命令安装:yum install rabbitmq-server-3.8.9-1.el7.noarch.rpm
    在这里插入图片描述
    3.启动/停止/重启/查看RabbitMQ命令:

service rabbitmq-server start 
service rabbitmq-server stop 
service rabbitmq-server restart
service rabbitmq-server status

4.配置用户信息,允许远程访问:

  • 进入/etc/rabbitmq目录下:cd /etc/rabbitmq
  • vim rabbitmq.config并输入在这里插入图片描述

5.开启web界面管理工具,并重启RabbitMQ:

  • 启动rabbitmq的管理插件:rabbitmq-plugins enable rabbitmq_management
  • Rabbit重启命令:service rabbitmq-server restart
    在这里插入图片描述

6.修改防火墙配置文件,开放15672和5672端口:

  • 网页访问mq管理系统需要的端口:15672
  • Java程序连接mq时需要的端口:5672

7.后台管理命令:

rabbitmq-plugins enable rabbitmq_management       // 启动插件
rabbitmq-plugins disable rabbitmq_management      // 禁用插件
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq      // 授权
rabbitmqctl add_user admin admin                  // 后面两个参数为 用户 密码
rabbitmqctl set_user_tags admin administrator      // 修改用户角色
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*' // 添加权限
​
新建用户:rabbitmqctl add_user username passwd
删除用户:rabbitmqctl delete_user username
改密码: rabbimqctl change_password {username} {newpassword}
设置用户角色:rabbitmqctl set_user_tags {username} {tag ...}
查看用户:rabbitmqctl lsit_users

8.通过浏览器访问管理界面:http://ip:15672
账号和密码默认都是guest
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值