本文将从如何处理业务流程和信息分发中的定时和延时问题出发,横向比较了业界常见的几种方案,如直接多线程编码、Spring定时调度框、大型分布式调度框架、消息中间件定时消息,因为消息中间件接口友好,调用方便,性能稳定,特别推荐了使用消息中间件来处理此类问题。同时对比了ActiveMQ、RabbitMQ和RocketMQ三种消息中间件在此类场景中的优劣势。为了帮助大家理解消息中间件的使用,特别列举了三种常见场景及使用方案,同时列举了消息中间件RocketMQ定时消息的优势,近期定时消息特性会做大的更新,推出的新版定时消息已在阿里内部,稳定运行近两年,近期会发布到公有云上,敬请期待。

1 适用场景

在业务处理流程和信息分发过程中,定时延时处理的需求可谓无处不在。如何优雅的满足想要在未来的某个时间点,处理预期事件、分发既定信息,满足对时间线的强诉求场景和业务逻辑的设计,常常也是我们经常会遇到的问题。笔者在横向对比过几个常用的技术方案之后,大概总结如下,分别都会有不同的优缺点:**

友好的接口设计、敏捷的开发模式,便于开发者快速高效地集成、研发。同时支持“定时”和“延时”两种场景,以高性能和高可用,支撑大规模的分布式业务场景。整体来看,消息中间件的使用更加便捷。那么在不同的消息中间件之间,是否对这样的功能又有差别呢?首先让我们来看看一个优秀的定时延时消息中间件,需要满足哪些特性?**

  • 轻量级,高性能,精确到秒级
  • 支持高可用
  • 足够的定时长度,比如可以支持到30天、60天等
  • 支持取消定时消息,取消延时任务
  • 支持绝对定时和相对定时
  • 支持海量定时消息存储,高时效精度

综上,我们对业界几个常见的消息中间件做了简单对比:在现有的主流消息系统中,ActiveMQ、RabbitMQ和RocketMQ都有提供定时消息的实现。但是ActiveMQ定时性能在300TPS左右,只适合小量场景。RabbitMQ提供了一个定时插件,性能可达2000TPS左右,但不支持高可用,且不能堆积太多消息。RocketMq融合了各大定时技术组件的优势,同时弥补了其他组件设计上的局限,研发出了RocketMq新版定时消息,以适用支撑更多定时延时场景。是骡子是马拉出来溜溜。我们简单看下几个典型定时延时场景,使用RocketMq定时消息的实现方案。

场景一

用户秒杀爆品,使用优惠券,创建订单就冻结了用户优惠券额度,对于下单失败的用户,需要超时自动解冻用户被冻结的优惠券额度。超时自动解冻机制,需要满足高精度、高可用、支持海量业务、支持超长延时。

场景二

外卖业务对时效性非常敏感,从用户下单起,便产生了“外送超时时间”,保障外卖业务的顺序进行。外卖超时机制,需要满足高精度、高可用、支持海量业务。

场景三

钉钉软件设置日程后,需要在日程时间达到时,自动提醒用户。钉钉日程提醒,需要满足高精度、支持超长延时。

2 概念介绍

那么让我们来熟悉下消息队列RocketMq定时消息对于定时消息、延时消息的概念。在用户使用的视角和体验上,分为“定时性消息”和“延时性消息”两大类。定时性消息:Producer 将消息发送到消息队列 RocketMQ 服务端,但并不期望这条消息立马投递,而是推迟到未来的某一个确定时间投递到 Consumer 进行消费。如上一节中“场景三”。延时性消息:Producer 将消息发送到消息队列 RocketMQ 服务端,但并不期望这条消息立马投递,而是从当前时间延迟一定时段后才投递到 Consumer 进行消费。如上一节中“场景一”和“场景二”。使用文档详见官网:https://help.aliyun.com/document_detail/43349.html?spm=a2c4g.11186623.4.2.7e613030bocffQ

3 RockeMq定时消息优势

高性能高可用RocketMQ的分级延迟消息,性能较高,可无限堆积,且满足高可用要求,支持精确到秒级的定时需求,且在海量存储的情况下,时效精度较高。产品成熟度高在阿里巴巴经济体的各大业务及大促场景中,RocketMq定时消息已经得到广泛运用,经历了无数流量洪峰和稳定性考验,积累沉淀出了业界先进稳定的定时消息系统。技术社区活跃RocketMq作为apache顶级项目,已经建设完整的技术生态体系。支持多语言,多协议,定时消息天然继承了顶级项目的优点,具备完整的技术生态。专业技术支持阿里云专注云计算,RocketMq持续伴随阿里云技术架构进化升级。技术设施对外输出的同时,以强大的技术团队服务客户业务,为使用RocketMq产品的客户,持续提供专业技术支持。

4 特别说明

本次新版定时消息功能进行了深度内核层架构优化,设计原理和功能实现上都做了较大的升级调整,从根本上进行了定时消息架构的变革,极大地提高了定时消息的稳定性和性能。

如何优雅的处理业务逻辑中的定时和延时问题?相关推荐

  1. (转)淘淘商城系列——在业务逻辑中添加缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/72871268 上文我们一起学习了如何使用Spring容器来管理Redis单机版和集群版实现,本 ...

  2. SpringBoot自定义异常,优雅解决业务逻辑中的错误

    文章目录 前言 设计 1. 自定义枚举类 2. 自定义异常 3. 异常全局处理 4. 使用 前言 在我们开发中,总会碰到一些异常 ---------- 运行时异常(不受检异常):RuntimeExce ...

  3. java如何优雅的写业务逻辑_java业务逻辑,写在哪里比较好?

    java业务逻辑,写在哪里比较好?对于这个问题,我想说的是:规范是死的,人是活的,一般情况下,我们可以根据不同的 java 框架规范的目录来写,特殊情况下也可以自定义. 问题分析 接触过 java 的 ...

  4. 业务逻辑中的测试总结(二)----业务与数据库交互需求的测试分解

    对服务器端的测试,免不了对服务器端的接口与数据库之间进行各种交互的业务测试.这类隐藏类需求的分解实际上也能使测试人员站在一个更高的角度去分解实际的业务需求.对数据库的操作,一般都是增删查改这四类,所以 ...

  5. 学习淘淘商城第三十四课(在业务逻辑中添加缓存)

    上节课我们一起学习了如何用Spring容器来管理Redis单机版和集群版实现.这节我们来学习下在业务中添加缓存. Redis添加缓存有两种方式,一种是set,另一种是hset,这两种方式的不同之处是h ...

  6. 攻防演练中的业务逻辑漏洞及检测思路

    随着各类前后端框架的成熟和完善,传统的SQL注入.XSS等常规漏洞在Web系统里逐步减少,而攻击者更倾向于使用业务逻辑漏洞来进行突破.业务逻辑漏洞,具有攻击特征少.自动化脆弱性工具无法扫出等特点,也为 ...

  7. 关于软件中“业务逻辑”的详解

    原文:http://www.uml.org.cn/zjjs/201008021.asp 内容提要 ===================前篇===================== 前言 内容提要 ...

  8. SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑

    SpringMVC集成Hibernate Validator进行注解式的参数校验 --让代码更少.更加专注于业务逻辑 1 问题背景: 参数验证是一个常见的问题,例如验证用户输入的密码是否为空.邮箱是否 ...

  9. Spring 声明式事务在业务开发中容易碰到的坑总结

    Spring 声明式事务,在业务开发使用上可能遇到的三类坑,包括: 第一,因为配置不正确,导致方法上的事务没生效.我们务必确认调用 @Transactional 注解标记的方法是 public 的,并 ...

最新文章

  1. 可以卸载什么程序来对计算机进行瘦身,电脑越来越卡了,教你一分钟让电脑瘦身(C盘哪些文件可以删除)-怎么清理电脑内存...
  2. linux tab的含义,理解Linux中crontab定时器里的 21 含义 - 金牛座, 爬山虎, PHPCreeper, Workerman, Swoole, PHP爬虫引擎, PHP爬...
  3. java的trans文件大小写_文件大小写转换与后缀不变
  4. [转]解决mySQL占用内存超大问题
  5. Dart基础第3篇:常用数据类型、字符串类型、数值类型、布尔类型、List集合类型、Maps类型
  6. ubuntu 安装Pangolin 过程
  7. 台达cp2000的面板怎么调节_吊灯怎么安装 吊灯怎么固定在顶上的
  8. 查看环境列表_西门子COMOS软件开发定制学习8-查询列表间的数据交互
  9. android开发连接手机usb调试模式,安卓手机usb调试在哪里 安卓手机usb调试模式设置教程...
  10. 全球顶级的14位程序员!
  11. 微信小程序—在原有数组内添加元素
  12. VS2012 msvcr110d.dll xxxxxx处有未经处理的异常:0xC0000005:写入位置xxxxxx时发生访问冲突(scanf_s引起)-已解决
  13. 什么是 EventLoop ?
  14. URLEncoder.encode(String url)和URLDecoder.decode(String url)
  15. unity----lua调用c#之lua调用c#中的数组,list,字典
  16. 2020.11.02 使用OpenCV进行图像水平和垂直线提取 【OpenCV C++】
  17. 2022电大国家开放大学网上形考任务-教育心理专题非免费(非答案)
  18. 测绘用计算机吗,探讨测绘工程中计算机制图的运用问题原稿(网络分享版)
  19. 用计算机数字技术制作的电影是,数字技术在影视制作之中的应用
  20. 陆军转行5G网络优化工程师,月薪9K!—路星远行则可至,事金难做则可成!

热门文章

  1. 人工智能:第七章 机器学习
  2. 特征描述子提取公用接口
  3. #65279导致页面顶部空白一行解决方法
  4. PHP----------PHP自身的性能优化注意事项
  5. 安装完CentOS可以不做的事
  6. 在本机上安装zabbix,来监控服务器 六
  7. ThreadLocal_OSIV模式_FIlter_Web ajax
  8. 制定统一业务逻辑基础规则
  9. Tensorflow初学者之搭建神经网络基本流程
  10. Access ADO多连接时数据延迟无法同步无法及时更新的解决办法