我们有一个MQ队列,接收来自我们无法控制的外部系统的消息。我们处理传入消息的系统是关键的,需要24/7运行,不论发生什么。
处理传入消息的顺序也是不可协商的,这意味着我们需要按照它们到达时的确切顺序进行处理。
为了确保我们的系统100%可用,我们将我们的系统部署在一堆能够处理这些消息的物理机器上。
一旦消息到达我们的系统,我们就会实施一种机制,以确保消息处理不会失序,同时获得一些性能提升作为结果。对于我们来说,性能提升是好的,但它实际上是一个副作用,因为我们的主要目标是高可用性,同时保证正确的处理顺序。
我的想法是,在每台单独的机器上配置能够处理传入消息的MDB,但一次只有一个活动消费者。
我们使用Webshere MQ作为JMS提供程序,并使用Webshere Application Server 8.5部署应用程序。
多个消费者同时监听同一队列的问题似乎不是可行的解决方案,因为当消息批量到达时,它们会循环通过所有消费者,并且没有办法控制这将如何发生,消息很容易失去顺序。
当我手动停止除一个监听器以外的所有监听器时,显然消息按顺序处理。但手动关闭和启动这些监听器肯定不是高可用性的解决方案。
我们可以实施监控过程来检查系统的健康状况,并根据需要关闭或启动它们,但这仍然对我来说似乎太弱。
实际上,我们想要的是所有监听器都在运行,但只有一个接收消息。如果其中一个出现问题,那么另一个正在那里的监听器将变为活动状态并开始处理消息。
最初,我们考虑使用主题而不是队列,但这会带来其他问题,如下所示:
1.我们无法控制我们消息的来源 2.我们拥有的大量消息会使我们遇到麻烦,因为必须是持久的,当他们回来时必须处理大量的未决消息。 3.输入队列已经是集群的一部分,更改所有基础结构需要进行大量工作
总之,在我看来,必须存在一种现有的模式来适应这种情况。任何帮助、建议将不胜感激。
解决方案不必是特定的MQ解决方案,欢迎任何想法。
提前感谢。
处理传入消息的顺序也是不可协商的,这意味着我们需要按照它们到达时的确切顺序进行处理。
为了确保我们的系统100%可用,我们将我们的系统部署在一堆能够处理这些消息的物理机器上。
一旦消息到达我们的系统,我们就会实施一种机制,以确保消息处理不会失序,同时获得一些性能提升作为结果。对于我们来说,性能提升是好的,但它实际上是一个副作用,因为我们的主要目标是高可用性,同时保证正确的处理顺序。
我的想法是,在每台单独的机器上配置能够处理传入消息的MDB,但一次只有一个活动消费者。
我们使用Webshere MQ作为JMS提供程序,并使用Webshere Application Server 8.5部署应用程序。
多个消费者同时监听同一队列的问题似乎不是可行的解决方案,因为当消息批量到达时,它们会循环通过所有消费者,并且没有办法控制这将如何发生,消息很容易失去顺序。
当我手动停止除一个监听器以外的所有监听器时,显然消息按顺序处理。但手动关闭和启动这些监听器肯定不是高可用性的解决方案。
我们可以实施监控过程来检查系统的健康状况,并根据需要关闭或启动它们,但这仍然对我来说似乎太弱。
实际上,我们想要的是所有监听器都在运行,但只有一个接收消息。如果其中一个出现问题,那么另一个正在那里的监听器将变为活动状态并开始处理消息。
最初,我们考虑使用主题而不是队列,但这会带来其他问题,如下所示:
1.我们无法控制我们消息的来源 2.我们拥有的大量消息会使我们遇到麻烦,因为必须是持久的,当他们回来时必须处理大量的未决消息。 3.输入队列已经是集群的一部分,更改所有基础结构需要进行大量工作
总之,在我看来,必须存在一种现有的模式来适应这种情况。任何帮助、建议将不胜感激。
解决方案不必是特定的MQ解决方案,欢迎任何想法。
提前感谢。