2012-12-20 41 views
1

我已经建立了带有weblogic服务器12c的统一分布式队列。我正在尝试使用jms分布式队列来实现交付和高可用性。在我的prototpe测试部署中,我在集群中有两台托管服务器,让我们说managed_server1和managed_server2。这个托管服务器中的每个托管jms服务器,即jms server1和jms server2。我已经使用jdbc持久性存储配置了jms服务器。我已启用服务器关联。jms高可用性消息传递顺序

  1. 我有一个生产者运行如java queuproducer t3 ::/managed_server1。我发出4条消息。从weblogic监控控制台,我看到queu中有4条消息,因为没有使用者到队列中。
  2. 现在我关闭managed_server1。
  3. 调出一个消费者来监听java queuconsumer t3:// managed_server2。此消费者不能消费消息,因为生产者将所有消息发送到jms server1,并且它已关闭。
  4. 启动托管服务器1,启动消费者以听取t3:// managed_server1我可以获取所有消息。

这是我的问题,如果managed_server1发生故障,那么它从来没有恢复过来,我是否会丢失我的所有消息。此外,如果有另一位制片人将消息发送到Java queuproducer T3:// managed_server2然后根据这些生产者之间的时间信息的顺序不guanranteed。

我有点迷路,我是否错过了一些东西。单位能否帮助我克服这一点。或者我应该使用分布式主题,而不是分布式队列,所有的JMS服务器将接收所有来自生产商的消息,但如果在我的consumre监听一个JMS服务器故障有我的应用程序只有一个消费者,当我切换到其他jms服务器,我可能会开始从一开始就从我离开的地方得到消息。

任何关于相同的建议将有所帮助。

+0

您能否确认您使用的是单个JMS连接工厂? –

+0

是的,它使用一个jms连接工厂。 – balaji

回答

2

好问题!

“这是我的问题说,如果managed_server1下去那么它永远不会回来了,做我失去我的所有消息。”

答案 - 不,你不松动的所有邮件,它们存储在配置部署管理服务器1.如果你想发送给managed_server1消息的JMS服务器的JDBC存储从managed_server2需要配置JMS迁移消耗。 “

”另外,如果有另一个生产者发送消息给java queuproducer t3:// managed_server2,那么基于这些生产者之间的时间消息的顺序是不能保证的,命令单元可以帮助我克服这个问题。

答案 - 如果你想将邮件按照一定的顺序严格被消耗掉,那么你将不得不使用单位的顺序(UOO)。当消息使用UOO发送,它们被送到几个UDQ的旅游目的地之一,如果中途该目标失败,迁移启用被迁移到下一个目的地UDQ和新UDQ消息消息也传递到新的目的地。

相关链接 -

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

希望这有助于。

+0

SridharS非常感谢您的回复,这是我真正想要的。将尝试自动服务迁移与UOO实施我应该很好。 – balaji

+0

这实际上是在启用UOO和JMS迁移时WLS的工作原理。但请注意,迁移时间并不显着,并且在UOO队列中有数千条消息时,迁移时间可能为“分钟”。此外,其他WLS资源不一定与迁移协调。因此,消息使用者可能会尝试在迁移之前从迁移队列读取数据,导致JMS连接/队列会话错误(重复),直到迁移完成。 –