RabbitMq 知识点学习

一 五种工作模式

  1. 最简单的传递消息

    producers --》 queue --》 consumer

image.png
  1. 工作队列模式

    producers --》 多个queue --》 consumer


    image.png
  1. 发布/订阅模式

    producers --》exchange --》 多个queue --》 consumer


    image.png
  1. 路由

    producers --》exchange --》路由键--》 多个queue --》 consumer

    image.png
  1. 主题模式(带通配符的理由)

    producers --》exchange --》(带正则符号)路由键--》 多个queue --》 consumer

    号表示一个或者多个字符

    *号表示一个单词

    image.png

二 高级特性

1 消息可靠性投递 (针对生产者)

image.png

2. 消费者ACK

image.png

一般采用手动签收的方式,灵活处理

image.png

3. 消费端限流

削峰填谷。 A系统无法承载请求量时,引入mq,做分批拉取。

需要在配置文件设置消息手动拉取,单个请求中消息个数的数量

#设置消费端手动 ack
spring.rabbitmq.listener.simple.acknowledge-mode=manual
#在单个请求中处理的消息个数,他应该大于等于事务数量(unack的最大数量)
spring.rabbitmq.listener.simple.prefetch=2
image.png

4. TTL

设置消息的存活时间, 比如设置订单有效时间为30分钟, 支付系统还没拿到则取消该订单。

参数名: x-message-ttl , 单位为 毫秒

注意:

通过两种方式设置过期时间。

  • 设置队列的整体过期时间

  • 设置消息的过期时间。

    队列里单消息的情况: 如果消息单个设置了过期时间,队列也设置了过期时间, 则以短的为标准。

    队列里多消息的情况:如果设置了队列消息为100s过期,先发5条不带自身过期时间的消息,再发一条5s过期的消息,则会在100s 之后,将六条消息一条条移除,队列只判断在顶端的消息是否过期。


    image.png

1.5 死信队列

东西抛弃到垃圾桶,被别人回收。

image.png

image.png

1.6 延迟队列(对于rabbit Mq 非常特殊)

对于订单30分钟问题。

但是rabbit MQ里面没有直接提供延迟队列的功能,需要组合实现。

image.png
image.png

三 应用问题

3.1 消息可靠性问题

  • 消息补偿机制 : 其实就是 Producer 再发送一条延迟消息, 去跟回调检查服务中的MogoDb中检查Consumer端是否消费了原先消息。即 延迟消息id 与MDB中是否有这个id对比,有的话,则Consumer消费成功。 若没有,则重新发,消息补偿。
image.png

3.2 消息幂等性问题

  • 乐观锁 : 跟数据库乐观锁一样, 只是带一个version字段,执行完,version+1 ,若是低于这个version则是不操作的。
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • RabbitMQ 简介 MQ 消息队列,上承生产者,下接消费者。从生产者侧获取消息,然后将消息转发给消费者。由此可...
    2205阅读 3,551评论 1 11
  • 个人专题目录 1. RabbitMQ 高级特性 1.1 消息可靠性投递 在使用 RabbitMQ 的时候,作为消息...
    Java及SpringBoot阅读 538评论 0 3
  • AMQP 0.9.1介绍 AMQP 是什么 AMQP(高级消息队列协议)是一个网络协议,他支持符合要求的客户端应用...
    呆弱鸡阅读 369评论 0 0
  • 20210927_Rabbitmq延迟队列学习(SpringBoot版) 1概述 在RabbitMQ中并未提供延迟...
    kikop阅读 292评论 1 0
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,120评论 0 4