1

我已经使用 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 服务器,我可能从一开始就开始接收消息,而不是从我离开的地方。

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

4

1 回答 1

2

好问题 !

“这是我的问题,如果 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

希望这可以帮助。

于 2012-12-20T12:50:28.260 回答