我正在重新开发一个系统,该系统将通过 http 向众多供应商之一发送消息。原来是 perl 脚本,很可能重新开发也会使用 perl。
在旧系统中,有多个 perl 脚本同时运行,每个供应商五个。当一条消息被放入数据库时,随机线程号(1-5)和供应商被选择以确保没有消息被处理两次,同时避免锁定表/行。此外,数据库中有一个“公平队列位置”字段,以确保大消息发送不会延迟发送大消息时发生的小发送。
有时每分钟只有几条消息,但在其他时候,可能会有数十万条消息的转储。在我看来,让所有脚本一直运行并检查消息是一种资源浪费,所以我正在尝试确定是否有更好的方法来做这件事,或者旧的方法是否可以接受。
我现在的想法是让一个脚本根据流量的多少来运行和分叉尽可能多的子进程(达到一个限制),但我不确定如何最好地实现它,以便每个消息只处理一次,同时保持公平排队。
我现在最好的猜测是父脚本更新数据库以指示哪个子进程应该处理它,但是我担心这最终会比原始方法效率低。我几乎没有编写分叉代码的经验(我上次这样做是在大约 15 年前)。
任何关于如何最好地处理消息队列的想法或指南链接表示赞赏!