我有一些独立的任务,我目前正在将这些任务交给不同的/独立的工作者。
为了便于理解,我将带你看一个例子。假设我有三个独立的任务,即sleep
、eat
和smile
。一项任务可能需要在不同的芹菜配置下工作。因此,我认为,最好将这些任务中的每一个都与不同的工作人员分离到不同的目录中。某些任务可能需要在不同的服务器上运行。
我计划在未来添加更多的任务,每个任务都将由不同的开发人员实现。
在提供这些条件的情况下,每个任务都有一个以上的工作人员。
现在,这是问题和我的问题。
当我启动三个smile
任务时,其中一个将由smile
的工作人员获取并执行。但是下一个任务将从eat
的工人那里获取,并且永远不会执行。
那么,什么是公认的、最常见的模式呢?我是否应该将每个任务发送到不同的队列中,并且工作人员应该监听其自己的队列?
答案取决于应该考虑的两件事:
- 命令的顺序应该保留吗
如果是这样的话,最好的方法是将某种命令模式放置为序列化消息,这样每个获取/使用的消息都可以按其顺序在应用程序中的单个位置执行。如果这对你来说不是问题的话,你可以在单个交换中发布不同的消息类型,并让不同的工作人员按照预定义的模式接收消息,同时进行主题交换。顺便说一句,这将使您可以轻松添加另一项任务,比如"饮酒",而无需更改现有运输拓扑结构/现有工人中的线路。
- 您是否计划在不同的机器之间扩展队列以提高吞吐量
如果你有非常密集的任务流量(就频率而言),那么可能值得为每种任务类型创建不同的队列,这样当你成长时,你可以将每种任务放置在rabbit集群的不同节点上。
在类似的设置中,我决定使用不同任务的特定队列,然后我可以决定哪个工作人员监听哪个队列(也可以动态更改!)。