我的系统详情
Mongodb :每个文档代表一个事务。 每笔交易可以是借记卡交易或信用卡交易。
TransactionReader :定期轮询mongodb进行交易,并将每笔交易放入带有路由密钥'借方','贷方'的rabbitmq
TransactionWorker :可以是两种类型[DebitCardWorker,CreditCardWorker] DebitCardWorker的多个实例,CreditCardWorker侦听队列并使用事务并处理它们。由于我使用的是rabbitmq,因此没有两个工人(同一类型)处理相同的交易。
我的要求: 我想让多个TransactionReaders实例从mongodb中提取数据,但我不希望在rabbitmq中复制一个事务。
一个解决方案:
引入新字段以表示文档的状态(如WAITING,PICKED,PROCESSED)并使用mongodb的findAndModify()
并在多个读取器实例之间实现代码同步。因此,两个TransactionReader进程选择一个status:WAITING
的文档。两者都尝试findAndModify(status:WAITING; new_status: PICKED)
并且只有其中一个成功并继续标记status:PROCESSED
。
我的问题:是否有技术或库可以帮助我从mongodb读取多个实例之间的负载分配?