本地消息调度框架业务适配参考指南

本地消息调度框架业务适配参考指南

作者:赵世攀

一、解决的目标问题

  1. 消息最终一致性解决方案。
  2. 微服务化的调度服务,强化生产侧的一致性和即时性。

二、demo演示

1、架构说明

1)职能图

消息调度职能图公链

2、调度全流程演示

1)环境准备
a.源码下载

gitee源码 | github源码

git clone https://github.com/FantasyZsp/msg-schedule.git
git checkout feature_example_delay & git pull
b.表准备

执行src/main/resources/db目录下的脚本。

  • error_message.sql

  • 错误消息记录表

  • local_delay_message.sql

    • 本地延时消息表

      • 在实际的业务中,可以根据需要设定多张表,表名自定义。

        注意:表名需要和yml文件中调度的表名大体保持一致以便区分调度对象。

        所有调度框架中自定义的表实体和调度组件,其相关的targetTableName的字段值应该是完全一样的,否则将会无法正确调度。

  • local_instant_message.sql

  • 本地即时消息表,同延时注意事项。

  • order.sql

    • 业务订单表,模拟业务入库。
c.外部化配置说明

详见config-template.yml文件内置说明。

application.yml文件给出了对应表的配置信息。相关配置可参考源码注释。

2)mq准备

https://gitee.com/fantasyzsp/deploy-collection/tree/master/rocketmq-deploy

根据网络环境配置https://gitee.com/fantasyzsp/deploy-collection/blob/master/rocketmq-deploy/data/brokerconf/broker.conf#L32后拉起镜像

3)服务调度演示
a.启动时调度
b.即时消息调度
c.延时消息调度

store、pushlisher、listener、porterrouter、porter组件

d.组件工作说明

三、业务适配

1、适配场景演示

效果参考服务调度演示。

几乎所有现有业务都可以采用此种方式。

2、业务接入说明

用户如果接入表,需要做的事情

参考example模块做法点击查看

  1. 引入依赖。

     <dependency>
         <groupId>xyz.mydev</groupId>
         <artifactId>msg-scheduling-autoconfigure</artifactId>
         <version>${msgSchedulingVision}</version>
    </dependency>
    
  2. 根据需要仿照LocalDelayMessage实现接口消息,例OrderMessage

  3. 实现消息实体需要的MessageRepository,并注入spring容器中

  4. 在yml中配置调度的信息,参考LocalDelayMessage的相关配置

  5. 注意保证MessageRepository的实现里, getTableName()返回值使用OrderMessage中值,并保证yml中配置的表名和 getTableName()返回值完全一致。

  6. 在yml中,配置合适的调度间隔。目前仅限5, 10, 15, 20, 30调度级别。

    • 调度级别仅代表部分后台定时任务的执行间隔,不会影响消息时延。
    • 一般在消息量大或总是较集中爆发时考虑配置较小的间隔,以减轻延时消息场景的预调度压力。

四、个别实现细节

时间处理

时间矫正

检查点处理

定时维护检查点

TODO 与调度联动,实现快速纠正失败投递

任务调度

检查点调度

加载调度

分布式调度与锁粒度

五、更多特性

1、支持用户根据表特点自己实现Porter接口以调整调度行为。

六、TODO

  1. 框架对于MessageRepository的api是固定的,考虑BaseMapper的做法,提供简单快捷的实现而不必用户CV模板样例实现。
  2. checkpoint模块与porter调度模块通讯,以提供即时故障恢复的机制,而不必等下次服务重启才做失败消息的failover
  3. 延时消息特例判定即时调度
    1. 处于过去时间点的延时消息投递时走即时投递流程
  4. 更严谨的配置校验。
  5. 组件生命周期管理
    1. 防止过早启动调度。
  6. 更优雅的抽象实现
    1. 装饰器模式实现Porter以复用底层能力同时,方便增强调度特性。
  7. 多样MQ的多种发送消息api支持。
    1. 不是所有调度都需要rocketmq的事务消息投递才能保证一致性,可以考虑异步回调的方式进一步降低时延增大吞吐。
  8. 提供消费流程的接入或者demo
    1. 处理框架级别消费幂等处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值