分布式架构:一个请求由多个服务(服务或者系统)协同处理完成。
RabbitMQ:消息队列,或者说是一个消息中间键。
MQ功能:
- 削峰:不让系统直接访问系统,而是通过MQ,然后交给MQ去访问系统,使得访问的人员进行排队。(有排队就会导致比较慢,但是安全有次序。)
- 应用解耦:通过队列去访问系统,各个系统之间通过MQ去完成,也就会不会产生过多故障。
- 异步处理:A-B,并不要A收到B的确定消息才会执行操作。
MQ的分类:
-
RabbitMQ: 和spring是一家公司的,使用AMQP(高级消息队列协议)基础上完成的,支持多种语言,缺点是商业版要付费。
-
kafka:为大数据而生,有百万级TPS的,实时计算,吞吐量高,使用在日志采集等方面。缺点是,单机超过64个队列/分区,load会发生明显的飙高现象,队列越多,load越高,发送响应时间越长。消费失败不支持重试,支持消息顺序,但一代代理宕机后,会产生消息乱序,社区更新慢
-
RocketMQ:由阿里开发,金融行业需要,使用java语言实现,参考了kafka,一般常用于订单,交易,充值,流计算,消息推送,日志处理,bingblog分发等场景。
- 优点:单机吞吐10w级别,信息可以做到0丢失,MQ功能比较完善,还是分布式,拓展性号,支持10亿级别的消息堆积,不会因为堆积而导致性能下降。
- 缺点:这次客户端语言不多,目前是java和C++,其中C++还不成熟,社区活跃一般。
初级部分:
RabbitMQ:是一个消息中间件,可以当做一个快递站,快递员发包裹到快递站,然后本地快递员将快递发给用户。
生产者:生产者 – > mq (一个交换机可以绑定多个队列) -> 消费者,一般情况下是一个队列对应一个消费者,如果两个一个队列对应两个消费者,那么就只有一个消费者收到消息,这就想当与只有一个包裹是不可能发给两个人的。
核心部分:
- 简单模式
- 工作模式
- 发布订阅模式
- 路由模式
- 主题模式
- 发布确认模式
connection:publisher/consumer 和 broker之间的TCP连接。
Channel:如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP Connection的开销是巨大的,效率也比较低。channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销。
安装rabbitMQ:
官网:https://www.rabbitmq.com
下载页面:https://www.rabbitmq.com/download.html
我一般使用docker安装
# latest RabbitMQ 3.10
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.10-management
其他安装方式:(手动安装)
-
首先现在linux下的压缩包,或者使用工具将安装包上传到linux系统。
-
安装rabbitMQ的支持依赖
- rpm -ivh erlang-21.3-1.el7.x86_64.rpm
- yml install socat -y
- rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm
-
添加常用命令:
- 添加开机启动chkconfig rabbitmq-server on
- 启动服务
- 找到安装路径
- sbin下的service 里边的rabbitmq-server start /sbin/service rabbitmq-server start
- 查看服务状态/sbin/service rabbitmq-server status
- 停止服务/sbin/service rabbitmq-server stop
- 开启后台web管理插件rabbitmq-plugins enable rabbitmq_management(docker安装的不要这么操作)
- 使用账号访问,一般是账号密码都是guest,当然你必须保证你的端口号开放,如果云服务器的话,15972,注意ip地址,如果有域名的话,那么可以在域名后添加:15672直接访问.
- 如果不能直接访问的话,检查一下防火墙,systemctl stop firewalld,这个命令关闭本次防火墙,systemctl enable firewalld可以下次开机也关闭防火墙,systemctl status firewalld可以查看当前系统防护墙状态
- 添加一个新用户,如果是使用虚拟机的话,一般是不能直接使用guest登录的,当然这个我没碰到过
- 创建一个账号rabbitmqctl add_user 用户名 密码
- 设置用户角色 rabbitmqctl set_user_tags admin administractor
- 设置用户权限
set_permission[-p ]
举例:
rabbitmqctl set_permission -p ” / ” admin “.* ” “.* ” ” .* “用户user_admin具有/vhost1这个vritual host中的所有资源的配置,写,读权限。 - 当前用户和角色
rabbitmqctl list_user
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/197990.html