【问题标题】:WebSphere Remote MQ ClusteringWebSphere 远程 MQ 集群
【发布时间】:2018-06-17 10:38:37
【问题描述】:

我有两台机器——机器 1 和机器 2。机器 1 有一个队列管理器 QM1 和一个代理(集成服务器)BR1,机器 2 有一个队列管理器 QM2 和一个代理(集成服务器)BR2。我想在 QM1 和 QM2 之间建立一个集群。我在 QM2 中创建了一个名为 INVENTQ 的远程集群队列。问题是我能够在任何队列管理器上成功发布任何消息,并且能够在 QM2 中的 INVENTQ 上看到相应的消息。但我希望体系结构能够从任何队列管理器接收来自队列的消息,除了创建队列 INVENTQ 的队列管理器,即 QM2 。有人可以指导我吗?

【问题讨论】:

  • 在两者上创建它。

标签: ibm-mq ibm-integration-bus


【解决方案1】:

MQ 没有“远程获取”功能 - 即您不能使用本地绑定到队列管理器并从另一个队列管理器获取消息。如果你想这样做,你需要使用客户端绑定到消息直接驻留的队列管理器。

在 MQPUT 时,必须(在放置队列管理器上)做出决定,将消息转发到哪里(例如,哪个本地队列,或者哪个传输队列将其传递给另一个队列管理器)。

在集群设置中,如果您在一个队列管理器上定义了一个队列并将其放入集群,则来自任何集群队列管理器的任何人都可以将其放入它,就好像它是一个本地队列一样。然而,它们的 MQPUT 会导致消息(通过集群通道)到达一个特定的实例。因此,虽然您可以从不同的队列管理器将消息放入队列,但您无法获取它。

根据@JoshMc 的建议,您可以在多个队列管理器上定义一个同名的队列并进行集群,但这意味着在 MQPUT 时间,消息被路由到该队列的一个实例,并且只有一个实例 -如果它被路由到远程队列管理器集群定义,您仍然无法从本地队列管理器中获取它。想象一下,您有一个包含 3 个 qmgrs 的集群。您可以在其中 2 个中创建一个名为“FRED”的集群队列。它们都可以放入 FRED - 但其中 2 个将默认仅放入其本地队列(除非您设置 CLWLUSEQ=ANY),另一个将(通常)在 2 个远程实例之间交替。每个队列肯定会有不同的消息。

https://www.ibm.com/developerworks/community/blogs/messaging/entry/Undestanding_on_MQ_Cluster_Work_Load_Management_Algorithm_and_Attributes?lang=en

【讨论】:

  • 杰森写的很棒。我的时间很短:)
  • 如果我将同名队列(INVENTQ)添加到集群中的两个队列管理器,那么我猜每个队列管理器都会将消息放入其本地队列和队列'INVENTQ'在这两个队列管理器中都会有一组不同的消息。我认为这会违反集群原则。否则,在两个队列管理器中创建同名队列时可能会发生冲突。
  • 见上面的编辑...我想问题是你想用你的感知设置来实现什么。为什么您希望 2 个 qmgrs 每个都能够从队列中检索消息。工作负载均衡吗?高可用性?冗余?等
  • 是的,我想要高可用性,以便在其中一个队列管理器出现故障的情况下,我能够使用另一个队列管理器接收相同的消息集。假设如果我在集群中部署了一个 BAR 文件,那么它应该被部署到两个队列管理器中,这样如果一个队列管理器出现故障,我可以从另一个队列管理器中检索它。我检查了我们可以实现它来自多实例队列管理器,但我猜它在主动被动模式下工作,但需要在主动/主动模式下进行。
  • 显然您想购买一台大型机,以便获得共享队列支持。除此之外,一旦消息在队列文件中的磁盘上,如果 qmgr 处于脱机状态,您将无法访问它。因此,对于分布式来说,这使得多实例/HA 成为在故障期间保持访问它的唯一方法。不要忘记您可以在一个节点上运行活动/备用,而在另一个节点上运行备用/活动,因此两个 qmgrs 都保持活动状态,并且在出现问题时它们都在同一个节点上运行
猜你喜欢
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 2016-05-05
相关资源
最近更新 更多