2013-01-18 117 views
0

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

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

我的问题是:

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

请原谅,如果描述是模糊的。如果有人提供链接,以便像我这样的新手可以学到一些东西,这将是有益的。

谢谢

+0

你是如何将消息先发送到队列管理器1的队列,然后再发送到队列管理器2.我还想使用JMS来做同样的事情? https://stackoverflow.com/questions/46897265/jms-load-balancing1-queue-2-queue-connection-factory-and-1-bindi。请帮忙吗? –

回答

1

您的解释不能说明您的要求。

您写道:

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

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

您写道:

2.如何应对局面不改变代码

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

您写道:

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

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

如果情况如此,则应用程序代码需要更改。即使第一行代码发生错误,您也应该执行异常处理,以便它执行将消息发送到第二个队列管理器的代码。

2

如果可以提供您的应用程序的细节将是有益的。无论是使用服务器绑定还是客户端模式连接到队列管理器。您使用的是什么版本的MQ?

以下信息是有效的MQ V7.x中:

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

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

例如当两个队列管理器是本地主机上:

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

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

+0

@Shasi我们如何将消息首先发送到队列管理器1的队列,然后再发送到队列管理器2.我想使用JMS做同样的事情吗? https://stackoverflow.com/questions/46897265/jms-load-balancing1-queue-2-queue-connection-factory-and-1-bindi。因为JMS允许我一次创建1个QCF的帮助队列队列。请帮忙吗? –

相关问题