DS模型数据变更消息原理
1.DS Server发送模型变更消息内部实现
DS在收到某个模型的增删改操作时,会判断当前模型是被订阅,如果被订阅,DS执行流程概括如下:
- 如果是Create操作,DS会先插入该条数据,然后根据id回查该行数据,然后组织好消息格式放入到当前事务的待发消息队列中,当前事务提交后将消息发送给MQ
- 如果是Update操作,DS会在更新之前根据id查一次更新前的数据,执行更新操作,然后组织好消息格式放入到当前事务的待发消息队列中,当前事务提交后将消息发送给MQ
- 如果是Delete操作,DS会在删除之前把待删除的数据查出来,然后组织好消息格式放入到当前事务的待发消息队列中,当前事务提交后将消息发送给MQ
DS发送发送的模型数据变更消息为分区顺序消息,分区Key为当前模型名称,对同一个模型来说,模型的增删改应该是严格有序的。
DS发送消息时,tag也为当前模型名称,
Topic为当前模型所属的租户id加固定前缀组成。
2.DS-MQ-SDK内部实现
DS-MQ-SDK内部启动了一个消费者进程,SDK内部会根据当前环境变量的DS_PROJECT_ID自动拼装Topic,然后扫描所有包含@DataStoreEventListener注解的类, 提取出所有被订阅的模型,作为Consumer的Tag。