RabbitMQ 概述

下载安装https://github.com/rabbitmq/rabbitmq-server/releases & https://github.com/erlang/otp/releases

启动:rabbitmq-server.batrabbitmq-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)

 


https://www.rabbitmq.com/tutorials

posted @ 2019-09-13 16:46  江湖小小白  阅读(652)  评论(0)    收藏  举报