IBM MQ:是否只有必要的发送通道?

时间:2017-06-26 11:02:21

标签: java ibm-mq

我在理解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());
        }

    }

所以我的问题是:即使在仅限客户端的情况下,我是否还需要一个频道?

1 个答案:

答案 0 :(得分:2)

如果您的应用程序在与您想要连接的队列管理器相同的服务器上执行,则需要连接的通道,在这种情况下,应用程序将使用Bindings模式连接IPC。

如果您想通过网络连接到队列管理器(在不同的服务器上,甚至是同一台服务器上),那么您执行需要一个要连接的通道,在这种情况下应用程序将连接在使用TCP / IP的客户端模式下。

有关两种连接模式的详细信息,请参阅知识中心页面“Using IBM MQ classes for Java”。

在您的示例中,您通过指定MQEnvironment.hostnameMQEnvironment.port表示您要使用客户端连接模式。如果队列管理器上不存在MQRC_UNKNOWN_CHANNEL_NAME通道,则会出现错误SVRCONN。由于您未指定MQEnvironment.channel,因此Java MQ应用程序类可能尝试使用不存在的NULL通道名称进行连接。

请注意,根据v9.0知识中心页面“Using IBM MQ classes for Java”,IBM MQ Classes for Java已在功能上稳定在IBM MQ V8.0中提供的级别。

  

IBM将不再对Java MQ Java类进行进一步的增强   它们在功能上稳定在IBM MQ中提供的级别   版本8.0。

建议将IBM MQ Classes for JMS用于新开发的应用程序。

相关问题