0

过去,我使用消息队列来处理需求高峰。这个系统工作正常,除了记录目的。我将成功处理的消息写入数据库以进行报告和记录。这让我想知道为什么我不从一开始就将消息写入数据库,而是让我的“工作角色”轮询数据库,而不是消息队列。

我猜这不是最好的设计,因为随着数据库的增长,轮询一个巨大的数据库只是为了寻找一个“未经检查”的记录来处理会变得非常慢,而如果我立即请求,消息队列只会给我一个.

我错过了什么吗?还有其他理由选择消息队列而不是轮询数据库吗?我很乐意为用户提供查看尚未处理的内容(浮动在队列中)的能力,但是该操作比在数据库上运行查询花费的时间要长得多,因此这似乎是一种权衡。

感谢您的任何意见。

4

1 回答 1

0

另一个想到的原因是阻塞/锁定。通常,如果您只是轮询数据库以寻找工作,只要您只有一个工作人员来消化消息,它就会工作得相当好。但是,如果您想横向扩展并让更多的工作人员解决问题,那么当您将基于数据库的“队列”中的工作消息从“需要运行”更改为“运行”时,通常最终会导致锁定升级成功”或其他。

使用消息队列可以为您解决这个棘手的问题,因为所有线程安全和锁定/阻塞都没有影响。

于 2012-07-18T01:59:06.137 回答