qunarcorp / qmq

QMQ是去哪儿网内部广泛使用的消息中间件,自2012年诞生以来在去哪儿网所有业务场景中广泛的应用,包括跟交易息息相关的订单场景; 也包括报价搜索等高吞吐量场景。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

分库分表的事务消息怎么处理?

qinaren opened this issue · comments

假设我的业务表是分库分表的.使用了qmq发送事务消息.qmq消息怎么知道保存在哪一个数据源的qmq_msg_queue表呢?这里的分库并不是在同一个db实例中.

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用来获取、指定底层需要使用的路由。

非常感谢!昨天看源码时没注意到这一点..最近我也在我对我们的MQ进行这一层封装,因为我们这边现在都是直接用和你们的qmq_msg_queue表类似的task表.每次都要建新表和定时扫表任务.我封装的实现和你们这个基本一样...对于分库分表的也是要求使用方实现一个动态数据源获取接口.我这只是给我们公司的MQ做了一个增强的插件.