jms高可用性的消息传递顺序

时间:2012-12-20 08:51:15

标签: jms weblogic high-availability

我已经使用weblogic服务器12c设置了统一的分布式队列。我正在尝试使用jms分布式队列实现交付顺序和高可用性。在我的prototpe测试部署中,我在集群中有两个托管服务器,让我们说managed_server1和managed_server2。每个受管服务器都承载jms服务器,即jms server1和jms server2。我已经使用jdbc持久存储配置了jms服务器。我已启用服务器亲缘关系。

  1. 我有一个生产者运行,例如java queuproducer t3 :: / managed_server1。我发出4条消息。从weblogic监视控制台我看到队列中有4条消息,因为队列中还没有消费者。
  2. 现在我关闭了managed_server1。
  3. 建立一个消费者来监听java queuconsumer t3:// managed_server2。此消费者无法使用消息,因为生产者将所有消息发送到jms server1,并且它已关闭。
  4. 启动托管服务器1,启动使用者收听t3:// managed_server1我可以获取所有消息。
  5. 这是我的问题,如果managed_server1发生故障,那么它永远不会重新上线,我是否会松开所有消息。此外,如果有另一个生产者向java queuproducer发送消息t3:// managed_server2,那么基于这些生成器之间的时间的消息顺序是不保证的。

    我有点失落,我错过了什么。可以通过单位帮助我克服这一点。或者我应该使用分布式主题而不是分布式队列,其中所有jms服务器将接收来自生产者的所有消息,但是如果我的consumre正在监听的一个jms服务器失败,那么当我切换到其他时,我的应用程序中只有一个消费者。 jms服务器,我可能从一开始就收到消息,而不是从我离开的地方开始。

    任何有关相同的建议都会有所帮助。

1 个答案:

答案 0 :(得分:2)

好问题!

“这是我的问题,如果managed_server1发生故障,那么它永远不会重新上线,我是否会丢失所有消息。”

Ans - 您没有丢失所有消息,它们存储在为托管服务器1上部署的JMS服务器配置的JDBC存储中。如果您希望从managed_server2使用发送到managed_server1的消息,则需要配置JMS迁移。

“此外,如果有另一个生产者向java queuproducer发送消息t3:// managed_server2,那么基于这些生产者之间的时间的消息顺序是不确定的。可以通过单位帮助我克服这个问题。”

Ans - 如果您希望消息严格按照特定顺序使用,那么您将必须使用订单单位(UOO)。当使用UOO发送消息时,如果目标失败,则会将其发送到多个UDQ目标之一,并且启用迁移后,消息将迁移到下一个UDQ目标,并且新的UDQ消息也会传递到新目标。 / p>

有用的链接 -

http://www.youtube.com/watch?v=B9J7q5NbXag http://www.youtube.com/watch?v=_W3EJ8p35lI

希望这有帮助。