RabbitMQ学习笔记

概述

  • MQ全称Message Queue,是在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信

优势:

1.应用解耦:

系统的耦合性越高,容错性就越低,可维护性就越低

请添加图片描述

使用MQ使得应用间解耦,提升容错性和可维护性

请添加图片描述

2.异步提速:提升用户体验和系统吞吐量

请添加图片描述

**3.削峰填谷:**提高系统稳定性

请添加图片描述

劣势:

1.系统的可用性降低:系统引入的外部依赖越多,系统的稳定性越差

2.系统复杂度提高

3.一致性问题

  • 基本概念

    • Broker:接受和分发消息的应用
    • Virtual host:出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中
    • Connection:publisher/consumer/和broker之间的TCP连接
    • Channel:是在connection内部建立的逻辑连接,极大地减少了操作系统建立TCP connection的开销
    • Exchange:message到达broker的第一站,根据分发规则,匹配查询表中的routing key,分发消息到queue中去
    • Queue:消息最终被送到这里等待consumer取走
    • Binding:exchange和queue之间的虚拟连接
  • 六种工作模式

    • 简单模式
    • work queues
    • 发布与订阅模式
    • 路由模式
    • 主题模式
    • 远程调用模式
  • JMS

    • 即java消息服务应用程序接口,是一个java平台中关于面向消息中间件的API

整合RabbitMQ

  • spring
    • 生产者
      • 创建生产者工程
      • 添加依赖
      • 配置整合
      • 编写代码发送消息
    • 消费者
      • 创建生产者工程
      • 添加依赖
      • 配置整合
      • 编写消息监听器
  • springboot
    • 生产端
      • 创建生产者springboot工程
      • 引入start,依赖坐标
      • 编写yml配置,基本信息配置
      • 定义交换机,队列以及绑定关系的配置类
      • 注入RabbitTemplate,调用方法,完成消息发送
    • 消费端
      • 创建消费者springboot工程
      • 引入start,依赖坐标
      • 编写yml配置,基本信息配置
      • 定义监听类,使用@RabbitListener注解完成队列监听

高级特性

消息的可靠投递

  • 在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ提供了两种方式用来控制消息的投递可靠性模式

    • confirm 确认模式
    • return 退回模式
  • 消息投递路径

    • producer—>rabbitmq broker—>exchange—>queue—>consumer
      • 消息从 producer 到 exchange 则会返回一个 confirmCallback
      • 消息从 exchange–>queue 投递失败则会返回一个 returnCallback 。 我们将利用这两个 callback 控制消息的可靠性投递

Consumer Ack

  • ack指Acknowledge,确认。 表示消费端收到消息后的确认方式
    • 自动确认:acknowledge=“none”:当消息一旦被Consumer接收到,则自动确认收到,并将相应 message 从 RabbitMQ 的 消息缓存中移除
    • 手动确认:acknowledge=“manual”:要在业务处理成功后,调用channel.basicAck(),手动签收
    • 根据异常情况确认:acknowledge=“auto”

消费端限流

请添加图片描述

  • 在中配置prefetch属性设置消费端一次拉取多少消息
  • 消费端的确认模式一定为手动确认,acknowledge="manual”

TTL

  • Time To Live:存活时间
  • 当消息到达存活时间后,还没有被消费,会被自动清除
  • RabbitMQ可以对消息设置过期时间,也可以对整个队列设置过期时间:x-message-ttl
  • 设置消息过期时间使用参数:expiration

死信队列

  • Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以 被重新发送到另一个交换机,这个交换机就是DLX

请添加图片描述

  • 消息成为死信的三种情况:
    • 队列消息长度到达限制
    • 消费者拒接消费消息,basicNack/basicReject,并且不把消息重新放入原目标队列,requeue=false
    • 原队列存在消息过期设置,消息到达超时时间未被消费

延迟队列

  • 延迟队列,即消息进入队列后不会立即被消费,只有到达指定时间后,才会被消费
  • 在RabbitMQ中并未提供延迟队列功能,但是可以使用:TTL+死信队列组合实现延迟队列的效果

请添加图片描述

日志与监控

  • RabbitMQ默认日志存放路径: /var/log/rabbitmq/rabbit@xxx.log
  • 日志包含了RabbitMQ的版本号、Erlang的版本号、RabbitMQ服务节点名称、cookie的hash值、 RabbitMQ配置文件地址、内存限制、磁盘限制、默认账户guest的创建以及权限配置等等
  • rabbitmqctl管理和监控

请添加图片描述

消息追踪

  • Firehose
    • 将生产者投递给rabbitmq的消息,rabbitmq投递给消费者的消息按照指定的格式 发送到默认的exchange上
    • 这个默认的exchange的名称为amq.rabbitmq.trace,它是一个topic类 型的exchange
    • 发送到这个exchange上的消息的routing key为 publish.exchangename 和 deliver.queuename
    • exchangename和queuename为实际exchange和queue的名称,分别 对应生产者投递到exchange的消息,和消费者从queue上获取的消息
    • 打开 trace 会影响消息写入功能,适当打开后请关闭
      • rabbitmqctl trace_on:开启Firehose命令
      • rabbitmqctl trace_off:关闭Firehose命令
  • rabbitmq_tracing
    • rabbitmq_tracing和Firehose在实现上如出一辙,只不过rabbitmq_tracing的方式比Firehose多了一 层GUI的包装,更容易使用和管理
    • 启用插件:rabbitmq-plugins enable rabbitmq_tracing
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值