您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > RabbitMQ的实战应用
RabbitMQ应用实践易车二手车杨伟目录•Rabbitmq介绍•应用实践•运维实践第一部分:Rabbitmq介绍•开源AMQP实现,Erlang语言编写,支持多种客户端•分布式、高可用、持久化、可靠、安全•支持多协议:AMQP、STOMP、MQTT、HTTP•Rabbitmq主要概念对象:生产者、消费者、交换机、队列•业务解耦:解决多系统、异构系统间的数据交换,解耦生产者和消费者•适用场景:批量数据异步处理、并行任务串行化、高负载任务负载均衡简要介绍AMQP工作原理•AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议几个核心概念•颗粒度:–Broker:消息队列服务器实体–vhost:虚拟主机,一个broker里可以开设多个vhost–Exchange:消息交换机–Queue:消息队列载体•消息流转:–Binding:绑定,根据路由规则绑定exchange和queue–RoutingKey:路由关键字–Connection:连接–channel:消息通道,每个连接可建立多个channel•关联对象–producer:消息生产者–consumer:消息消费者交换机类型•DirectExchange–完全匹配的路由•TopicExchange–模式匹配路由•FanoutExchange–广播模式•Headersexchange–键值对匹配路由可靠性机制•Messageacknowledgment:消息回执•应答机制下:收到回执才删除消息;未收到回执而连接断开,消息会转给其他消费者•应答机制下:忘记回执会导致消息堆积,业务重复处理•采用非应答机制可以提升队列处理效率•Messagedurability:消息持久化•可以避免绝大部分的消息丢失,如服务重启•采用非持久化机制可以提升队列处理效率•Prefetchcount:每次发送给消费者消息数量,默认1,实践采用2第二部分:部分应用实践•复用connection、复用channel•如果需要可靠业务,需要支持持久化和ack机制–两台虚拟机集群,QPS5000次/秒•如果希望高吞吐,可以采取非持久化、noack、自动删除机制–两台虚拟机集群测试,QPS20k次/秒•稳定性保障:–生产者异常保障–消费者异常保障代码实现需注意细节•生产者面对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,由后续的队列进行处理。规划•根据不同的业务颗粒度规划–virtualhost规划:按平台或系统规划–Exchange规划:按系统规划–队列规划:按模块规划–MQ消费规划:按模块规划规划案例:新车源营销Site:B端营销:精准营销:置顶营销:刷新营销:发车基础服务:RabbitMQ服务:计费服务服务:ES索引维护api:车源发布Site:A端车源管理套餐管理规则管理CRM充值会员管理api:B端api充值Api排期维护api:查询服务Siite:C端易车二手车易车二手车移动站易车二手车AppSite:D端服务数据采集统计ELK日志平台通知服务日志采集案例:新车源营销•车源营销–置顶:置顶冻结费用、更新索引曝光判断计费–精准:精准更新索引点击判断计费–刷新:刷新更新索引、计费–发车:发车计费、自动审核更新索引案例:ELK日志平台业务站点AOP日志拦截IIS日志RabbitMQELK日志系统KibanaElasticSearchLogStash案例:ELK日志平台案例:通知服务业务系统消息服务MQ消息发送分发消息消息内容处理、生成存储处理消息触发通知消息处理服务消息发送服务案例:通知服务第三部分:部分运维实践运维实践•安装•配置:–服务器配置–集群配置–高可用集群配置•监控•安装Erlang环境、安装RabbitMQ•启动rabbitmq,并验证启动情况:rabbitmq-server--detached&psaux|greprabbitmq•如果启用了防火墙的话,开启相关端口4369(epmd),25672(Erlangdistribution)5672,5671(AMQP0-9-1withoutandwithTLS)15672(ifmanagementpluginisenabled)•启用web界面的监控插件:rabbitmq-pluginsenablerabbitmq_management•登录账号密码默认都是guest•添加用户rabbitmqctladd_userrabbitmq123456安装•两个配置文件:–环境变量的配置文件rabbitmq-env.conf•设置rabbitmq的数据存储位置RABBITMQ_MNESIA_BASE=/data/rabbitmq/data•设置rabbitmq的日志存储位置RABBITMQ_LOG_BASE=/data/rabbitmq/log–配置信息文件rabbitmq.config•内存阀值,超过时启动GCvm_memory_high_watermark,0.6•内存阀值,超过阀值时内存数据写到磁盘vm_memory_high_watermark_paging_ratio,0.5•脑裂问题的修复方式:ignore,autoheal,pause_minoritycluster_partition_handling,autoheal•自动加载broker信息{rabbitmq_management,[{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-nPXXXXEWPXODAMMALGXXXX.erlang.cookie–打开端口:25672,4369–加入集群:sudorabbitmqctljoin_cluster--ramrabbit@rabbitmq199–检查集群状态:rabbitmqctlcluster_status–设置镜像队列策略–从集群中分离•在任一节点执行:rabbitmqctlforget_cluster_noderabbit@rabbit1•在分离节点执行:rabbitmqctlreset配置:集群配置Rabbitmq集群监控Rabbitmq集群监控配置:高可用集群配置rabbitmq118rabbitmq147haproxy1+keepalived1haproxy2+keepalived2VIPClientrabbitmq148rabbitmq119基于Haproxy+keepalived+rabbitmq实现集群•Haproxy配置–Haproxy日志配置•安装rsyslog•添加haproxy的log配置:vim/etc/rsyslog.d/haproxy.conf•编辑/etc/sysconfig/rsyslog•创建日志文件并授权touchhaproxy.log–配置防火墙端口:•9188用于haproxy的监控界面•5670用于rabbimq的负载均衡端口–配置haproxy:/etc/haproxy/haproxy.cfg注意:因为要使用tcp的负载,屏蔽掉与http相关的默认配置–启动haproxyhaproxy-f/etc/haproxy/haproxy.cfg–停止haproxykillallhaproxy配置:高可用集群配置•Keepalived配置–VRRP:虚拟路由冗余协议(VirtualRouterRedundancyProtocol)–配置文件位置:/etc/keepalived/keepalived.conf–配置keepalived#因为当前环境中VRRP组播有问题,改为使用单播发送VRRP报文unicast_src_ip192.168.200.200unicast_peer{192.168.200.199}–启动服务:顺序启动启动haproxy:haproxy-f/etc/haproxy/haproxy.cfg启动keeepalived:先启动master节点,后启动BACKUP节点/etc/init.d/keepalivedstart–停止keeepalived服务/etc/init.d/keepalivedstop–检查keeepalived的运行日志,默认keepalived的日志位于/var/log/messagetail-n100/var/log/message配置:高可用集群配置配置:高可用集群配置谢谢
本文标题:RabbitMQ的实战应用
链接地址:https://www.777doc.com/doc-5518133 .html