『亚马逊云科技产品测评』活动征文|基于EC2搭建消息队列RabbitMQ
提示:授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道
文章目录
前言
现在项目对及时性的要求越来越高,HTTP
协议只是一次性的协议,虽然也能通过轮询及时获取,但是却耗费了更多的计算资源,那有没有什么是订阅式的消息呢?不用我们去实施轮询,今天我们要说的MQTT
协议就是一种订阅发布的协议,MQTT
的具体实现有很多,今天我们使用rabbitmq
来测试,rabbitmq
既是队列也可以使用它的router
支持mqtt
,如果你的业务只是少量地方使用即时通信,需要一个简易的消息系统,你可以直接考虑 MQ
的实现, MQ
有很高的吞吐率,具有持久化,还可以横向扩展,总之还不错,用就完了,奥利给!
我们会从rabbitmq
的安装部署到程序的构建使用,欢迎大家一起学习交流!
MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上。 MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
MQTT相关概念
实际上还是 MQ 的那些东西,主要看 MQ
有没有实现 MQTT
模型,懂的随便看看,不懂的先去理解 MQ
- Publisher(发布者):消息的发出者,负责发送消息。
- Subscriber(订阅者):消息的订阅者,负责接收并处理消息。
- Broker(代理):消息代理,位于消息发布者和订阅者之间,各类支持MQTT协议的消息中间件都可以充当。
- Topic(主题):可以理解为消息队列中的路由,订阅者订阅了主题之后,就可以收到发送到该主题的消息。
- Payload(负载);可以理解为发送消息的内容。
- QoS(消息质量):全称Quality of Service,即消息的发送质量,主要有QoS 0、QoS 1、QoS 2三个等级,下面分别介绍下:
- QoS 0(Almost Once):至多一次,只发送一次,会发生消息丢失或重复;
- QoS 1(Atleast Once):至少一次,确保消息到达,但消息重复可能会发生;
- QoS 2(Exactly Once):只有一次,确保消息只到达一次。
安装部署RabbitMQ
我们这里是通过 AWS EC2进行MQ的部署安装的,熟悉AWS的同学可以跳过这步
创建一台EC2实例
登录AWS账号后,在控制台选择 EC2,然后点击启动实例进行配置选择
- 名称:输入 MQ Server
- 操作系统:Amazon Linux
大家根据自己熟悉的操作系统选择即可,我这里平时都是使用 Centos
,所以直接使用了 Amazon Linux
搭建MQ环境
通过实例列表,然后点击操作,点击连接,就可以到连接实例的页面:
可以把用户名改成 root 进行连接,看到这个页面就是连接成功了
安装MQ环境依赖
yum -y install make gcc gcc-c++ m4 ncurses-devel openssl-devel unixODBC-devel
- 安装 Erlang
wget http://erlang.org/download/otp_src_23.0.tar.gz
- 解压Erlang安装包
tar -zxvf otp_src_23.0.tar.gz
- 创建 erlang 文件夹
mkdir /usr/local/erlang
- 编译安装 Erlang
cd otp_src_23.0
./configure --prefix=/usr/local/erlang --without-javac
make && make install
- 设置环境变量
vi /etc/profile
export PATH=$PATH:/usr/local/erlang/bin
source /etc/profile
# 查看版本信息
erl -version
安装RabbitMQ
- 获取mq安装包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.10.7/rabbitmq-server-3.10.7-1.el8.noarch.rpm
- 导入签名密钥
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
- 安装 RabbitMQ Server
yum install rabbitmq-server-3.10.7-1.el8.noarch.rpm
- 设置 RabbitMQ 开机自启动
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
- 创建新用户
rabbitmqctl add_user dev 123456
# 设置为管理员
rabbitmqctl set_user_tags dev administrator
# 赋予管理员账户所有权限
rabbitmqctl set_permissions -p / dev ".*" ".*" ".*"
- 启动web界面
rabbitmq-plugins enable rabbitmq_management
- 使用浏览器访问 http://IP:15672
看到这个界面就是安装成功: