我在理解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.hostnameMQEnvironment.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/

10-13 03:23