美文网首页
RabbitMq 知识点学习

RabbitMq 知识点学习

作者: Equals__ | 来源:发表于2021-11-08 16:58 被阅读0次

一 五种工作模式

  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 知识点学习

      本文链接:https://www.haomeiwen.com/subject/foauzltx.html