美文网首页
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