• RabbitMQ工作总结


    在项目中有用到MQ,主要用到的了主题模式和死信队列,私信队列是当做延迟队列来使用。

    1、什么是RabbitMQ?为什么使用RabbitMQ?
    答:
    RabbitMQ是一款开源的,基于AMQP协议的,消息中间件;
    公司项目是用springcloud框架,用它来做解耦和异步、削峰

    2、如何保证RabbitMQ不被重复消费?
    答:
    会出现重复消费,一般都是因为网络问题、服务器故障等。
    解决方案:
    a.部署多个服务。
    b.在接收的时候,把参数做幂等,如果是已经消费过的就手动confirm。
    c.处理完的时候也做手动confirm
    b.队列的durable 设置成 true(持久化到磁盘里,及时mq挂了,队列也不会丢失)

    3、如何保证RabbitMQ消息的顺序性?
    答:
    之前没遇到过要求顺序性的需求,现在我假设一个场景:数据的增、删、改要在队列完成
    那么,我们执行的顺序是: 增-->改-->删
    一条数据都有一个组件:每次都先把组件当做一个组id,每次数据下来,都把数据放在缓存(硬盘)里。
    如果先执行的是删,那么我们先把删的信息放在数据库里。
    接下来如果是增,那么我们可以先执行增加操作,也把数据的状态保存到数据库。
    最后接收到改,我们先从数据库查询是否有新增的操作,如果有就执行修改,再判断数据组是否满足3条,如果是,再执行删除,删除成功,最后把数据组从库里删除。

    1. 工作中对mq的使用情景?
      答:
      需要用到短信、红点、日志等服务的时候,都是通过MQ去解耦。
      死信队列则是,在做一个CRM系统中使用到,在分配一个商机的时候,如果这个商机的员工没有处理。8小时后商机则会回流到待分配状态。

    2. 死信队列的流程是怎么样的?
      如下图,定义一个死信队列和一个普通队列,在普通队列消息过期的时候,去会去执行死信队列。我们就没有去接收普通队列,就做了一个死信队列的消费端,因此,等时机一到,就去会去执行死信队列。具体业务,按照订单的状态判断,是否商机是否被处理。
      死信队列

  • 相关阅读:
    webpack 配置缓存
    Python-----多线程threading用法
    LINUX 编程定位工具gstack,pstack
    数据库session立即生效(64---8192) SCOPE参数
    shell中wait命令详解
    Go语言学习笔记
    使用go语言数据库
    Oracle数据库管理----性能优化
    数据库索引实例
    Linux串口设置及编程(转)
  • 原文地址:https://www.cnblogs.com/boychen/p/14428815.html
Copyright © 2020-2023  润新知