Rabbitmq基础学习

MQ概述

消息队列,是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通讯。

MQ的优势和劣势

优势

  • 应用解耦
    • 系统的耦合性越高,容错性就越低,可维护性就越低
  • 异步提速
  • 削峰填谷

劣势

  • 系统可用性降低
  • 系统复杂提高
  • 一致性问题

工作类型

官方文档:https://www.rabbitmq.com/getstarted.html

操作流程

  • 创建链接工厂
  • 设置参数
  • 创建链接 connection
  • 创建通道 channel
  • 创建交换机 Exchange
  • 创建队列 Queue
  • 绑定交换机
  • 发送消息
  • 释放资源

高级特性

消息的可靠性

MQ的投递流程
生产者 -------> mq代理 ---------> 交换机 ---------> 队列 ----------> 消费者

confirm 确认模式

  • 消息从 producer 到exchange 则会返回一个 confirmCallback。

return 退回模式

  • 消息从 exchange 到 queue 投递失败会返回一个returnCallback。


    img.png

消费端可靠性

Consumer Ack

表示消费端收到消息后的确认方式

  • 自动确认: acknowledge=“none”
  • 手动确认:acknowledge = “manual”


    img_1.png

消费端限流

确保ack机制为手动确认

  • listener-container 配置属性
    • perfetch = 1, 表示消费端每次从mq拉去一条消息来消费,知道手动确认消费完毕后,才会拉取吓一条消息。
  • 手动签收

TTL(存活时间/过期时间)

  • 当消息到达存活时间后,还没有被消费,会被自动清除
  • 可以对消息设置过期时间,也可以对队列设置过期时间

死信队列

死信交换机。当消息死信之后可以重新发送到另外的交换机,这个交换机就叫死信交换机

消息在什么时候会成为死信?

  • 队列消息长度达到限制
  • 消费者拒收消费信息,basicNack/BasicReject,并且不把消息重新放入原目标队列,requeue=false
  • 原队列存在消息过期设置,消息到达时间未被消费

队列绑定死信交换机?

给队列设置参数:x-dead-letter-exchange he x-dead-letter-routing-key

延迟队列

  • 消息进入队列后不会立即被消费,只有到达指定时间后才会被消费。
  • TTL+死信队列实现延迟队列的效果

应用问题

消息补偿方案

img_2.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容