一、基本介绍
- RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲(削峰填谷),消息分发的作用。
- 消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC的调用等等。
- RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。
- AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
- RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
二、工作模式:
备注:P=发送者、X=交换机、红色长方形=队列、C=消费者
1、简单模式
2、工作模式
3、发布/订阅模式
4、路由模式(全匹配)
5、主题模式(规则匹配)
6、RPC
三、确认机制
1、事物确认机制:通过事物控制,是否成功,失败则会滚
2、confirm确认机制-同步:串行实现单个或者多个确认
2、confirm确认机制-异步:通过回调实现确认
四、死信队列
1、介绍:过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取;过了之后消息将自动被删除。Rabbit可以对消息和队列设置TTL。
2、设置队列参数信息(过期时间、死信队列)
3、通过代码实现
创建队列时:
发送消息时:
五、内存磁盘监控
1、磁盘预警
概述
- 当磁盘的剩余空间低于确定的阈值时, Rabbits同样会阻塞生产者,这样可以避免因非持久化的消息持续换页而耗尽
磁盘空间导致服务器崩溃 - 默认情况下:磁盘预警为50MB的时候会进行预警。表示当前磁盘空间第50MB的时候会阻塞生产者并且停止内存消
息换页到磁盘的过程 - 这个阈值可以减小,但是不能完全的消除因磁盘耗尽而导致崩溃的可能性。比如在两次磁盘空间的检查空隙内
次检查是:60MB,第二检查可能就是1MB就会出现警告。
设置预警
2、基本介绍
- 默认内存为机器内存的0.4
- 内存推荐设置在0.4-0.7区间
- 默认小于磁盘大小警告50
3、设置内存大小
使用命令修改
- 设置内存大小(相对):rabbitmqctl set_vm_memory_high_watermark 50MB
- 设置内存大小(绝对):rabbitmqctl set_vm_memory_high_watermark absolute 50MB
修改配置文件
4、内存换页
概述
- 在某个 Broke节点及内存阻塞生产者之前,它会尝试将队列中的消思换页到磁盘以释放内存空间,持久化和非持久化的消息都会写入磁盘中,其中持久化的消息本身就在磁盘中有一个副本,所以在转移的过程中持久化的消息会先从内存中消除掉。
- 默认情况下,内存到达的阈值是50%时就会换页处理。也就是说,在默认情况下该内存的阈值是0.4的情况下,当内存超过0.4*0.5=0.2时,会进行换页动作