RabbitMQ作用概括:应用接口,异步处理,流量削峰,消息通讯,远程调用
答:服务器load高时 可以暂时做消息积压 或者可以丢弃消息
生产者:产生数据
交换机:决定消息如何处理【1.发送指定队列 2.发送多个队列 3.丢弃消息】
队列:消息缓冲区
消费者:处理数据
简单收发没有持久化 没有消息队列共享。
队列共享:已有任务的消费者不再接受消息(在消费者中通过channel.basicQos(1))来开启
可持久化:生产者绑定队列时,生产者发布消息时声明消息和队列都是持久的。
通过申明指定类型的exchange发布消息路由到队列上共享消费,消费者通道绑定exchange和队列
绑定redirect交换机后,生产者发布消息携带路由键到交换机。
消费者定义redirect交换机,将队列通过bind与交换机、路由键绑定
单个维度binding,例如级别或者类型。
绑定topic交换机后,生产者发布消息携带路由键到交换机。
消费者定义topic交换机,将队列通过bind与交换机、路由键绑定
支持多个维度binging。路由键上限255个字节为限,多个维度之间以.隔开。
远程调用,客户端调用之后需要阻塞等待服务端的响应。
远程调用需要做一下几点:
1.消息与标识的对应,消息携带回调队列信息
2.消费者处理之后,回传消息到回调队列【消费者只ack单个消息】
3.生产者接受来自回调队列的消息,检查消息与标识是否对应,确认之后通知回调队列
发布确认主要有以下三个类型:
1.individual 单个消息确认
2.batch 批量确认
3.Asynchronously异步确认
发布确认是通道级别的操作,使用api channel.confirmSelect()开启,通过在通道上注册监听者来做两件事情
1:ack消息的确认【包括清理标识和消息之间的对应关系】
2:nack消息的重发【包括记录异常日志等】
目的: 发布确认确保服务器成功接收并处理 消费确认告知服务器消费者已经成功处理 可以从队列中移除消息 重要性:发布确认避免消息丢失 消费确认避免多次消费,确保队列消息数量不会无限增长
1、单个确认 2、批量确认 3、异步确认 三种模式均需在通道上注册确认监 听器 对确认成功和确认失败的消息 做标记和重发的逻辑
1、自动确认 2、手动确认(同步或异步。异步有可能由于发送确认步骤故障重复消费)
1、通道持久化定义队列的时候指明通道持久化,通道定义的matedata持久化至
磁盘中即使服务器重启通道也不会丢失预防重启后发生通道或者队列不存在的情况
