我有两个配置了相同队列名的MQ队列管理器。两者都配置为将数据发送到不同的服务器。当前队列管理器(QM1)已停止(状态立即结束)且QM2正在运行
现在我的程序打开队列并发送数据。它不指定队列管理器名称。当我执行程序时,MQ连接请求返回error 2059
。
我的问题是:
如果描述含糊不清,请原谅。如果有人提供链接以便像我这样的新手可以学到一些东西,那将会很有帮助。
由于
答案 0 :(得分: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。
答案 1 :(得分:1)
您的解释并不能说明您的要求。
您写道:
我的问题是1.当多个队列管理器具有相同的队列名称时会发生什么。
无。这是正常的情况。不同的队列管理器可能具有相同名称的队列,并且不会产生任何歧义。虽然,当队列管理器位于同一群集中且队列也是群集队列时,方案会略有不同。一切都将取决于要求和设计。
您写道:
<强> 2。如何在不更改代码的情况下解决问题
您写道:
现在我的程序打开队列并发送数据。它没有指定 队列管理员名称。
您使用的是什么应用程序?对于客户端应用程序,您使用队列管理器对象访问队列。 我很遗憾您正在使用一个不从您那里获取队列管理器详细信息的应用程序(客户端),只接受队列详细信息。并且可能是队列管理器在代码中被硬编码。它首先将消息发送到队列管理器1的队列,然后发送到队列管理器2.但是,在您的情况下,队列管理器1已关闭。
如果是这种情况,则需要更改应用程序的代码。您应该以这样的方式进行异常处理,即它执行将消息发送到第二个队列管理器的代码,即使第一行代码引发错误。