文章目录
文章目录
消息服务
服务部署
RabbitMQ是目前使用广泛的消息队列中间件。当前使用的版本为3.7.9
Erlang
有两种安装Erlang的方式。一种为安装RabbitMQ专属Erlang,只包含了RabbitMQ所需要的组件,由RabbitMQ团队提供;另一种为安装完整版本的Erlang。这里采用第一种方案
创建仓库文件
sudo vim /etc/yum.repos.d/rabbitmq-erlang.repo
erlang 21.x,选择bintray仓库,复制内容如下
6.X
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/6
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
7.X
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
最后执行安装命令
sudo yum install erlang
RabbitMQ
导入数据签名
sudo rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
创建仓库文件
sudo vim /etc/yum.repos.d/rabbitmq.repo
rqbbitmq 3.7.x,选择bintray仓库,复制内容如下
6.X
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/6/
gpgcheck=0
repo_gpgcheck=0
enabled=1
7.X
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
最后执行安装命令
sudo yum install rabbitmq-server
设置开机自启动
sudo chkconfig rabbitmq-server on
启动服务
sudo service rabbitmq-server start
配置
开启web管理插件
sudo rabbitmq-plugins enable rabbitmq_management
从3.3.1开始,guest用户只能用于本机访问。如果想在其它服务器访问web管理,一种方式为添加新用户;一种方式为在配置文件中修改guest访问权限。这里采用第一种方案
sudo rabbitmqctl add_user fsl fsl
sudo rabbitmqctl set_user_tags fsl administrator
sudo rabbitmqctl set_permissions -p / fsl ".*" ".*" ".*"
为了配合nginx的转发需求,需为web管理的地址添加前置路径
sudo cp /usr/share/doc/rabbitmq-server-3.7.10/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
sudo vim /etc/rabbitmq/rabbitmq.config
添加path_prefix配置
[
%% ...
{rabbitmq_management,
[{path_prefix, "/mq"}]},
%% ...
].
参考
Installing on RPM-based Linux (RHEL, CentOS, Fedora, openSUSE)
服务规范
队列选型
RabbitMQ官方支持以下五种队列类型。本平台主要采用主题模式。
队列名称 | 队列模型 | 适用 |
---|---|---|
简单队列 | ![]() |
否 |
工作队列 | ![]() |
否 |
发布/订阅模式 | ![]() |
是 |
路由模式 | ![]() |
是 |
主题模式 | ![]() |
是 |
运行环境
对于生产者,将消息发送至不同环境的交换机。对于消费者,绑定不同的环境的队列接收消息
环境类型 | 服务地址 | 交换机名称 | 队列名称 | 队列描述 |
---|---|---|---|---|
开发环境 | 172.16.20.121 | exchange.topic.dev | queue.portal.dev | 门户开发环境队列 |
queue.ams.dev | 资产开发环境队列 | |||
综测环境 | 172.16.20.121 | exchange.topic.sit | queue.portal.sit | 门户综测环境队列 |
queue.ams.sit | 资产综测环境队列 | |||
业测环境 | 172.26.150.148 | exchange.topic.uat | queue.portal.uat | 门户业测环境队列 |
queue.ams.uat | 资产业测环境队列 | |||
正式环境 | 172.26.150.160 | exchange.topic.prod | queue.portal.prod | 门户正式环境队列 |
queue.ams.prod | 资产正式环境队列 |
命名规则
类型 | 命名规范 | 示例 | 说明 |
---|---|---|---|
消息 | 公司.主题.数据 | fsl.hr.org | FSL人事领域的部门数据 |
路由键 | 公司.主题.数据.目标系统 | fsl.hr.org.portal | 点对点,将FSL的HR数据的组织数据发送至个人门户 |
路由键 | 公司.主题.数据.* | fsl.sys.dict.* | 广播,将FSL的数据字典数据发送至所有系统 |
交换机 | exchange.类型.环境 | exchange.topic.dev | 开发环境交换机 |
队列 | queue.系统.环境 | queue.portal.sit | 门户综测队列 |
绑定键 | 公司.主题.数据.目标系统 | fsl.hr.org.portal | 点对点,个人门户接收FSL的HR数据的组织数据 |
绑定键 | #.目标系统 | #.portal | 点对点,个人门户接收所有发送到本系统的数据 |
绑定键 | #.数据.* | #.dict.* | 广播,个人门户接收所有的数据字典数据 |
数据持久化
类型 | 属性 | 描述 |
---|---|---|
消息持久化 | MessageProperties.PERSISTENT_TEXT_PLAIN | 确保消息始终能从硬盘恢复 |
交换机持久化 | durable:true | 确保交换机始终能从硬盘恢复 |
队列持久化 | durable:true | 确保队列始终能从硬盘恢复 |
数据可靠性
类型 | 属性 | 描述 |
---|---|---|
生产者确认 | confirmSelect->waitForConfirms | 只有成功发送并返回后,才会认为消息发送成功 |
消费者确认 | autoAck=false->basicAck | 只有成功消费并返回后,才会认为消息消费成功 |
ack机制图示
典型场景
应用场景 | 持久化 | 可靠性 |
---|---|---|
数据同步 | 是 | 是 |
服务调用 | 是 | 是 |
日志存储 | 否 | 否 |
通知通讯 | 否 | 否 |
服务目录
LCP平台
消费者
名称 | 消息key |
---|---|
组织 | hr_org |
部门 | hr_dept |
岗位 | hr_post |
员工 | hr_personnel |
员工工作关系 | hr_psnjob |
外部组织 | carrier_org |
外部部门 | carrier_dept |
外部岗位 | carrier_post |
外部员工 | carrier_personnel |
外部员工工作关系 | carrier_psnjob |
数据字典类型 | dict_enumtype |
数据字典 | dict_enum |
账号 | fsl.portal.user |
门户
生产者
名称 | 消息key | 路由键 |
---|---|---|
账号 | fsl.portal.user | fsl.portal.user.* |