RabbitMQ的实战应用_第1页
RabbitMQ的实战应用_第2页
RabbitMQ的实战应用_第3页
RabbitMQ的实战应用_第4页
RabbitMQ的实战应用_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、RabbitMQ应用实践易车二手车 杨伟目录 Rabbitmq介绍 应用实践 运维实践第一部分:Rabbitmq介绍开源AMQP实现,Erlang语言编写,支持多种客户端分布式、高可用、持久化、可靠、安全支持多协议:AMQP、STOMP、MQTT、HTTPRabbitmq主要概念对象:生产者、消费者、交换机、队列业务解耦:解决多系统、异构系统间的数据交换,解耦生产者和消费者适用场景:批量数据异步处理、并行任务串行化、高负载任务负载均衡简要介绍AMQP工作原理AMQP,即Advanced Message Queuing Protocol,高级消息队列协议几个核心概念颗粒度:Broker:消息队列

2、服务器实体vhost:虚拟主机,一个broker里可以开设多个vhostExchange:消息交换机Queue:消息队列载体消息流转:Binding:绑定,根据路由规则绑定exchange和queueRouting Key:路由关键字Connection:连接channel:消息通道,每个连接可建立多个channel关联对象producer:消息生产者consumer:消息消费者交换机类型Direct Exchange 完全匹配的路由Topic Exchange 模式匹配路由Fanout Exchange 广播模式Headers exchange 键值对匹配路由可靠性机制Message ack

3、nowledgment:消息回执应答机制下:收到回执才删除消息;未收到回执而连接断开,消息会转给其他消费者应答机制下:忘记回执会导致消息堆积,业务重复处理采用非应答机制可以提升队列处理效率Message durability:消息持久化可以避免绝大部分的消息丢失,如服务重启采用非持久化机制可以提升队列处理效率Prefetch count:每次发送给消费者消息数量,默认1,实践采用2第二部分:部分应用实践复用connection、复用channel如果需要可靠业务,需要支持持久化和ack机制两台虚拟机集群,QPS 5000次/秒如果希望高吞吐,可以采取非持久化、noack、自动删除机制两台虚拟机

4、集群测试,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_bi

5、zobj_usecase_event,其中:ex为前缀,bizobj为业务对象(如Car、Dealer),usecase为某个业务场景,示例:qu_car_promotion_settop;串行或并行的业务方案:并行方案:一个事件发生后,多个消费者相互间没有依赖关系,可由exchange分发消息到多个队列,由各队列的消费者并行进行处理;串行方案:一个事件发生后,多个消费间有先后依赖关系,可以有先执行的消费者处理事件,处理完成后再次发送消息(此时为另外一个event)到exchange,由后续的队列进行处理。规划根据不同的业务颗粒度规划 virtual host规划:按平台或系统规划 Excha

6、nge规划:按系统规划 队列规划:按模块规划 MQ消费规划:按模块规划规划 案例:新车源营销Site:B端营销:精准营销:置顶营销:刷新营销:发车基础服务:RabbitMQ服务:计费服务服务:ES索引维护api:车源发布Site:A端车源管理套餐管理规则管理CRM充值会员管理api:B端api充值Api排期维护api:查询服务Siite:C端易车二手车易车二手车移动站易车二手车AppSite:D端服务数据采集统计ELK日志平台通知服务日志采集案例:新车源营销车源营销置顶:置顶冻结费用、更新索引曝光判断计费精准:精准更新索引点击判断计费刷新:刷新更新索引、计费发车:发车计费、自动审核更新索引案例

7、:ELK日志平台业务站点AOP日志拦截IIS日志RabbitMQELK日志系统KibanaElasticSearchLogStash案例:ELK日志平台案例:通知服务业务系统消息服务MQ消息发送分发消息消息内容处理、生成存储处理消息触发通知消息处理服务消息发送服务案例:通知服务第三部分:部分运维实践运维实践安装配置:服务器配置集群配置高可用集群配置监控安装Erlang环境、安装RabbitMQ 启动rabbitmq,并验证启动情况:rabbitmq-server -detached &ps aux |grep rabbitmq 如果启用了防火墙的话,开启相关端口4369 (epmd),2567

8、2 (Erlang distribution)5672, 5671 (AMQP 0-9-1 without and with TLS)15672 (if management plugin is enabled)启用web界面的监控插件: rabbitmq-plugins enable rabbitmq_management登录账号密码默认都是 guest添加用户rabbitmqctl add_user rabbitmq 123456 安装两个配置文件:环境变量的配置文件 rabbitmq-env.conf 设置rabbitmq的数据存储位置RABBITMQ_MNESIA_BASE=/data

9、/rabbitmq/data 设置rabbitmq的日志存储位置RABBITMQ_LOG_BASE=/data/rabbitmq/log配置信息文件 rabbitmq.config 内存阀值,超过时启动GC vm_memory_high_watermark, 0.6 内存阀值,超过阀值时内存数据写到磁盘vm_memory_high_watermark_paging_ratio, 0.5 脑裂问题的修复方式: ignore, autoheal, pause_minoritycluster_partition_handling, autoheal 自动加载broker信息rabbitmq_mana

10、gement, load_definitions, /etc/rabbitmq/rabbitmq_broker.json配置:服务配置日志切分:编写shell文件:/opt/scripts/rabbitmq_split_log.sh定时执行执行 crontab e,加入定时任务配置:服务配置修改hostname:修改 /etc/sysconfig/network设置.erlang.cookie,基于Erlang的集群来实现cd /var/lib/rabbitmq/ echo -n PXXXXEWPXODAMMALGXXXX .erlang.cookie打开端口: 25672,4369加入集群:

11、sudo rabbitmqctl join_cluster -ram rabbitrabbitmq199检查集群状态:rabbitmqctl cluster_status设置镜像队列策略从集群中分离在任一节点执行:rabbitmqctl forget_cluster_node rabbitrabbit1在分离节点执行:rabbitmqctl reset配置:集群配置Rabbitmq集群监控Rabbitmq集群监控配置:高可用集群配置rabbitmq118rabbitmq147haproxy1+keepalived1haproxy2+keepalived2VIPClientrabbitmq148

12、rabbitmq119基于Haproxy+keepalived+rabbitmq实现集群Haproxy配置Haproxy日志配置安装rsyslog添加haproxy的log配置: vim /etc/rsyslog.d/haproxy.conf编辑/etc/sysconfig/rsyslog创建日志文件并授权 touch haproxy.log配置防火墙端口:9188 用于haproxy的监控界面5670 用于rabbimq的负载均衡端口配置haproxy: /etc/haproxy/haproxy.cfg注意:因为要使用tcp的负载,屏蔽掉与http相关的默认配置启动haproxyhaprox

13、y -f /etc/haproxy/haproxy.cfg停止haproxykillall haproxy配置:高可用集群配置Keepalived配置VRRP:虚拟路由冗余协议(Virtual Router Redundancy Protocol)配置文件位置:/etc/keepalived/keepalived.conf配置keepalived# 因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文unicast_src_ip 00unicast_peer 99启动服务:顺序启动启动haproxy: haproxy -f /etc/haproxy/haproxy.cfg启动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论