MQclient连接MQserver的mqic32.dll的成功调用
调用mqic32.dll是简单的,但是想要返回给你的一个CompCode = MQCC_OK是不容易的。
首先,确定mqclient和mqserver是ok联通的。在MQ Client(only)连接MQ Server收发消息配置 【转】已经说明。dos命令窗口用手工确认客户端连接服务端没有问题,
其次,也是关键的一步:客户端的环境配置。要把参数写到mqclient.ini的文件中。
#* Module name : mqclient.ini *#
#* Type : WebSphere MQ client configuration file *#
#* Function : Define the client configuration *#
#* *#
#****************************************************************************************# TCP: # KeepAlive=Yes ClientExitPath: ExitsDefaultPath=C:\Program Files (x86)\IBM\WebSphere MQ\exits ExitsDefaultPath64=C:\Program Files (x86)\IBM\WebSphere MQ\exits64 CHANNELS: ServerConnectionParms = CLIENT.A/TCP/192.168.1.5
调用程序:
procedure TForm1.Button3Click(Sender: TObject); var Hconn : MQHCONN; ConnectOpts : MQCNO; CompCode, Reason : MQLONG; QMgrName : MQCHAR48; begin QMgrName := 'A'#0; MQCONN ( @QMgrName, @HConn, @Compcode, @Reason); if CompCode <> MQCC_OK then ShowMessage( 'Connect Failed:'+IntToStr(Reason)) else ShowMessage( 'Connect ok' ); end;
请看下面资料说明:
------------------------------------------------------------------
MQSeries Client 连接Server配置
对服务器的要求:
1.正确安装MQSeries Server,启动侦听器;
2.建立服务器连接通道(即通道类型为SVRCONN的通道),以接受MQI的连接;
如:
DEF CHL(PBC.CHL.YH13) CHLTYPE(SVRCONN) MCAUSER('administrator') REPLACE
3.异构平台的连接需指定MCA用户标识;
对客户机要求:
1.正确安装MQSeries Client;
2.设置系统设置环境变量MQSERVER
MQSERVER=channel_name/protocol_type/hostname(port)
说明:
channel_name: MQSeries Server的服务器连接通道
protocol_type: Client与Server连接使用的网络协议,一般为TCP
hostname: Server的主机名称或IP地址
port: Server的侦听端口,默认1414
示例:
unix/linux 平台在~/.bash_profile添加
export MQSERVER=PBC.CHL.YH13/TCP/'10.50.10.241(22222)'
win32平台在控制面板里设置环境变量
3.在MQSeries Client的安装目录下有mqclient.ini,用来定义Client连接Server的详细配置参数。(具体配置见后面)
4.linux平台客户端程序采用用于非线程应用程序的libmqic.so 库或用于线程应用程序的libmqic_r.so 库进行编译链接,其它平台参见手册。
如:
$gcc -o <prog> <prog> -lmqic
。
。
。
以下信息来自IBM Websphere信息中心.
使用WebSphere MQ 环境变量
本章描述了可与WebSphere® MQ 客户机应用程序配合使用的环境变量。
对于那些尚未设置的变量,WebSphere MQ 会使用缺省值。使用环境变量,您可以更新您的系统概要文件进行永久的更改,从命令行发出命令进行仅对此会话的更改,或者如果您想根据正在运行的应用程序,给一个或多个变量设置特定的值,您可以把命令添加到应用程序使用的命令脚本文件中。
WebSphere MQ 环境变量如下:
除非另有说明,否则,命令在所有WebSphere MQ 客户机平台上都可用。
注:
- WebSphere MQ for z/OS® 不支持任何WebSphere MQ 环境变量。如果您使用这个平台作为您的服务器,请参阅客户机通道定义表以获取有关客户机通道定义表是如何在z/OS 上生成的信息。仍然可以在您的客户机平台上使用WebSphere MQ 环境变量。
对于每个环境变量,使用与您的平台相关的命令来显示当前设置或重新设置变量的值。
例如:
命令
效果
SET MQSERVER=
从Windows® 环境中除去变量
unset MQSERVER
从UNIX® 系统环境中除去变量
SET MQSERVER
显示Windows 上的当前设置
echo $MQSERVER
显示UNIX 系统上的当前设置
set
显示会话的所有环境变量
- MQCCSID它指定所要使用的编码字符集数并覆盖机器的已配置CCSID。
- MQCHLLIB这指定包含客户机通道定义表的文件的目录路径。
- MQCHLTAB这指定包含客户机通道定义表的文件的名称。
- MQIPADDRV它指定要将哪个IP 协议用于通道连接。
- MQNAME它指定WebSphere MQ 进程可以使用的本地NetBIOS 名称。
- MQSERVER此环境变量用于定义小型通道。
- MQSSLCRYP此变量带有一个参数字符串,该字符串允许您配置系统上存在的加密硬件。允许的值与ALTER QMGR 命令的SSLCRYP 参数的相同。
- MQSSLFIPS如果密码术在WebSphere MQ 中执行,那么此变量指定是否仅使用FIPS 认证的算法。值与ALTER QMGR 命令的SSLFIPS 参数的值相同。
- MQSSLKEYR此变量以主干格式指定保存用户数字证书的密钥库的位置。即,它包括完整路径和不带扩展名的文件名。要了解完整的详细信息,请参阅ALTER QMGR 命令的SSLKEYR 参数。
- MQSSLRESET它表示在重新协商SSL 密钥之前在SSL 通道上发送和接收的未加密字节的数目。
使用CHANNELS 节以指定有关客户机通道的信息。
CHANNELS 节中可包括下列属性:
CCSID=number
将使用的编码字符集数量。
这等同于MQCCSID 环境参数。
ChannelDefinitionDirectory=path
指向包含客户机通道定义表的文件的目录路径。
在Windows 上,缺省值为WebSphere MQ 安装目录,通常为C:\Program Files\IBM\WebSphere MQ;在Unix 系统上,缺省值为/var/mqm。
这等同于MQCHLLIB 环境参数。
ChannelDefinitionFile=filename|AMQCLCHL.TAB
包含客户机通道定义表的文件的名称。
这等同于MQCHLTAB 环境参数。
DefRecon=NO|YES|QMGR|DISABLED
DefRecon属性提供管理选项,以启用自动重新连接的客户机程序,或禁用客户机程序(已经自动写入重新连接)的自动重新连接。如果程序使用诸如MQPMO_LOGICAL_ORDER的选项(与重新连接不兼容),那么您可能需要选择执行此操作。
DefRecon选项的解释决于MQCNO_RECONNECT_*值是否仍在客户机程序中设置以及设置为何值。
如果客户机程序使用MQCONN进行连接,或使用MQCONNX设置MQCNO_RECONNECT_AS_DEF选项,那么DefRecon设置的重新连接值将会生效。如果程序中没有设置重新连接值,或DefRecon选项没有设置重新连接值,那么客户机程序不会自动重新连接。
NO
除非MQCONNX覆盖此选项,否则客户机不会自动重新连接。
YES
除非MQCONNX覆盖此选项,否则客户机将自动重新连接。
QMGR
除非MQCONNX覆盖此选项,否则客户机将自动重新连接,但仅至同一队列管理器。QMGR选项与MQCNO_RECONNECT_Q_MGR的作用相同。
DISABLED
禁用重新连接,即使客户机程序使用MQCONNXMQI 调用进行请求。
MQReconnectTimeout
重试客户机重新连接的超时值(以秒计)。缺省值为1800 秒(30 分钟)。
XAReconnectTimeout
重试事务性客户机重新连接的超时值(以秒计)。缺省值为5 秒。
ServerConnectionParms 指定WebSphere MQ 服务器的位置以及要使用的通信方法。此属性仅定义简单的通道;您不能将它用于定义SSL 通道或具有通道出口的通道。它是格式为ChannelName/TransportType/ConnectionName 的字符串。ConnectionName必须是标准网络名。因为正斜杠(⁄)字符用于分隔通道名称、传输类型和连接名称,所以ChannelName不能包含此字符。当ServerConnectionParms 用于定义客户机通道时,可使用的最大消息长度为100 MB。因此,通道的有效最大消息大小为服务器上SVRCONN 通道中指定的值。
这等同于MQSERVER 环境参数。
将ConnectionName指定为已声明TransportType的机器名称(以逗号分隔)列表。通常,只需要一个机器名称。您可以提供多个机器名称来配置具有相同属性的多个连接。将按照连接列表中指定的顺序来尝试连接,直至成功建立连接为止。如果没有连接成功,那么客户机会开始重试处理。连接列表是队列管理器组为可重新连接客户机配置连接的备选方案。
客户机配置文件的ClientExitPath 节
使用ClientExitPath 节来指定客户机上通道出口的缺省位置。
ClientExitPath 节中可包括下列属性:
ExitsDefaultPath=string
指定客户机的32 位通道出口的位置。
ExitsDefaultPath64=string
指定客户机的64 位通道出口的位置。
JavaExitsClassPath=string
当运行Java 出口时将添加至类路径的值。这在任何其他语言中将被出口忽略。
在JMS 配置文件中,将为JavaExitsClassPath 名称提供标准的com.ibm.mq.cfg. 前缀,并且在Websphere MQ V7.0 系统属性上也使用此完整名称。在版本6.0 中,使用系统属性com.ibm.mq.exitClasspath 来指定此属性,该系统属性已记录在版本6.0 自述文件中。现在不推荐使用com.ibm.mq.exitClasspath。如果JavaExitsClassPath 和exitClasspath 均存在,那么将采用JavaExitsClassPath。如果仅存在exitClasspath 用法,那么在Websphere MQ V7.0 中仍会采用它。
客户机配置文件的LU62、NETBIOS 和SPX 节
仅限于在Windows 系统上,使用这些节来为已指定的网络协议指定配置参数。
LU62
使用LU62 节来指定SNA LU 6.2 协议配置参数。此节中可包括下列属性:
Library1=DLLName|WCPIC32
APPC DLL 的名称。
Library2=DLLName|WCPIC32
与Library1 相同,如果代码存储在两个独立的库中,那么将使用它。.
TPName
要在远程站点上启动的TP 名称。
NETBIOS
使用NETBIOS 节来指定NetBIOS 协议配置参数。此节中可包括下列属性:
AdapterNum=number|0
LAN 适配器的编号。
Library1=DLLName|NETAPI32
NetBIOS DLL 的名称。
LocalName=name
LAN 上此计算机为人所知的名称。
这等同于MQNAME 环境参数。
NumCmds=number|1
要分配的命令的数量。
NumSess=number|1
要分配的会话的数量。
SPX
使用SPX 节来指定SPX 协议配置参数。此节中可包括下列属性:
BoardNum=number|0
LAN 适配器的编号。
KeepAlive=YES|NO
打开或关闭KeepAlive 功能。
KeepAlive=YES使SPX 定期检查连接的另一端是否仍可用。如果不可用,那么将关闭该通道。
Library1=DLLName|WSOCK32.DLL
SPX DLL 的名称。
Library2=DLLName|WSOCK32.DLL
与Library1 相同,如果代码存储在两个独立的库中,那么将使用它。
Socket=number|5E86
采用十六进制表示法的SPX 套接字编号。
客户机配置文件的MessageBuffer 节
使用MessageBuffer 节以指定有关消息缓冲区的信息。
MessageBuffer 节中可包括下列属性:
MaximumSize=integer|1
介于范围1 - 999 999 的预读缓冲区的大小(以千字节计)。
存在下列特殊值:
-1
客户机确定适当的值。
0
对客户机禁用预读。
PurgeTime=integer|600
清除预读缓冲区中留下的消息之前的时间间隔(以秒计)。
当客户机应用程序根据MsgId 或CorrelId 选择消息时,预读缓冲区可能包含带有先前请求的MsgId 或CorrelId 且被发送至客户机的消息。然后,这些消息将滞留在预读缓冲区中,直到发出带有相应MsgId 或CorrelId 的MQGET 为止。通过设置PurgeTime,可以清除预读缓冲区中的消息。在预读缓冲区中保留的时间超过清除时间间隔的任何消息都会被自动清除。已从队列管理器上的队列中除去这些消息。因此,除非用户正在浏览它们,否则它们将丢失。
有效范围是1 - 999 999 秒,或者是表示不进行清除的特殊值0。
UpdatePercentage=integer|-1
介于范围1 - 100 的更新百分比值,用于计算阈值以确定客户机应用程序何时对服务器进行新的请求。特殊值-1 指示客户机确定适当的值。
客户机定期将请求发送至服务器,从而指出客户机应用程序已使用的数据量。当客户机通过MQGET 调用检索到的字节数n超过阈值T时,会发送请求。每次新请求被发送至服务器时,n都复位为零。
阈值T 的计算如下:
T = Upper - Lower
上限与预读缓冲区大小相同,由MaximumSize属性指定,以千字节计。其缺省值是100 Kb。
下限小于上限,由UpdatePercentage属性指定。此属性为介于1 与100 之间的数字,缺省值是20。下限的计算如下:
Lower = Upper x UpdatePercentage / 100
示例1:
MaximumSize 和UpdatePercentage 属性的缺省值分别为100 Kb 和20。
客户机调用MQGET 来检索消息并重复此操作。将一直持续此操作,直到MQGET 已使用n 个字节为止。
在使用上述计算方法的情况下,T 为100 减20,等于80 Kb。
因此,当MQGET 调用已从队列中除去80 Kb 时,客户机会自动发出新请求。
示例2:
MaximumSize 属性的缺省值为100 Kb,为UpdatePercentage 选择的值则为40。
客户机调用MQGET 来检索消息并重复此操作。将一直持续此操作,直到MQGET 已使用n 个字节为止。
在使用上述计算方法的情况下,T 为100 减40,等于60 Kb。
因此,当MQGET 调用已从队列中除去60 Kb 时,客户机会自动发出新请求。在使用缺省值的情况下,此示例所用时间比示例1 更少。
因此,选择较大阈值T将有助于降低客户机向服务器发送请求的频率。相反,选择较小阈值T将有助于提高客户机向服务器发送请求的频率。
但是,选择较大阈值T意味着,随着预读缓冲区为空的可能性增大,预读的性能增益减小。当此情况发生时,MQGET 调用可能必须暂停,以等待服务器发出的数据到达。
客户机配置文件的SSL 节
使用SSL 节以指定有关使用SSL 的信息。
SSL 节中可包括下列属性:
OCSPAuthentication=OPTIONAL|REQUIRED|WARN
定义在启用OCSP 且OCSP 撤销检查无法确定证书撤销状态时WebSphere MQ 的行为。有三个可能的值:
OPTIONAL
接受OCSP 检查无法确定其撤销状态的任何证书,并且不会生成警告或错误消息。SSL 连接会继续,就好像未执行撤销检查一样。
REQUIRED
OCSP 检查必须为已检查的每个SSL 证书生成明确的撤销结果。无法验证其撤销状态的任何SSL 证书将被拒绝,且显示错误消息。如果队列管理器SSL 事件消息已启用,那么将生成具有MQRQ_SSL_HANDSHAKE_ERROR 的ReasonQualifier 的MQRC_CHANNEL_SSL_ERROR 消息。该SSL 连接已关闭。
这是缺省值。
WARN
如果OCSP 撤销检查无法确定任何SSL 证书的撤销状态,那么队列管理器错误日志中将报告警告。如果队列管理器SSL 事件消息已启用,那么将生成具有MQRQ_SSL_UNKNOWN_REVOCATION 的ReasonQualifier 的MQRC_CHANNEL_SSL_WARNING 消息。该SSL 连接被允许继续。
SSLCryptoHardware=string
设置配置系统上存在的加密硬件所需的参数字符串的名称。
指定下列格式的字符串:GSK_PKCS11=driver path and filename;token label;token password;symmetric cipher setting;
驱动程序路径是为PKCS #11 卡提供支持的共享库的绝对路径。驱动程序文件名是共享库的名称。例如,PKCS #11 驱动程序路径和文件名所需的值为/usr/lib/pkcs11/PKCS11_API.so。要通过GSKit 访问对称密码运算,请指定对称密码设置参数。此参数值为以下任何一个:
SYMMETRIC_CIPHER_OFF
不访问对称密码运算。这是缺省设置。
SYMMETRIC_CIPHER_ON
访问对称密码运算。
该字符串的最大长度为256 个字符。缺省值为空白。如果指定的字符串未采用以上列出的格式,那么将会出错。
SSLFipsRequired=YES|NO
指定当密码术在WebSphere MQ 中执行时是否仅使用FIPS 认证的算法。如果配置了加密硬件,那么使用的加密模块是硬件产品所提供的那些模块,它们可能是也可能不是FIPS 认证的特定级别。这取决于正在使用的硬件产品。
SSLKeyRepository=pathname
保存用户数字证书的密钥库的位置(采用主干格式)。即,它包括完整路径和不带扩展名的文件名。
SSLKeyResetCount=integer|0
在重新协商SSL 密钥之前在SSL 通道上发送和接收的未加密字节的数目。
该值必须介于范围0 - 999 999 999。
缺省值为0,它表示从不会重新协商密钥。
如果指定介于1 与32768 之间的值,那么SSL 和TLS 通道将使用密钥复位计数32768(32Kb)。这是为了避免由于密钥复位值很小而出现的过多密钥复位。
客户机配置文件的TCP 节
使用TCP 节来指定TCP 网络协议配置参数。
TCP 节中可包括下列属性:
ClntRcvBuffSize=number|32768
TCP/IP 接收缓冲区的大小(以字节为单位)。
ClntSndBuffSize=number|32768
TCP/IP 发送缓冲区的大小(以字节为单位)。
Connect_Timeout=number
尝试连接套接字超时之前的秒数;除非您使用非零客户机通道权重配置通道,在这种情况下,缺省值将为5,否则,缺省值为0。
IPAddressVersion=MQIPADDR_IPV4|MQIPADDR_IPV6
指定要用于通道连接的IP 协议。
它具有的字符串值可能是MQIPADDR_IPV4或MQIPADDR_IPV6。这些值在ALTER QMGR IPADDRV中分别与IPV4和IPV6的含义相同。
KeepAlive=YES|NO
打开或关闭KeepAlive 功能。KeepAlive=YES 使TCP/IP 定期检查连接的另一端是否仍可用。如果不可用,那么将关闭该通道。
Library1=DLLName|WSOCK32
(仅限于Windows)TCP/IP 套接字DLL 的名称。