我有一个Oracle Commerce应用程序,它通过一个JMS队列使用消息。我有十个消费者都有相同的目的地队列。我想了解这个架构的优点和缺点以及如何优化它。
答案 0 :(得分:0)
我只是想说明这个问题与Oracle Commerce没有具体关系,而且是关于实现队列的一般原则。
当您拥有一个队列和许多消费者时,请记住他们都会尝试同时处理这些消息。如果处理消息的顺序很重要或者在处理当前消息之前需要处理相关消息,则对于某些情况可能不希望这样。即使这样,也有一些模式可以将消息放回队列以便稍后处理以实现相关的消息处理。
当您有多个消费者时,异常处理是另一个棘手的问题。确保整个消息处理具有良好的异常处理,并将消息存回队列(通过抛出异常)以便稍后处理。此外,如果有一条消息可能会卡住处理,因为每次您可能希望将它们放在不同的队列中时会产生这样的消息,这是在很多异常之后。有一段时间,我们构建了一个异常处理框架,它帮助了所有这些场景。
如果您真的想在某个主题上向许多消费者广播该消息,请使用pub-sub体系结构,这样更容易处理。
同样,与其他评论一样,您尝试做的事情将有助于提供良好的指导。
以下讨论可能会对您的问题有所帮助 - http://c2.com/cgi/wiki?MessageQueuingArchitectures
答案 1 :(得分:0)
当消费者共享工作负载时,他们共享队列是很常见的。 否则,最好为每个消费者创建一个单独的队列。
如果您想广播bij,将消息放在tippic上,而不是为每个消费者创建一个桥梁。
这意味着从一个toppic到消费者队列的桥梁。 使用网桥的专家是,当消费者进程短时间内停止时,消息将留在队列中(也就是消息不会过期)。