消息传递系统设计 - 每个消息类型一个队列与所有消息的一个队列

时间:2011-07-12 09:28:24

标签: messaging

我想实现一个包含以下actor的消息传递系统:

1)Web界面 2)守护进程 3)数据库

Web界面向守护程序发送请求,这些请求放在队列中(ActiveMQ)。

守护进程读取消息,处理消息并将一些数据写入数据库。

Web界面和守护程序都访问数据库。

如果需要,可以将其他守护程序连接到队列(以提高性能)。


有四种类型的消息指向守护进程。另外,我希望守护程序定期发送“心跳”消息,以便我(或监视应用程序)知道某个特定守护程序是否存在。

我可以用各种方式设计系统:

1)将来自Web界面的所有消息放入队列A中的守护程序,将心跳消息放入队列B中。

队列A将包含不同类型的消息。

2)将类型1的所有消息放入队列A1,将类型2的消息放入队列A2等。

在这种情况下,每个队列都将包含只有一种消息类型的消息。

这两种设计在技术上都是可行的。

我的问题:我怎样才能决定哪个更好?

需要考虑哪些标准?

提前致谢

的Dmitri

2 个答案:

答案 0 :(得分:1)

如果您的消息的排序不重要,或者您的应用程序正确处理,那么当然将每条消息放在一个单独的队列中将允许更强大的扩展选项。但是不得不维持5个队列而不是2个队列。我不确定那个难度有多大,但是一旦你习惯了就不会怀疑。

答案 1 :(得分:1)

@Dmitri,如果特定消息类型的消息量存在差异,例如如果你的type1的消息预计是每分钟100条消息,那么因为type2预计每分钟有2条消息,那么由于以下原因而拥有单独的队列是有意义的: -

  1. 您可以基于配置不同的并发消息侦听器 加载。例如,在上述情况下,您可能需要配置10条消息 type1的侦听器和type2的仅1个消息侦听器。

  2. 如果type2的消息(虽然数量较少)可能会发生 在队列的最后,需要等待所有type1消息 轮流处理。