- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RabbitMQ应用实践
易车二手车 杨伟
目录
Rabbitmq介绍
应用实践
运维实践
第一部分:Rabbitmq介绍
开源AMQP实现,Erlang语言编写,支持多种客户端
分布式、高可用、持久化、可靠、安全
支持多协议:AMQP、STOMP、MQTT、HTTP
Rabbitmq主要概念对象:生产者、消费者、交换机、队列
业务解耦:解决多系统、异构系统间的数据交换,解耦生产者和消费者
适用场景:批量数据异步处理、并行任务串行化、高负载任务负载均衡
简要介绍
AMQP工作原理
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议
几个核心概念
颗粒度:
Broker:消息队列服务器实体
vhost:虚拟主机,一个broker里可以开设多个vhost
Exchange:消息交换机
Queue:消息队列载体
消息流转:
Binding:绑定,根据路由规则绑定exchange和queue
Routing Key:路由关键字
Connection:连接
channel:消息通道,每个连接可建立多个channel
关联对象
producer:消息生产者
consumer:消息消费者
交换机类型
Direct?Exchange?– 完全匹配的路由
Topic?Exchange?– 模式匹配路由
Fanout?Exchange?– 广播模式
Headers?exchange –键值对匹配路由
可靠性机制
Message acknowledgment:消息回执
应答机制下:收到回执才删除消息;未收到回执而连接断开,消息会转给其他消费者
应答机制下:忘记回执会导致消息堆积,业务重复处理
采用非应答机制可以提升队列处理效率
Message durability:消息持久化
可以避免绝大部分的消息丢失,如服务重启
采用非持久化机制可以提升队列处理效率
Prefetch count:每次发送给消费者消息数量,默认1,实践采用2
第二部分:部分应用实践
复用connection、复用channel
如果需要可靠业务,需要支持持久化和ack机制
两台虚拟机集群,QPS 5000次/秒
如果希望高吞吐,可以采取非持久化、noack、自动删除机制
两台虚拟机集群测试,QPS 20k次/秒
稳定性保障:
生产者异常保障
消费者异常保障
代码实现需注意细节
生产者面对exchange,消费者面对queue;
一个queue只有一个消费者(可多个副本)进行处理;
命名规划:
exchange:ex_{bizobj}_{usecase}, 其中:ex为前缀,{bizobj}为业务对象(如Car、Dealer),{usecase}为某个业务场景,示例:ex_car_promotion;
routekey:对应于event(事件,某个业务动作),如:置顶(settop)、刷新(refresh)
queue:为方便使用,建议对应于event(采用exchange + event),如:qu_{bizobj}_{usecase}_{event},其中:ex为前缀,{bizobj}为业务对象(如Car、Dealer),{usecase}为某个业务场景,示例:qu_car_promotion_settop;
串行或并行的业务方案:
并行方案:一个事件发生后,多个消费者相互间没有依赖关系,可由exchange分发消息到多个队列,由各队列的消费者并行进行处理;
串行方案:一个事件发生后,多个消费间有先后依赖关系,可以有先执行的消费者处理事件,处理完成后再次发送消息(此时为另外一个event)到exchange,由后续的队列进行处理。
规划
根据不同的业务颗粒度规划
virtual host规划:按平台或系统规划
Exchange规划:按系统规划
队列规划:按模块规划
MQ消费规划:按模块规划
规划
案例:新车源营销
案例:新车源营销
车源营销
置顶:置顶?冻结费用、更新索引?曝光判断?计费
精准:精准?更新索引?点击判断?计费
刷新:刷新?更新索引、计费
发车:发车?计费、自动审核?更新索引
案例:ELK日志平台
案例:ELK日志平台
案例:通知服务
案例:通知服务
第三部分:部分运维实践
运维实践
安装
配置:
服务器配置
集群配置
高可用集群配置
监控
安装Erlang环境、安装RabbitMQ
启动rabbitmq,并验证启动情况:
rabbitmq-server --detached ps aux |grep rabbitmq
如果启用了防火墙的话,开启相关端口
4369 (epmd),
25672 (Erlang distribution)
5672, 5671 (AMQP 0-9-1 withou
文档评论(0)