在我的Vb.net应用程序中,我使用IBM MQ v7.5托管客户端连接连接到队列管理器。到目前为止,我已经在.Config文件中提供了通道名和主机名,并调用以下命令:
MQQueueManager(Qmanagername, Channel, Host)
但现在我有一个AMQCLCHL.TAB文件,里面有频道的详细信息。如何让我的Vb.net应用程序使用AMQCLCHL.TAB文件中的通道名和主机名。
您需要让应用程序知道通道表文件的位置。IBM知识中心展示了使用托管客户端连接类型可以通过三种方式实现这一点:
- 使用.NET应用程序配置文件。在CHANNELS部分中,使用键ChannelDefinitionDirectory指定表所在的目录,使用键ChannelDefinitionFile指定文件名
- 使用环境变量MQCHLLIB指定表所在的目录,使用MQCHLTAB指定表的文件名
- 使用客户端配置文件。在CHANNELS节中,使用属性ChannelDefinitionDirectory指定表所在的目录,使用属性ChannelDefinitionFile指定文件名
然后,您可以更改调用以删除频道和主机名,它将使用上述三种方式之一拾取您指定的频道表。
New MQQueueManager(Qmanagername)
更新以包含评论中的其他信息
如果您的应用程序与队列管理器在同一台服务器上运行,如果您不强制它使用客户端模式,则默认情况下,它将使用服务器绑定以非托管模式进行连接。知识中心对此进行了详细描述。
可以通过设置环境变量NMQ_MQ_LIB将其强制设置为客户端模式。
对于非托管MQ客户端模式,请使用NMQ_MQ_LIB=mqic.dll
对于托管客户端模式,使用NMQ_MQ_LIB=managed
MQC.TRANSPORT_PROPERTY
哈希表属性也可以用来强制它使用客户端模式。
非托管MQ客户端模式示例:
Hashtable properties = new Hashtable();
properties.Add(MQC.TRANSPORT_PROPERTY, "MQC.TRANSPORT_MQSERIES_CLIENT");
return new MQQueueManager(queueManagerName, properties);
托管MQ客户端模式示例:
Hashtable properties = new Hashtable();
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED");
return new MQQueueManager(queueManagerName, properties);