mq向交换机发送消息,交换机本身不存储消息,交换机负责路由和转发消息
mq数据隔离使用virtual host虚拟主机,账户权限控制。
广播模式:FanOutExchange将消息路由到每个绑定的队列
direct:根据routing key将消息路由到对应队列
topic:(1)routing key可以是多个单词的列表 ,并且以.分割
(2) 可以使用通配符 .#:代指0个或多个单词
*代指1个单词
基于注解生成 binding、队列 交换机 routing key
发送消息
消息转换器,替换提供的序列化给信息造成乱码
消息可靠性
发送者的可靠性
生产者重连
生产者确认
publisher confirm 和public return两种确认机制
路由失败 会返回异常原因 返回ACK ,告知投递成功
临时消息消息投递到了mq,b并且入队成功,返回ACK,并告知投递成功
持久化消息相比临时消息多了持久化一步
其他情况返回NACK,告知投递失败
return需要配置return callback 只能配置一个。
confirm callback 每次发消息指定
MQ的可靠性
默认情况下,MQ会将消息保存到内存中降低消息的延迟
一旦MQ宕机,内存中消息会丢失,当消费者故障或者处理过慢时,会导致消息积压,引发MQ阻塞
pageOut 临时消息阻塞会把一部分消息转移到磁盘,此时mq是阻塞的不能访问的
1.消息持久化 ,将消息设定为PERSITENT 持久化,消息直接进入磁盘,并同时利用内存进行处理消息,保证效率
内存空间有限
消费者的可靠性
配置文件配置 acknowledge mode
一般用i第三种,配置好错误交换机和错误队列绑定
业务幂等性 同一个业务 ,执行一次或多次对业务状态的影响是一致的
结合业务做幂等
延迟消息
发送延时消息 expiration 属性配置延迟时间
发消息用RabbitMqTemplate .convertAndSend()
定义MessageProsser和延迟消息对象
延时消息
接收: