0

我有两个配置了相同队列名称的 MQ 队列管理器。两者都配置为将数据发送到不同的服务器。当前队列管理器(QM1)已停止(状态立即结束)并且 QM2 正在运行

现在我的程序打开队列并发送数据。它不指定队列管理器名称。当我执行程序时,MQ 连接请求返回error 2059

我的问题是:

  1. 当多个队列管理器具有相同的队列名称时会发生什么?
  2. 如何在不更改代码的情况下解决问题?

如果描述含糊,请见谅。如果有人提供链接以便像我这样的新手可以学到一些东西,那将会很有帮助。

谢谢

4

2 回答 2

2

如果可以提供有关您的应用程序的详细信息,将会很有帮助。无论是使用服务器绑定还是客户端模式连接到队列管理器。您使用的是哪个版本的 MQ?

以下信息适用于 MQ v7.x:

如果您使用客户端模式,则可以使用多个 CONNNAME 进行连接。如果一个队列管理器关闭,您的应用程序将连接到 CONNAME 列表中的下一个队列管理器。使用客户端模式连接时最简单的方法之一是定义 MQSERVER 环境变量并指定多个 CONNNAME。

SET MQSERVER=<channel name>/TCP/host1(port1), host2(port2)

例如,当两个队列管理器都在本地主机上时:

SET MQSERVER=MYSVRCONCHN/TCP/localhost(1414),localhost(1415)

在服务器绑定模式下,如果未指定队列管理器名称,则应用程序将尝试连接到默认队列管理器。如果默认队列管理器关闭,则抛出 2059。

于 2013-01-18T09:35:04.070 回答
1

您的解释没有明确说明您的要求。

你写了:

我的问题是 1. 当多个队列管理器具有相同的队列名称时会发生什么。

没有。这是一个正常的情况。不同的队列管理器可能有同名的队列,这不会产生任何歧义。虽然,当队列管理器在同一个集群中并且队列也是一个集群队列时,场景会有所不同。那么一切都将取决于需求和设计。

你写了:

2.如何在不更改代码的情况下处理情况

  1. 运行已停止的队列管理器。

你写了:

现在我的程序打开队列并发送数据。它不指定队列管理器名称。

您正在使用什么应用程序?对于客户端应用程序,您使用队列管理器的对象访问队列。我假设您使用的应用程序(客户端)不从您那里获取队列管理器详细信息,只获取队列详细信息。并且可能是队列管理器在代码中被硬编码。它首先将消息发送到队列管理器 1 的队列,然后再发送到队列管理器 2。但是,在您的情况下,队列管理器 1 已关闭。

如果是上述情况,则需要更改应用程序的代码。您应该以这样的方式进行异常处理,即使第一行代码抛出错误,它也会执行将消息发送到第二个队列管理器的代码。

于 2013-01-18T11:28:53.313 回答