我在理解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
表示要使用客户端连接模式。如果队列管理器上不存在MQRC_UNKNOWN_CHANNEL_NAME
通道,则会出现错误SVRCONN
。由于未指定MQEnvironment.channel
,因此Java应用程序的IBM MQ类可能正在尝试使用不存在的NULL通道名称进行连接。
请注意,根据v9.0知识中心页面“ Using IBM MQ classes for Java”,用于Java的IBM MQ类已在功能上稳定在IBM MQ版本8.0中提供的级别。
IBM将不对Java的IBM MQ类做进一步的增强。
并且它们在功能上稳定在IBM MQ随附的级别
8.0版。
建议为新开发的应用程序使用IBM MQ JMS类。
关于java - IBM MQ:仅用于发送的 channel 是否必要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44758237/