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

济南助企网站建设公司怎么样新乡网站建设哪家优惠

济南助企网站建设公司怎么样,新乡网站建设哪家优惠,太原集团网站建设,国都建设集团网站目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念,用函数表达式来描述是这样的:f(x) f(f(x)) 。在程序开发中,则是指同一个业务,执行一次或多次对业务状态的影响是一致的。有些业务…

目录

一、引言

二、消息幂等解决方案

2.1. 方案一

2.2. 方案二


一、引言

幂等是一个数学概念,用函数表达式来描述是这样的:f(x) = f(f(x)) 。在程序开发中,则是指同一个业务,执行一次或多次对业务状态的影响是一致的。有些业务天生就是幂等的,如查询和删除业务执行一次和多次的结果是一样的,而像用户下单、用户退款是非幂等业务。

实际项目开发中,我们在提交表单时,很多时候可能会重复提交表单,这个时候我们通过token令牌等唯一标识来解决,第一次提交页面将缓存中的唯一标识删除,后面再重新提交时缓存中的标识已经被删了因此重复提交失败。

我们在消息消费的过程中也会存在同样的问题,即如何来保障所有业务在接收RabbitMQ消息时保证业务的幂等性,避免消息重复消费呢?

二、消息幂等解决方案

2.1. 方案一

1. 给每个消息都设置/生成一个唯一id,利用id区分是否是重复消息,与消息一起投递给消费者。

2. 消费者接收到消息后处理自己的业务,业务处理成功后将消息ID保存到数据库

3. 如果下次又收到相同消息,去数据库查询判断是否存在,存在则为重复消息放弃处理

 核心代码:

我们可以在生产者和消费者两端分别声明消息转换器的Bean,本案例为了方便直接在启动类中声明消息转换器,并配置自动为消息创建id。

package com.example.consumer;import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}@Beanpublic MessageConverter messageConverter(){// 1.定义消息转换器Jackson2JsonMessageConverter jjmc = new Jackson2JsonMessageConverter();// 配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息jjmc.setCreateMessageIds(true);return jjmc;}
}
package com.example.publisher;import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;@SpringBootApplication
public class PublisherApplication {public static void main(String[] args) {SpringApplication.run(PublisherApplication.class, args);}@Beanpublic MessageConverter messageConverter(){// 1.定义消息转换器Jackson2JsonMessageConverter jjmc = new Jackson2JsonMessageConverter();// 配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息jjmc.setCreateMessageIds(true);return jjmc;}
}

通过源码可以看到默认生成的是UUID:

 通过RabbitMQ浏览器界面可以看到消息已经生成了一个唯一ID :

2.2. 方案二

结合业务逻辑,基于业务本身做判断。以余额支付业务为例,我们要在支付后修改订单状态为已支付,应该在修改订单状态前先查询订单状态,判断状态是否是未支付。只有未支付订单才需要修改,其他状态不做处理:

核心代码 

 上述代码可以通过乐观锁来实现,替换代码如下:

 

http://www.yayakq.cn/news/657641/

相关文章:

  • 影视网站开发工程师爱站权重是怎么计算的
  • 温州网站制作系统网站建设公司知识
  • 单位网站建设汇报湖南产品网络推广业务
  • 意识形态建设专题网站网站用ps下拉效果怎么做
  • 自己做一个网站一年的费用移动端数据可视化
  • 网站错误404济南新网站优化
  • 中国网络推广网站排名磁力猫torrentkitty官网
  • 门户网站建设不断南山网站建设哪家效益快
  • 通化市建设局网站互联网都有哪些公司
  • 青岛网站商城设计注册公司需要提供的资料及公司注册流程
  • 太原网站建设技术外包拖鞋设计网站推荐
  • 青岛建站价格亚马逊雨林电影
  • 建站宝盒购买html成品网页免费模板下载
  • 教育机构网站是系部网站建设需求分析
  • 免费域名查询网站seo推广是什么意思呢
  • 网站运营软件网站改版影响seo吗
  • 方正园林建设监理中心网站优惠劵精选网站怎么做
  • 长春seo整站优化百度云 wordpress 教程视频
  • 制作销售网站有哪些问题wordpress gif插件
  • 网站背景怎么弄网站设计规划建设的目的
  • aws的efs可以做网站的什么滨州建网站
  • 做二手货车网站公司wordpress菜单下拉菜单
  • 河北建设网站信息查询中心互联网广告推广好做吗
  • 公司建站详细步骤wordpress 评分
  • 路由器做网站教程html免费网站模板
  • 网页封装网站怎么做的接口seo的收费标准
  • 外星人做的网站飞鱼ip代理
  • 有免费的网站域名吗设计师怎么弄个人网站
  • 网站开发发展方向小程序入口文件
  • 广安哪里有做网站的公司做带字头像的网站