当前位置: 首页 > wzjs >正文

35互联做网站怎么样深圳做自适应网站

35互联做网站怎么样,深圳做自适应网站,个人开个装修小公司,企业网站内容如何备案MQ 消息幂等性保证 1. 什么是幂等性 在程序开发中,是指同一个业务,执行一次或多次对业务状态的影响是一致的。例如: 根据 id 删除数据查询数据 在实际业务中,避免不了出现用户连续点击退款、重复点击删除等情况,这…

MQ 消息幂等性保证

1. 什么是幂等性

在程序开发中,是指同一个业务,执行一次或多次对业务状态的影响是一致的。例如:

  • 根据 id 删除数据
  • 查询数据

在实际业务中,避免不了出现用户连续点击退款、重复点击删除等情况,这种情况下,就需要对多个消息进行处理,避免短时间内多次执行相同业务(类似于防抖)。

如:

  1. 幂等性操作

    • 查询
    • 根据条件删除
    • 更新
  2. 非幂等性操作

    1. 增加:多次执行,会插入多条数据

      即使使用唯一约束,也只能解决一部分情况

    2. 更新

解决方案:

  • 唯一消息 ID
  • 业务状态判断

2. 唯一消息 ID

这个思路非常简单:

  1. 每一条消息都生成一个唯一的 id,与消息一起投递给消费者。
  2. 消费者接收到消息后处理自己的业务,业务处理成功后将消息 ID 保存到数据库或 Redis
  3. 如果下次又收到相同消息,去数据库或 Redis 查询判断是否存在,存在则为重复消息放弃处理。

我们该如何给消息添加唯一 ID 呢?

其实很简单,SpringAMQP 的 MessageConverter 自带了 MessageID 的功能,我们只要开启这个功能即可。

以 Jackson 的消息转换器为例:

@Bean
public MessageConverter messageConverter() {// 1. 定义消息转换器Jackson2JsonMessageConverter jjmc = new Jackson2JsonMessageConverter();// 2. 配置自动创建消息 id,用于识别不同消息,也可以在业务中基于 ID 判断是否是重复消息jjmc.setCreateMessageIds(true);return jjmc;
}

然后再使用自动装配,将其注入 Spring 中即可

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com....messageConverter

3. 业务判断

业务判断就是基于业务本身的逻辑或状态来判断是否是重复的请求,不同的业务场景判断的思路也不一样。

相比较而言,使用唯一消息 ID 的方案需要操作数据库或 Redis 保存消息 ID,所以更推荐使用业务判断的方案。

以支付修改订单的业务为例:

@Override
public void markOrderPaySuccess(Long orderId) {// UPDATE `order` SET status = ? , pay_time = ? WHERE id = ? AND status = 1lambdaUpdate().set(Order::getStatus, 2).set(Order::getPayTime, LocalDateTime.now()).eq(Order::getId, orderId).eq(Order::getStatus, 1) // 添加对业务状态的判断,只有为未支付状态的订单才能支付.update();
}

4. 业务补偿

​ 虽然利用各种机制尽可能增加了消息的可靠性,但也不好说能保证消息 100% 的可靠。万一真的 MQ 通知失败该怎么办呢?有没有其它补偿方案,能够确保订单的支付状态一致呢?

其实思想很简单:既然 MQ 通知不一定发送到交易服务,那么交易服务就必须自己主动去查询支付状态。这样即便支付服务的 MQ 通知失败,我们依然能通过主动查询来保证订单状态的一致。

图中黄色线圈起来的部分就是 MQ 通知失败后的补偿处理方案,由交易服务自己主动去查询支付状态。

http://www.dtcms.com/wzjs/815840.html

相关文章:

  • 做网站需要掌握的软件寒假网页设计培训珿
  • 做网站公司西安asp.net 创建网站
  • php做电子商务网站的种类西点培训学校
  • 公司网站的搭建方案集团网站 源码
  • 武义县建设局网站首页网站运维是做什么的
  • 网站功能模块建设链接交换公司
  • 网站建设外包需要注意哪些南沙高端网站建设
  • 中国制造网外贸站网站快捷按钮以什么方式做
  • 余杭网站建设科技项目申报
  • 使用wordpress的购物网站公司网站建设的现状
  • 网站备案失效万维网使用的网站
  • 企业网站推广建设wordpress 上帝模式
  • 做经营网站怎么赚钱60天做网站
  • 营销网站seo推广费用营销网站运营的基本环节
  • 夸克网站免费进入视频链接生成器
  • vi设计经典案例seo提高网站排名
  • cms网站怎么建苏州发布最新消息
  • 沈阳网站开发手机免费生成logo软件
  • 阿里网站建设需要准备什么网页制作用什么软件做
  • 做吃穿住行网站网站建设要经历哪些步骤
  • 高大上强企业网站珠海建网站的网络公司
  • 网站上传完成后要怎么做wordpress做成论坛系统
  • 网页上传和网站开发优化网站要多少钱
  • 网站开发文档步骤应该怎么写卫生间装修效果图
  • 怎样申请自己的网站东营市东营区建设信息网
  • 怎么用服务器lp做网站seo具体优化流程
  • 建筑电工证查询网站wordpress数据过滤
  • 南昌高端网站建设wordpress 伪原创 插件
  • 雅江网站建设如何创建自己的商城
  • 自己做网站最新视频教程北京模板网站开发全包