IBM MQ:只需要一个发送通道吗?
IBM MQ: Is a channel for sending only necessary?
我在理解 IBM MQ 时遇到困难。
我想编写一个只向队列发送消息的客户端。据我了解,在我看来,我不需要为该场景使用频道。我的来源是这本书:http://www.redbooks.ibm.com/abstracts/redp0021.html
但是当我尝试连接到队列时,我收到了错误代码
2540 (09EC) (RC2540): MQRC_UNKNOWN_CHANNEL_NAME
这是我的示例代码,将捕获带有上述错误代码的异常:
@Test
public void init() throws InitializationException {
MqConfigurationData mqConfigurationData = confManager.getUserConfig().getMqConfigurationData();
MQEnvironment.hostname = mqConfigurationData.getHostname();
MQEnvironment.port = new Integer(mqConfigurationData.getPort());
try {
MQQueueManager mqQueueManager = new MQQueueManager(mqConfigurationData.getQueueManager());
} catch (MQException e) {
throw new InitializationException(ApiExceptionId.INIT_MQ_CONFIGURATION, e.getMessage());
}
}
所以我的问题是:即使在仅限客户端的情况下,我是否也需要通道?
如果您的应用程序与您希望它连接的队列管理器在同一台服务器上执行,那么您不需要连接通道,在这种情况下,应用程序会使用 IPC 以绑定模式连接。
如果您想通过网络连接到队列管理器(在不同的服务器甚至同一台服务器上),那么您确实需要一个通道来连接,在此如果应用程序将使用 TCP/IP.
在客户端模式下连接
有关两种连接模式的更多详细信息,请参阅知识中心页面“Using IBM MQ classes for Java”。
在您的示例中,您通过指定 MQEnvironment.hostname
和 MQEnvironment.port
表明您想要使用客户端连接模式。如果队列管理器上不存在 SVRCONN
通道,则会出现错误 MQRC_UNKNOWN_CHANNEL_NAME
。由于您没有指定 MQEnvironment.channel
,IBM MQ 类 for Java 应用程序可能正在尝试连接一个不存在的 NULL 通道名称。
请注意,根据 v9.0 知识中心页面“Using IBM MQ classes for Java”,用于 Java 的 IBM MQ 类 在功能上已稳定在 IBM MQ 版本 8.0 中的水平.
IBM will make no further enhancements to the IBM MQ classes for Java
and they are functionally stabilized at the level shipped in IBM MQ
Version 8.0.
对于新开发的应用程序,建议使用 IBM MQ 类 for JMS。
我在理解 IBM MQ 时遇到困难。
我想编写一个只向队列发送消息的客户端。据我了解,在我看来,我不需要为该场景使用频道。我的来源是这本书:http://www.redbooks.ibm.com/abstracts/redp0021.html
但是当我尝试连接到队列时,我收到了错误代码
2540 (09EC) (RC2540): MQRC_UNKNOWN_CHANNEL_NAME
这是我的示例代码,将捕获带有上述错误代码的异常:
@Test
public void init() throws InitializationException {
MqConfigurationData mqConfigurationData = confManager.getUserConfig().getMqConfigurationData();
MQEnvironment.hostname = mqConfigurationData.getHostname();
MQEnvironment.port = new Integer(mqConfigurationData.getPort());
try {
MQQueueManager mqQueueManager = new MQQueueManager(mqConfigurationData.getQueueManager());
} catch (MQException e) {
throw new InitializationException(ApiExceptionId.INIT_MQ_CONFIGURATION, e.getMessage());
}
}
所以我的问题是:即使在仅限客户端的情况下,我是否也需要通道?
如果您的应用程序与您希望它连接的队列管理器在同一台服务器上执行,那么您不需要连接通道,在这种情况下,应用程序会使用 IPC 以绑定模式连接。
如果您想通过网络连接到队列管理器(在不同的服务器甚至同一台服务器上),那么您确实需要一个通道来连接,在此如果应用程序将使用 TCP/IP.
在客户端模式下连接有关两种连接模式的更多详细信息,请参阅知识中心页面“Using IBM MQ classes for Java”。
在您的示例中,您通过指定 MQEnvironment.hostname
和 MQEnvironment.port
表明您想要使用客户端连接模式。如果队列管理器上不存在 SVRCONN
通道,则会出现错误 MQRC_UNKNOWN_CHANNEL_NAME
。由于您没有指定 MQEnvironment.channel
,IBM MQ 类 for Java 应用程序可能正在尝试连接一个不存在的 NULL 通道名称。
请注意,根据 v9.0 知识中心页面“Using IBM MQ classes for Java”,用于 Java 的 IBM MQ 类 在功能上已稳定在 IBM MQ 版本 8.0 中的水平.
IBM will make no further enhancements to the IBM MQ classes for Java and they are functionally stabilized at the level shipped in IBM MQ Version 8.0.
对于新开发的应用程序,建议使用 IBM MQ 类 for JMS。