rabbitmq技术预研

本文详细介绍了RabbitMQ的安装、配置、工作模式以及与SpringBoot的整合,包括消息确认、死信队列和集群部署等内容,旨在为读者提供全面的RabbitMQ技术预研和实践指导。
摘要由CSDN通过智能技术生成

rabbitmq学习

RabbitMQ技术预研

编辑 审核 批准 日期

目录
1 概述 4
1.1 项目背景 4
1.2 项目目标 4
1.3 项目范围 4
1.4 参考资料 4
2 产品介绍 4
2.1 技术简介 4
2.2 功能特点 4
2.3 技术架构 4
2.4 逻辑架构 4
2.5 运行架构 4
2.6 源代码 5
3 安装与维护 5
3.1 安装 5
3.2 维护 5
4 策略设计 5
4.1 验证工具 5
4.2 验证方法 5
4.3 验证流程 5
5 环境设计 5
5.1 网络拓扑图 5
5.2 部署视图 5
5.3 环境参数 5
6 场景设计 6
7 执行计划 6
8 验证结果 6
9 应用实践 6
10 总结 6

1
RabbitMQ的简介与技术架构
1.1RabbitMQ简介(是什么?能干什么?)
简而言之: RabbitMQ是采用Erlang语言实现AMQP(高级消息队列协议)的消息中间件
AMQP协议: AMQP 说到底还是一个通信协议,通信协议都会涉及报文交互,从low-level 举例来说,AMQP 本身是应用层的协议,其填充于TCP 协议层的数据部分。而从high-level 来说, AMQP是通过协议命令进行交互的。AMQP 协议可以看作一系列结构化命令的集合,这里的命令代表一种操作,类似于HTTP 中的方法(GET 、POST 、PUT 、DELETE 等) 。
RabbitMQ的应用场景:
1)异步处理:
场景说明:用户注册后,需要发注册邮件和注册短信。邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功。引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理。不用等到发送邮件或者短信成功后给出响应,再执行下面的操作。提高了响应时间。
2)应用解耦:
场景说明: 双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口. 这样的做法会有些缺点:当库存系统出现故障,订单就会失败。为了解除订单系统和库存系统的耦合,引入消息队列。这样订单系统在用户下单后完成持久化处理,将消息写入消息队列,返回给用户下单成功。库存系统消费消息队列中的消息,进行库操作,就算库存系统出现故障,消息队列也会等到故障恢复后进行可靠投递,不会导致消息丢失。
3)流量削峰:
场景说明:流量削峰一般在秒杀活动中应用广泛,秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在秒杀应用前加入消息队列。
作用:
1.可以控制活动人数,超过此一定阀值的订单直接丢弃。用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直接抛弃用户请求或跳转到错误页面。
2.可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单),秒杀业务根据消息队列中的请求信息,再做后续处理。

1.2系统架构及核心组件
RabbitMQ系统结构如图1.2.1所示

图 1.2.1 RabbitMQ系统结构图
组成部分说明:
Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过滤。
Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。
Producer:消息生产者,即生产方客户端,生产方客户端将消息发送到MQ。
Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
消息发布的流程:
1、生产者和Broker建立TCP连接。
2、生产者和Broker建立通道。
3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发。
4、Exchange将消息转发到指定的Queue(队列)。
接收消息的流程:
1、消费者和Broker建立TCP连接。
2、消费者和Broker建立通道 。
3、消费者监听指定的Queue(队列)。
4、当有消息到达Queue时Broker默认将消息推送给消费者。
5、消费者接收到消息。
2RabbitMQ在Linux系统下的安装
2.1安装Erlang(RabbitMQ的运行环境)
从Erlang Solution安装

添加erlang solutions源

$ wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
$ sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
$ sudo yum install erlang
2.2安装RabbitMQ
先下载rpm:
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
下载完成后安装:
yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm
安装时如果遇到下面的依赖错误
Error: Package: socat-1.7.2.3-1.el6.x86_64 (epel)
Requires: libreadline.so.5()(64bit)
可以尝试先执行
$ sudo yum install socat
关于RabbitMQ的一些基本操作
$ sudo chkconfig rabbitmq-server on # 添加开机启动RabbitMQ服务
$ sudo /sbin/service rabbitmq-server start # 启动服务
$ sudo /sbin/service rabbitmq-server status # 查看服务状态
$ sudo /sbin/service rabbitmq-server stop # 停止服务

查看当前所有用户

$ sudo rabbitmqctl list_users

查看默认guest用户的权限

$ sudo rabbitmqctl list_user_permissions guest
(先不用更改用户权限!!!带//都先不做)
//# 由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 先删掉默认用户
//$ sudo rabbitmqctl delete_user guest
//# 添加新用户
//$ sudo rabbitmqctl add_user [username] [password]
//# 设置用户tag
//$ sudo rabbitmqctl set_user_tags [username] administrator
//# 赋予用户默认vhost的全部操作权限
//$ sudo rabbitmqctl set_permissions -p / [username] “." ".” “.*”

查看用户的权限

$ sudo rabbitmqctl list_user_permissions [username]

查看服务状态

sudo /sbin/service rabbitmq-server status # 查看服务状态

2.3开启web管理RabbitMQ接口
如果只从命令行操作RabbitMQ,多少有点不方便。幸好RabbitMQ自带了web管理界面,只需要启动插件便可以使用。
$ sudo rabbitmq-plugins enable rabbitmq_management
然后通过浏览器访问(只能在本机进行访问,需要加上配置才可以远程连接进行访问)
http://ip:15672
输入用户名和密码访问web管理界面了。
2.4配置RabbitMQ
在/etc/rabbitmq下创建rabbitmq.config文件,编辑文件如下
[{rabbit, [{loopback_users, []}]}].
这里的意思是开放使用rabbitmq管理插件的,当前用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。
保存配置后重启服务:

service rabbitmq-server stop
service

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值