RabbitMQ 概述
下载安装:https://github.com/rabbitmq/rabbitmq-server/releases & https://github.com/erlang/otp/releases
启动:rabbitmq-server.bat、rabbitmq-server.bat
title rabbitmq4.0.7 15672 guest cd /d D:\rabbitmq4.0.7 set ERLANG_HOME=D:\erlang27.2.4 set RABBITMQ_BASE=D:\rabbitmq4.0.7\data start cmd /C sbin\rabbitmq-plugins.bat enable rabbitmq_management sbin\rabbitmq-server.bat cmd cd /d D:\rabbitmq4.0.7 set ERLANG_HOME=D:\erlang27.2.4 set RABBITMQ_BASE=D:\rabbitmq4.0.7\data sbin\rabbitmqctl.bat stop
大致工作流程
了解有关 AMQP 1.0 和 AMQP 0-9-1 这两个由 RabbitMQ 实现的核心协议,4.0 中 AMQP 1.0 成为核心协议
消息可靠性
1、确认机制(Confirms)
生产者(Publisher Confirms),通过 channel.confirmSelect() 开启确认模式,异步等待 Broker 返回 Basic.Ack/Basic.Nack
消费者手动确认(Manual Acknowledgments),处理消息后调用 Basic.Ack/Basic.Nack
2、持久化
开启队列持久化(Durable Queues)和消息持久化(Message Durability),将消息写入磁盘
3、集群,用 quorum queues 提供的强一致性
4、用 Firehose Tracer 进行消息全链路追踪
重复消费
消费者在拿到消息后,因为网络或宕机等原因没有发送确认请求
1、业务系统幂等性设计(Designing Data-Intensive Applications),例如基于唯一消息 ID 的幂等处理:String msgId = message.getMessageProperties().getMessageId()
2、消息的 redelivered 属性
死信交换机
满足一定条件的消息会被标记为死信(Dead Letter),例如:消息被消费者拒绝、消息存活时间超过 TTL(Time-To-Live)、消息无法入队(队列大小限制)等
死信消息会被放入死信交换机(Dead Letter Exchange),然后到相应的队列(死信队列)。例如用来实现延迟队列
插件(简化使用):rabbitmq_delayed_message_exchange
消息堆积
1、增加消费者或多线程消费
2、惰性队列(Lazy Queues),即将消息存在磁盘
3、生产者流控(Flow Control)