【问题标题】:jms order of message delivery with high availability具有高可用性的消息传递 jms 顺序
【发布时间】:2012-12-07 17:51:32
【问题描述】:

我已经用 weblogic server 12c 建立了统一的分布式队列。我正在尝试使用 jms 分布式队列来实现交付顺序和高可用性。在我的原型测试部署中,我在集群中有两台托管服务器,让我们说 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 我可以获取所有消息。

这是我的问题,如果 managed_server1 出现故障,那么它就再也没有恢复,我是否丢失了所有消息。此外,如果有另一个生产者向 java queuproducer t3://managed_server2 发送消息,则不保证基于这些生产者之间时间的消息顺序。

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

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

【问题讨论】:

  • 您能否确认您使用的是单个 JMS 连接工厂?
  • 是的,它确实使用了一个 jms 连接工厂。

标签: jms weblogic high-availability


【解决方案1】:

好问题!

“这是我的问题,如果 managed_server1 出现故障,那么它就再也没有恢复,我是否会丢失所有消息。”

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

“另外,如果有另一个生产者向 java queuproducer t3://managed_server2 发送消息,则无法保证基于这些生产者之间的时间的消息顺序。顺序单位能否帮助我克服这个问题。”

Ans - 如果您希望严格按照特定顺序使用消息,那么您将不得不使用顺序单位 (UOO)。当使用 UOO 发送消息时,它们将被发送到多个 UDQ 目标之一,如果该目标中途失败,并且启用了迁移,则消息将迁移到下一个 UDQ 目标,并且新的 UDQ 消息也将传递到新目标。

有用的链接 -

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

希望这会有所帮助。

【讨论】:

  • SridharS 非常感谢您的回答,这正是我一直在寻找的东西。将尝试自动服务迁移以及实施的 UOO 我应该很好。
  • 这确实是启用 UOO 和 JMS 迁移时 WLS 的工作方式。但是请注意,迁移时间并非微不足道,当 UOO 队列中有数千条消息时,迁移时间可能约为“分钟”。此外,其他 WLS 资源不一定与迁移协调。因此,消息消费者可以在迁移之前尝试从迁移的队列中读取,从而导致 JMS Connection/QueueSession 错误(重复),直到迁移完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2011-02-26
  • 2011-01-29
  • 2011-12-04
  • 2014-08-11
  • 2014-02-17
相关资源
最近更新 更多