Skip to main content

Command Palette

Search for a command to run...

Series

RabbitMQ

消息中间件

  1. RabbitMQ 保证消息顺序执行

    为什么要保证顺序 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常。 举例: 比如通过 Mysql binlog 进行两个数据库的数据同步,由于对数据库的数据操作是具有顺序性的,如果操作顺序搞反,就会造成不可估量的错误。比如数据库对一条数据依次进行了 插入->更新->删除操作,这个顺序必须是这样,如果在同步过程中,消息的顺序变成了 删除->插入->更新,那么原本应该被删除的数据,就没有被删除,造成数据的不一致问题。 场景 一个...

    Jul 11, 20221 min read18
  2. RabbitMQ 高级特性--延时队列

    延时队列 延迟消息是指的消息发送出去后并不想立即就被消费,而是需要等(指定的)一段时间后才触发消费。 例如下面的业务场景: 在支付宝上面买电影票,锁定了一个座位后系统默认会帮你保留15分钟时间,如果 15 分钟后还没付款那么不好意思系统会自动把座位释放掉。怎么实现类似的功能呢? 可以用定时任务每分钟扫一次,发现有占座超过15分钟还没付款的就释放掉。但是这样做很低效,很多时候做的都是些无用功; 可以用分布式锁、分布式缓存的被动过期时间,15分钟过期后锁也释放了,缓存key也不存在了; 还可以用延...

    Jun 26, 20222 min read16
  3. RabbitMQ 高级特性-- TTL 机制 & 死信队列

    1. TTL 机制 ​ 在京东下单,订单创建成功,等待支付,一般会给用户 30 分钟时间。如果在这段时间内用户没有支付,则默认订单取消。 该如何实现? 定期轮询(数据库、后台服务等) 用户下单成功,将订单信息放入数据库,同时将支付状态放入数据库,用户付款更改数据库状态。定期轮询数据库支付状态,如果超过30分钟就将该订单取消。 优点: 设计实现简单 缺点: 需要对数据库进行大量的I0操作,效率低下。 RabbitMQ 使用 TTL ... TTL:Time to Live ...

    Jun 26, 20223 min read8
  4. RabbitMQ 高级特性——消息可靠性

    平时在购物支付的时候,一般我们使用支付宝或微信转账支付的时候,都是扫码、支付,然后立刻得到结果,说你支付了多少钱,如果你绑定的是银行卡,可能这个时候你并没有收到支付的确认消息。往往是在很短的一段时间之后,才会收到银行卡发来的短信,告诉你支付的信息。 支付平台如何保证这笔帐不出问题? 支付平台必须保证数据正确性,保证数据的并发安全性,保证消息最终一致性。 我们可以通过一下几种方式保证数据一致性: 分布式锁 操作某条数据时先对其进行锁定,可以使用 Redis 或 Zookeeper 等实现。 比...

    Jun 26, 20223 min read52
  5. RabbitMQ 消息模型及在.Net6下实现

    1. RabbitMQ介绍、概念、基本架构 1.1 RabbitMQ介绍 RabbitMQ,俗称“兔子MQ”(可见其轻巧,敏捷),是目前非常热门的一-款开源消息中间件,不管是互联网行业还是传统行业都广泛使用(最早是为了解决电信行业系统之间的可靠通信而设计)。 高可靠性、易扩展、高可用、功能丰富等 支持大多数(甚至冷门)的编程语言客户端。 RabbitMQ 遵循 AMQP 协议,自身采用 Erlang (一种由爱立信开发的通用面向并发编程的语言)编写。 RabbitMQ 也支持 MQTT 等...

    Jun 24, 202213 min read14
RabbitMQ