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

怎么查看网站备案软文网官网

怎么查看网站备案,软文网官网,小蓝鸟加速器,做网站用什么牌子电脑在系统中当使用消息队列时,无论做哪种技术选型,有很多问题是无论如何也不能忽视的,如:消息必达、消息幂等等。本文以典型的RabbitMQ为例,讲解如何保证消息幂等的可实施解决方案,其他MQ选型均可参考。 一、…

在系统中当使用消息队列时,无论做哪种技术选型,有很多问题是无论如何也不能忽视的,如:消息必达、消息幂等等。本文以典型的RabbitMQ为例,讲解如何保证消息幂等的可实施解决方案,其他MQ选型均可参考。

一、消息重试机制

消息队列的消息幂等性,主要是由MQ重试机制引起的。因为消息生产者将消息发送到MQ-Server后,MQ-Server 会将消息推送到具体的消息消费者。假设由于网络抖动或出现异常时,MQ-Server根据重试机制就会将消息重新向 消息消费者推送,造成消息消费者多次收到相同消息,造成数据不一致。

在RabbitMQ中,消息重试机制是默认开启的,但只会在consumer出现异常时,才会重复推送。在使用中,异常 的出现有可能是由于消费方又去调用第三方接口,由于网络抖动而造成异常,但是这个异常有可能是暂时的。所以 当消费者出现异常,可以让其重试几次,如果重试几次后,仍然有异常,则需要进行数据补偿。

消费重试配置

# 消费者监听相关配置 listener: simple: retry: # 开启消费者(程序出现异常)重试机制,默认开启并一直重试 enabled: true # 最大重试次数 max‐attempts: 5 # 重试间隔时间(毫秒) initial‐interval: 3000

当consumer消息监听类中添加异常,最终接受消息时,可以发现,消息在接收五次后,最终出现异常。

二、消息幂等解决

以上就是我们的消息幂等解决的架构图

下面看代码实现

修改OrderController
/*** 此处为了方便演示,不做基础添加数据库操作* @return*/
@PostMapping("/addOrder")
public String addOrder(){String uniqueKey = String.valueOf(idWorker.nextId());MessageProperties messageProperties = new MessageProperties();messageProperties.setMessageId(uniqueKey);messageProperties.setContentType("text/plain");messageProperties.setContentEncoding("utf-8");Message message = new Message("1271700536000909313".getBytes(),messageProperties);rabbitTemplate.convertAndSend(RabbitMQConfig.REDUCE_STOCK_QUEUE,message);return "success";
}
新增消息监听类
@Component
public class ReduceStockListener {@Autowiredprivate StockService stockService;@Autowiredprivate JedisPool jedisPool;@Autowiredprivate StockFlowService stockFlowService;@RabbitListener(queues = RabbitMQConfig.REDUCE_STOCK_QUEUE)@Transactionalpublic void receiveMessage(Message message){//获取消息idString messageId = message.getMessageProperties().getMessageId();Jedis jedis = jedisPool.getResource();System.out.println(messageId);try {//redis锁去重校验if (!"OK".equals(jedis.set(messageId, messageId, "NX", "PX", 300000))){System.out.println("重复请求");return;}//mysql状态校验if (!(stockFlowService.findByFlag(messageId).size() == 0)){System.out.println("数据已处理");return;}String goodsId = null;try {//获取消息体中goodsIdgoodsId = new String(message.getBody(),"utf-8");stockService.reduceStock(goodsId,messageId);} catch (UnsupportedEncodingException e) {e.printStackTrace();}int nextInt = new Random().nextInt(100);System.out.println("随机数:"+nextInt);if (nextInt%2 ==0){int i= 1/0;}} catch (RuntimeException e) {//解锁String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";jedis.eval(script, Collections.singletonList(messageId), Collections.singletonList(messageId));System.out.println("出现异常了");System.out.println(messageId+":释放锁");throw e;}}
}

生产者的死信队列投递自行完成

http://www.shuangfujiaoyu.com/news/35961.html

相关文章:

  • 开个网站做英语培训软文兼职
  • 凡科网做网站靠谱吗南宁网站建设网站推广
  • 建设网站需要做什么手机app推广平台
  • 襄城县城乡建设管理局网站人大常委会委员长
  • 岳阳优化营商环境站群优化公司
  • 这种资源网站怎么做才赚钱百度推广登录平台
  • 知名的家居行业网站制作广告优化师是做什么的
  • 霸州做网站的宁波seo网络推广产品服务
  • 网站设计建设流程图搜索引擎优化排名工具
  • 销售网站建设怎么样数据分析师培训机构推荐
  • 杭州网站制作外包搜索引擎优化seo价位
  • 零成本做网站百度关键词排名怎么查
  • 中国建设在线平台官网网站seo重庆
  • 无代码软件开发合肥seo优化外包公司
  • wordpress 微信扫码搜索引擎网站优化和推广方案
  • 济南哪家做网站国内手机怎么上google浏览器
  • 军队 网站备案沈阳seo优化新势力
  • html教程网站指数函数求导公式
  • 做外贸一般在哪个网站张家港seo建站
  • 免费做头像网站郑州专业seo哪家好
  • g时代网站建设优化关键词的步骤
  • 花钱让别人做的网站版权是谁的亚马逊查关键词排名工具
  • 南昌房产网四川整站优化关键词排名
  • 青海省电话黄页合肥网络推广优化公司
  • 怎么给网站引流百度注册网站
  • 网站建设需求模板下载hao123上网从这里开始官方
  • wordpress 站外调用俄罗斯搜索引擎入口 yandex
  • 做菠菜网站多少钱产品推广的渠道有哪些
  • 什么什么网站上海网络营销推广外包
  • 南昌做网站比较好的公司营销型企业网站