分库分表的事务消息怎么处理?
qinaren opened this issue · comments
ChenTiantao commented
假设我的业务表是分库分表的.使用了qmq发送事务消息.qmq消息怎么知道保存在哪一个数据源的qmq_msg_queue表呢?这里的分库并不是在同一个db实例中.
Keli commented
public SpringTransactionProvider(DataSource bizDataSource, RouterSelector routerSelector)
public interface RouterSelector {
Object getRouteKey(DataSource dataSource);
void setRouteKey(Object key, DataSource dataSource);
void clearRoute(Object key, DataSource dataSource);
}
SpringTransactionProvider提供了一个包含RouterSelector的构造函数。
需要你提供的bizDataSource封装了分库分表的路由逻辑,然后实现一个RouterSelector用来获取、指定底层需要使用的路由。
ChenTiantao commented
非常感谢!昨天看源码时没注意到这一点..最近我也在我对我们的MQ进行这一层封装,因为我们这边现在都是直接用和你们的qmq_msg_queue表类似的task表.每次都要建新表和定时扫表任务.我封装的实现和你们这个基本一样...对于分库分表的也是要求使用方实现一个动态数据源获取接口.我这只是给我们公司的MQ做了一个增强的插件.