分布式消息队列中数据库应该这个方法应该考虑吗?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

分布式消息队列中数据库应该这个方法应该考虑吗?

2020-04-23 20:02:38 257 1

分布式消息队列中数据库应该这个方法应该考虑吗?

取消 提交回答
全部回答(1)
  • kun坤
    2020-04-23 20:04:32

    我们实现本地延时比较简单,直接使用Java中现成的即可,那我们分布式消息队列的实现有哪些难点呢?

    有很多同学首先会想到我们实现分布式消息队列的延时任务,可不可以直接使用本地的那一套,用ScheduledThreadPoolExecutor,Timer,当然这是可以的,前提是你的消息量很小,但是我们分布式消息队列往往都是企业级别的中间件,数据量都是非常的大,那么我们纯内存的方案肯定是行不通的。所以我们就有了下面这几个方案来解决我们这个问题。 #数据库 数据库一般来说是我们很容易想到的一个办法,我们通常可以建立下面这样一个表:

    CREATE TABLE `delay_message` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `excute_time` bigint(16) DEFAULT NULL COMMENT '执行时间,ms级别',
      `body` varchar(4096) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '消息体',
      PRIMARY KEY (`id`),
      KEY `time_index` (`excute_time`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    
    

    这个表中我们使用excute_time代表我们真实的执行时间,并且对其建立索引,然后在我们的消息服务中,启动一个定时任务,定时从数据库中扫描已经可以执行的消息,然后开始执行,具体流程如下面所示: 1.jpg 使用数据库的方法是一个比较原始的方法,在没有延时消息这个概念之前,要做一个订单多少分钟过期的这种功能,通常使用这个方法去完成。而这个方法通常也比较局限于我们单个业务,如果想扩展为我们企业级的一个中间件的话是不行的,因为mysql由于BTree的特性,会随着维护二级索引的开销越来越大,导致写入会越来越慢,所以这个方案通常不会被考虑。

    0 0
相关问答

1

回答

一个DN上Leader、Follower保证副本,但磁盘坏了,数据不是一样会丢失吗?做多副本的意义是

2022-07-12 10:41:45 80浏览量 回答数 1

1

回答

落地一个算法时使用分布式消息队列,如后端系统出现故障消息会不会丢失?

2021-12-09 18:49:42 204浏览量 回答数 1

1

回答

DataWorks提供了全方位的数据安全保护体现在哪里?

2021-12-08 20:25:57 198浏览量 回答数 1

0

回答

java在调用jedis查询某个键对应value的数据类型type方法发现性能很慢,该如何优化?

2021-11-12 17:03:29 896浏览量 回答数 0

1

回答

可否用数据库SQL中的序列作为分布式ID实现方案,有没有做过的帮忙介绍下实施过程?

2021-10-14 13:20:04 191浏览量 回答数 1

1

回答

Flink 分布式快照如何切分数据流

2021-01-06 14:16:42 637浏览量 回答数 1

1

回答

如何通过消息实现分布式事物呢?

2020-04-25 14:38:24 620浏览量 回答数 1

4

回答

小白专用:从宝塔安装到网站环境、数据库安装再到网站搭建详细教程

2018-11-23 18:11:27 5191浏览量 回答数 4

2

回答

分布式数据库的具体实现和框架没有介绍啊

2016-11-17 06:53:52 2069浏览量 回答数 2

0

回答

SDS当中fusionstorage系列除了三大数据服务之外 还主推哪些服务?

2016-04-04 16:27:43 2163浏览量 回答数 0
+关注
0
文章
13395
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载