Java API接口

  • 数据交换平台 API编程手册
    (Java语言)


    -- ZSMQ系列文档 --

    目          录
    第一章 ZSMQ API FOR JAVA 概述2
    1.1.ZSMQ API FOR JAVA 概述2
    1.2.ZSMQ API FOR JAVA 编程步骤2
    第二章ZSMQ API FOR JAVA 参考3
    2.1.ZSMQJAVAAPI(交换平台API类)3
    2.1.1ZSMQJavaAPI.ConnectZSMQ(连接交换管理平台)3
    2.1.2ZSMQJavaAPI.DisconnectZSMQ(断开与交换管理平台的连接)4
    2.2.ZSMQEXCEPTION(交换平台异常类)4
    2.2.1ZSMQGetLastError(取得错误描述信息)4
    2.2.2ZSMQGetErrorTypeCode(取得错误类型码)4
    2.2.3ZSMQGetErrorReasonCode(取得错误原因代码)4
    2.3.ZSMQINTERFACE(交换操作API接口)5
    2.3.1Commit(提交操作)5
    2.3.2Rollback(回滚操作)5
    2.3.3SendBuffer(发送内存缓冲)6
    2.3.4SendFile(发送文件)7
    2.3.5GetFile(收取文件)9
    2.3.6CreateMessage(建立消息)10
    2.3.7GetMessageInterface(取得消息)11
    2.3.8DestoryMessageInterface (销毁消息接口)13
    2.3.9DeleteMessage(删除消息)13
    2.3.10LockQueue(锁队列)14
    2.3.11UnlockQueue(解锁队列)15
    2.3.12GetQueueCount(取得队列数量)15
    2.3.13GetQueueName(取得队列的名称)15
    2.3.14GetQueueDataTypeCount(取得队列中数据类型的数量)15
    2.3.15GetQueueDataTypeName(取得数据类型的名称)16
    2.3.16GetQueueDepth(取得队列的深度)16
    2.4.ZSMQMESSAGEINTERFACE(消息操作API接口)18
    2.4.1GetMessageLength(取得消息长度)18
    2.4.2GetRemainMessageLength(取得剩余消息长度)18
    2.4.3GetDataFromMessage(从消息中取得数据)18
    2.4.4WriteDataFromMessage(在消息中写入数据)18
    2.4.5SeekMessage(在消息中移动指针)19
    附录:ZSMQ 代码信息参考20
    3.1.原因码类型参考20
    3.2.错误码参考20

    第一章 ZSMQ API FOR Java 概述

    1.1.ZSMQ API FOR Java 概述

    ZSMQ API FOR Java 要求使用JDK1.2版本以上。

    1.2.ZSMQ API FOR Java 编程步骤

    1.在classpath 中增加ZSMQAPI.6.0.jar
    2.在.java文件中引用包import ZSMQJavaAPI.*;
    3.调用ZSMQJavaAPI.ConnectZSMQ方法得到接口ZSMQInterface
    4.使用接口ZSMQInterface 提供的方法进行操作,如发送文件、接收文件、提交操作、回滚操作等。当调用的方法返回失败的时候,函数会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode椒ú榭创砦罄嘈汀⒌饔靡斐@嗵峁┑腪SMQGetErrorReasonCode方法查看错误原因代码。
    5.最后调用ZSMQJavaAPI.DisconnectZSMQ方法 关闭与数据交换管理平台之间的连接通道。

     

     

     

    第二章ZSMQ API FOR Java 参考

    2.1.ZSMQJavaAPI(交换平台API类)

    2.1.1ZSMQJavaAPI.ConnectZSMQ(连接交换管理平台)

    方法说明:ZSMQJavaAPI.ConnectZSMQ方法用来连接交换管理平台,在客户端与服务器之间建立连接通道,如果成功返回ZSMQInterface接口,以后对平台的所有操作均通过ZSMQInterface接口完成;如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:String szQueueManagerName 队列管理器名称
                     int usListenerPort 队列服务监听端口
    输出参数:函数本身输出ZSMQInterface接口
    备注信息:szQueueManagerName 输入NULL表示连接缺省队列管理器,usListenerPort输入0表示连接默认的监听端口
    例子程序:
    import ZSMQJavaAPI.*;
    public class SendFile {
       public static void main(String[] args) {
           ZSMQInterface m_ZSMQInterface = null;
           try {
               //连接交换平台
               m_ZSMQInterface = ZSMQJavaAPI.ConnectZSMQ("", 1223);
    //处理
    //…………………..
    //断开与交换平台的连接
    ZSMQJavaAPI.DisconnectZSMQ(m_ZSMQInterface);
           }
    catch (ZSMQException e) {
               System.out.print(e.ZSMQGetLastError);
               System.out.print(e. ZSMQGetErrorTypeCode());
               System.out.print(e. ZSMQGetErrorReasonCode ());
              return;
    }
           }
    }

    2.1.2ZSMQJavaAPI.DisconnectZSMQ(断开与交换管理平台的连接)

    方法说明:ZSMQJavaAPI.DisconnectZSMQ() 用来断开与交换管理平台之间的连接,并释放所有申请的内存。
    输入参数:pZSMQPlat  ZSMQInterface接口
    输出参数:无
    备注信息:无
    例子程序:参考2.1.1的例子程序

    2.2.ZSMQException(交换平台异常类)

    2.2.1ZSMQGetLastError(取得错误描述信息)

    方法说明:ZSMQGetLastError 用来取得错误的描述信息,当方法抛出异常后可以通过这个函数取得异常的描述信息。
    输入参数:无
    输出参数:函数本身返回String 指向错误的描述信息
    备注信息:无
    例子程序:参考2.2.1的例子程序

    2.2.2ZSMQGetErrorTypeCode(取得错误类型码)

    方法说明:ZSMQGetErrorTypeCode() 用来取得错误的类型码,当方法抛出异常后可以通过这个函数取得错误的类型码,来确定下一步应用程序如何进行处理。
    输入参数:无
    输出参数:函数本身返回long 为错误类型码
    备注信息:错误类型码 0 表示没有错误
    错误类型码10000表示函数调用的时候输入的参数出现错误
    错误类型码20000表示服务器返回错误,需查看错误原因码
    错误类型码40000表示磁盘IO方面出现错误
    错误类型码80000表示与服务器连接方面出现错误
    例子程序:参考2.1.1的例子程序

    2.2.3ZSMQGetErrorReasonCode(取得错误原因代码)

    方法说明:ZSMQGetErrorReasonCode() 用来取得错误的原因代码,当方法抛出异常后可以通过这个函数取得错误的原因代码。
    输入参数:无
    输出参数:函数本身返回long 为错误原因代码
    备注信息:请参考本文档中ZSMQ代码信息参考章节获得详细的信息
    例子程序:参考2.1.1的例子程序
    2.3.ZSMQInterface(交换操作API接口)

    2.3.1Commit(提交操作)

    方法说明:Commit() 用来提交操作,当进行消息操作(取出、建立)时,需要要进行提交才能真正的生效。如果调用失败函数会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:无
    输出参数:无
    备注信息:支持无限级提交
    例子程序:无

    2.3.2Rollback(回滚操作)

    方法说明:Rollback() 用来回滚操作,当进行消息操作(取出、建立)时,为了保证事务的一致性可以通过回滚来撤销之前的所有操作。如果调用失败函数会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:无
    输出参数:无
    备注信息:支持无限级回滚,注意当客户端断开与服务器的连接时,所有未提交的操作会被自动回滚。
    例子程序:无

    2.3.3DTCommit(二次提交)

    函数说明:DTCommit() 用来提交操作,DTCommit与Commit的功能相同,当进行消息操作(取出、建立)时,需要要进行提交才能真正的生效。DTCommit支持二次提交操作,应用程序将提交的接口传入DTCommit,DTCommit在内部调用接口进行应用层的提交,并保证两个事务的一致性。如果调用失败函数会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:ZSMQCallbackInterface Callback
    输出参数:无
    备注信息:支持无限级提交
    例子程序:无

    2.3.4SendBuffer(发送内存缓冲)

    方法说明:SendBuffer() 用来向交换管理平台发送一段缓冲,如果调用失败函数会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szTargetID目的地地址列表
    usTargetIDCount目的地地址个数
    szTargetQueueName目的地接收队列名称
    szDataType数据类型
    cPriority优先级别 0 ~ 9
    cEncrypt加密算法 0 为没有加密 保留字段
    cCompress   压缩算法 0 为没有压缩 保留字段
    cSendType   发送类型 0 保留字段
    cReply         是否回执 保留字段
    ulTimeOut      超时时间 0 为此标记无效 单位秒
    szBuffer             要发送的缓存
    ulBufferLen    缓存的大小
    szDataQueueName数据队列名称
    输出参数:无
    备注信息:目的地地址是一个String数组,目的地的最大长度为10个字节;数据类型最大长度为10个字节。
    szTargetQueueName 目的地接收队列的名称,输入null或者””表示默认cEncrypt、cCompress、cSendType、cReply为保留字段,在传输过程中全程保留输入的值,应用程序可以根据需要自行填写。
    ulTimeOut 为超时时间单位是秒,输入0表示这个数据不会因为超时而被数据交换平台抛弃,存活时间的算法从建立消息开始计时,超过存活时间,消息会被交换平台删除,且这种删除是不可恢复的。
    数据队列名称表示这段buffer发向哪一个队列,输入null表示默认的发送队列,输入其他队列的名称会被放置到相应的队列中,注意只有发送队列中的数据才能够被交换管理平台发送走。
    例子程序:

    import ZSMQJavaAPI.*;
    public class SendFile {
       public static void main(String[] args) {
           ZSMQInterface m_ZSMQInterface = null;
           try {
               //连接交换平台
               m_ZSMQInterface = ZSMQJavaAPI.ConnectZSMQ("", 1223);
    ZSMQInterface->SendBufferToPlat(“targetid”,//目的地
    1,//目的地地址个数
    “”,//目的地队列
     “datatype”,//数据类型
     5,//优先级别(0~9)
     0,0,0,0,//4个保留字段
                                 0,//超时时间 0为永远不超时
                                 “Hello World!”,//Buffer
                                 Sizeof(“Hello World!”)+1,//BufferLen
                   0);//发送到默认队列中
    //提交到操作系统
    m_ZSMQInterface.Commit();
    //断开与交换平台的连接
    ZSMQJavaAPI.DisconnectZSMQ(m_ZSMQInterface);
           }
    catch (ZSMQException e) {
               System.out.print(e.ZSMQGetLastError);
               System.out.print(e. ZSMQGetErrorTypeCode());
               System.out.print(e. ZSMQGetErrorReasonCode ());
              return;
    }
           }
    }

    2.3.5SendFile(发送文件)

    方法说明:SendFile()用来向交换管理平台发送一个文件,如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szTargetID目的地地址列表
    usTargetIDCount目的地地址个数
    szTargetQueueName目的地接收队列名称
    szDataType数据类型
    cPriority优先级别 0 ~ 9
    cEncrypt加密算法 0 为没有加密 保留字段
    cCompress   压缩算法 0 为没有压缩 保留字段
    cSendType   发送类型 0 保留字段
    cReply         是否回执 保留字段
    ulTimeOut      超时时间 0 为此标记无效 单位秒
    szFileDir               发送文件所在的目录
    szFileName    发送文件的名称
    szDataQueueName数据队列名称
    输出参数:无
    备注信息:目的地地址是一个String数组,目的地的最大长度为10个字节;数据类型最大长度为10个字节。
    szTargetQueueName 目的地接收队列的名称,输入null或者””表示默认cEncrypt、cCompress、cSendType、cReply为保留字段,在传输过程中全程保留输入的值,应用程序可以根据需要自行填写。
    ulTimeOut 为超时时间单位是秒,输入0表示这个数据不会因为超时而被数据交换平台抛弃,存活时间的算法从建立消息开始计时,超过存活时间,消息会被交换平台删除,且这种删除是不可恢复的。数据队列名称表示文件发向哪一个队列,输入null表示默认的发送队列,输入其他队列的名称会被放置到相应的队列中,注意只有发送队列中的数据才能够别交换管理平台发送走,发送文件名称的最大长度为75字节。

    例子程序:

    import ZSMQJavaAPI.*;
    public class SendFile {
       public static void main(String[] args) {
           ZSMQInterface m_ZSMQInterface = null;
           try {
               //连接交换平台
               m_ZSMQInterface = ZSMQJavaAPI.ConnectZSMQ("", 1223);
    m_ZSMQInterface->SendFileToPlat(“targetid”,//目的地
    1,//目的地个数
    “”,//目的地队列
    “datatype”,//数据类型
    5,//优先级别(0~9)
    0,0,0,0,//4个保留字段
                                0,//超时时间 0为永远不超时
                                “/ZSMQ/senddir”,//发送文件所在的目录
                                “hello word.txt”,//文件名称
                                0);//发送到默认队列中
    //提交到操作系统
    m_ZSMQInterface.Commit();
    //断开与交换平台的连接
    ZSMQJavaAPI.DisconnectZSMQ(m_ZSMQInterface);
           }
    catch (ZSMQException e) {
               System.out.print(e.ZSMQGetLastError);
               System.out.print(e. ZSMQGetErrorTypeCode());
               System.out.print(e. ZSMQGetErrorReasonCode ());
              return;
    }
           }
    }
    2.3.6GetFile(收取文件)

    方法说明:GetFile() 用来从交换管理平台中收取一个文件,如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szDatatype数据类型
    szFileDir文件所在的目录
    szDataQueueName数据队列名称
    bOverWrite如果有同名文件已经存在是否覆盖
    输出参数:函数返回收取文件的结果
    szFileName输出文件名称
    pGWHead输出网关头信息
    备注信息:如果接收的消息文件名称为空(发送的时候以消息方式发送),则系统会自动为这个消息生成一个文件名称。

    例子程序:
    import ZSMQJavaAPI.*;
    public class SendFile {
       public static void main(String[] args) {
           ZSMQInterface m_ZSMQInterface = null;
           try {
               //连接交换平台
               m_ZSMQInterface = ZSMQJavaAPI.ConnectZSMQ("", 1223);
    m_ZSMQInterface ->GetFile(“xxxxx”,//! 数据类型
     “/rcvdir”,//! 文件所在的目录
     szFileName,//! 输出文件名 最长75字节
     0,//! 数据队列名称 (如果填写,数据将从本地数据队列中取出)
     0,//! 输出数据的网关头(输入NULL的时候,就不输出网关头)
     true);//! 重名是否覆盖
    //提交到操作系统
    m_ZSMQInterface.Commit();
    //断开与交换平台的连接
    ZSMQJavaAPI.DisconnectZSMQ(m_ZSMQInterface);
           }
    catch (ZSMQException e) {
               System.out.print(e.ZSMQGetLastError);
               System.out.print(e. ZSMQGetErrorTypeCode());
               System.out.print(e. ZSMQGetErrorReasonCode ());
              return;
    }
           }
    }
    2.3.7CreateMessage(建立消息)

    方法说明:CreateMessage()用来在交换管理平台中建立一个消息,这是一个低级函数,使用起来非常灵活,SendBuffer方法和SendFile方法也是通过本方法编写而成。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szTargetID目的地
    szTargetQueueName目的地接收队列名称
    szDataType数据类型
    cPriority优先级别 0 ~ 9
    cEncrypt加密算法 0 为没有加密 保留字段
    cCompress   压缩算法 0 为没有压缩 保留字段
    cSendType   发送类型 0 保留字段
    cReply         是否回执 保留字段
    ulTimeOut      超时时间 0 为此标记无效 单位秒
    ulMessageLength消息长度
    szFileName文件名称
    szDataQueueName数据队列名称
    bClone是否要建立一个消息的克隆消息
    ulMsgNO克隆消息的编号
    ulMsgOffset克隆消息的偏移量
    szDataQueueName数据队列名称
    输出参数:函数本身返回消息访问接口ImessageInterface
    ulMsgNO返回消息的编号
    ulMsgOffset返回消息的偏移量
    备注信息:关于消息的克隆,克隆可以使多条消息共用同一个数据块,例如同一个消息需要发送给若干个目的地,可以让多个目的地共同使用同一个数据块,数据交换管理平台会分别为每一个消息块进行计数,这样做可以节省大量的IO操作,这个特性对于广播发送尤其有效。克隆的使用方法也很简单,在建立第一个消息的时候bClone = false ,并传入两个CmessageHandle对象,如果方法调用成功,ulMsgNO, ulMsgOffset会返回所建消息的消息编号以及偏移量,以后再建立消息的时候,bClone = true,并传入ulMsgNO, ulMsgOffset即可。关于其他备注信息请参考SendBuffer 和 SendFile 中的说明。

    例子程序:
    import ZSMQJavaAPI.*;
    public class SendFile {
       public static void main(String[] args) {
           ZSMQInterface m_ZSMQInterface = null;
           try {
               //连接交换平台
               m_ZSMQInterface = ZSMQJavaAPI.ConnectZSMQ("", 1223);
    ZSMQMessageInterface* pMessageInterface = m_ZSMQInterface->CreateMessage(
    “targetid”,//目的地
    1,//目的地个数
    “”,//目的地队列
    “datatype”,//数据类型
    5,//优先级别(0~9)
    0,0,0,0,//4个保留字段
                                 0,//超时时间 0为永远不超时
    12,//消息长度
    “”//文件名称
    );
    pMessageInterface-> WriteDataToMessage(“hello word !”,12);
    //提交到操作系统
    m_ZSMQInterface.Commit();
    //断开与交换平台的连接
    ZSMQJavaAPI.DisconnectZSMQ(m_ZSMQInterface);
           }
    catch (ZSMQException e) {
               System.out.print(e.ZSMQGetLastError);
               System.out.print(e. ZSMQGetErrorTypeCode());
               System.out.print(e. ZSMQGetErrorReasonCode ());
              return;
    }
           }
    }

     

    2.3.8GetMessageInterface(取得消息)
    方法说明:GetMessageInterface()用来从交换平台中取得消息。这是一个低级函数,提供给用户一种更为灵活的方式取得消息,GetFile方法也是调用这个函数编写而成。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szDatatype数据类型
    szDataQueueName数据队列名称
    bBrowseQueue是否遍历队列
    pMsgHandle消息句柄(遍历的时候使用)
    bDeleteFromQueue取出消息后是否删除

    输出参数:无
    pGWHead输出网关头信息
    pMsgHandle输出消息句柄

    备注信息:使用GetMessageInterface取得消息,返回消息操作接口,使用得当的话可以减少磁盘IO,尤其是带有数据头的消息。GetMessageInterface可以遍历整个队列,在一些特殊的应用中可以利用这个特性进行消息处理。遍历队列的方法为:首先找到第一条消息,输入bBrowseQueue =false bDeleteFromQueue= false第一条消息不是浏览消息且取出消息后不要删除这条消息,这时pMsgHandle会返回该消息的句柄,取下一条消息的时候,输入bBrowseQueue = true bDeleteFromQueue= false 以及第一条消息的返回的pMsgHandle,即可得到下一条消息了,如果下一条消息存在pMsgHandle变成了该消息的句柄,这样就可以循环调用本函数达到遍历整个队列的目的了。

    例子程序:
    import ZSMQJavaAPI.*;
    public class SendFile {
       public static void main(String[] args) {
           ZSMQInterface m_ZSMQInterface = null;
           try {
               //连接交换平台
               m_ZSMQInterface = ZSMQJavaAPI.ConnectZSMQ("", 1223);
    ZSMQMessageInterface* pMessageInterface = pZSMQI-> ZSMQGetLastErrorInterface (
    “szDataType”,//数据类型
    “”,//队列名称
    “datatype”,//数据类型
    false,//是否遍历队列
    &m_GWHead,//网关头
                                 &lMsgHandle,//消息句柄
    12,//消息长度
    false//取出消息后是否删除
    );
    long lMsgLen = pMessageInterface-> BHGetMessageLength();
    if (lMsgLen != pMessageInterface-> GetDataFromMessage (pData, lMsgLen))
    {
               System.out.print(e.ZSMQGetLastError);
               System.out.print(e. ZSMQGetErrorTypeCode());
               System.out.print(e. ZSMQGetErrorReasonCode ());
    return;
    }
    //提交到操作系统
    m_ZSMQInterface.Commit();
    //断开与交换平台的连接
    ZSMQJavaAPI.DisconnectZSMQ(m_ZSMQInterface);
           }
    catch (ZSMQException e) {
               System.out.print(e.ZSMQGetLastError);
               System.out.print(e. ZSMQGetErrorTypeCode());
               System.out.print(e. ZSMQGetErrorReasonCode ());
              return;
    }
           }
    }


    2.3.9DestoryMessageInterface (销毁消息接口)

    方法说明:DestoryMessageInterface()用来关闭CreateMessage() 或者BHGetMessageInterface()取得消息接口。
    输入参数:pMessageInterface消息接口
    输出参数:无
    备注信息:无
    例子程序:无

    2.3.10DeleteMessage(删除消息)

    方法说明:DeleteMessage()用来删除一个消息,本方法删除以浏览方式取得的消息,BHGetMessageInterface得到该消息的GWHead与pMsgHandle,输入这两个参数和该消息的数据类型就可以删除该消息了。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szDatatype数据类型
    szDataQueueName数据队列名称
    pGWHead输出网关头信息
    lMsgHandle消息句柄
    输出参数:无
    备注信息:删除消息前一定要先关闭该消息的访问接口
    例子程序:参考2.9的例子程序

     

     


    2.3.11LockQueue(锁队列)

    方法说明:LockQueue()用来锁定队列,对于多线程、多进程同时操作队列时提供一个锁的机制。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szDatatype数据类型
    szDataQueueName数据队列名称
    输出参数:无
    备注信息:该锁是逻辑锁不是物理锁
    例子程序:

    import ZSMQJavaAPI.*;
    public class SendFile {
       public static void main(String[] args) {
           ZSMQInterface m_ZSMQInterface = null;
           try {
               //连接交换平台
               m_ZSMQInterface = ZSMQJavaAPI.ConnectZSMQ("", 1223);
    //锁队列
    m_ZSMQInterface ->LockQueue(“XXXXX”,//数据类型
    “”//数据队列名称);
    m_ZSMQInterface ->UnlockQueue(“XXXXX”,//数据类型
    “”//数据队列名称);
    //断开与交换平台的连接
    ZSMQJavaAPI.DisconnectZSMQ(m_ZSMQInterface);
           }
    catch (ZSMQException e) {
               System.out.print(e.ZSMQGetLastError);
               System.out.print(e. ZSMQGetErrorTypeCode());
               System.out.print(e. ZSMQGetErrorReasonCode ());
              return;
    }
           }
    }

     

     

     

    2.3.12UnlockQueue(解锁队列)

    方法说明:UnlockQueue()用来解锁队列,如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szDatatype数据类型
    szDataQueueName数据队列名称
    输出参数:无
    备注信息:无
    例子程序:参考2.3.10的例子程序

    2.3.13GetQueueCount(取得队列数量)

    方法说明:GetQueueCount()用来取得队列管理器中管理的队列数量。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:无
    输出参数:函数本身返回队列的数量
    备注信息:队列管理器中至少含有两个队列发送队列和接收队列,0为发送队列、1为接收队列
    例子程序:请参考2.3.16

    2.3.14GetQueueName(取得队列的名称)

    方法说明:GetQueueName()用来取得队列的名称。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:lQueueNO队列的编号
    输出参数:无
    szQueueName数据队列名称
    备注信息:发送队列 sendqueue 接收队列rcvqueue
    例子程序:请参考2.3.16

    2.3.15GetQueueDataTypeCount(取得队列中数据类型的数量)

    方法说明:GetQueueDataTypeCount()用来取得队列中数据类型的数量。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szDataQueueName数据队列名称
    输出参数:函数本身返回队列中含有的数据类型数量
    备注信息:发送队列返回的是队列中的方向数
    例子程序:请参考2.3.16

    2.3.16GetQueueDataTypeName(取得数据类型的名称)

    方法说明:GetQueueDataTypeName()用来取得队列中某一数据类型的名称。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:szDataQueueName数据队列名称
    lDataTypeNO数据类型编号
    输出参数:无
    szDataTypeName 数据类型名称
    备注信息:无
    例子程序:请参考2.3.16


    2.3.17GetQueueDepth(取得队列的深度)

    方法说明:GetQueueDepth()用来取得队列的深度,深度即队列中含有的消息数量,如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。

    输入参数:szDatatype数据类型
    szDataQueueName数据队列名称
    ucPriority优先级别
    输出参数:函数本身返回队列的深度
    备注信息:优先级别输入’*’ (47)表示优先级全部
    例子程序:

    import ZSMQJavaAPI.*;

    public class ViewQueue {
       public static void main(String[] args) {
           ZSMQInterface m_ZSMQInterface = null;
           try {
               //连接交换平台
               m_ZSMQInterface = ZSMQJavaAPI.ConnectZSMQ("", 1223);
               StringBuffer sbQueueName = new StringBuffer();
               StringBuffer sbDataType = new StringBuffer();
               int iQueueCount = m_ZSMQInterface.GetQueueCount();
               System.out.println("共有队列:" + iQueueCount + "个");
               for (int i = 0; i < iQueueCount; i++) {
                   m_ZSMQInterface.GetQueueName(i, sbQueueName);
                   System.out.println("队列[" + sbQueueName + "]:");
                   int iDatatypeCount = m_ZSMQInterface.GetQueueDataTypeCount(
                           sbQueueName.toString());
                   for (int m = 0; m < iDatatypeCount; m++) {
                       m_ZSMQInterface.GetQueueDataTypeName(sbQueueName.toString(),
                               m, sbDataType);
                       int iDepth = m_ZSMQInterface.GetQueueDepth(sbDataType.
                               toString(), sbQueueName.toString(), (byte) '*');
                       System.out.println("[" + sbDataType + "]: 深度[" + iDepth +
                                          "]");
                   }
               }
           } catch (ExplatException e) {
            System.out.print(e.ZSMQGetLastError);
            System.out.print(e. ZSMQGetErrorTypeCode());
            System.out.print(e. ZSMQGetErrorReasonCode ());
               return;
           }
       }
    }


    2.4.ZSMQMessageInterface(消息操作API接口)

    2.4.1GetMessageLength(取得消息长度)

    方法说明:GetMessageLength()用来取得消息长度。
    输入参数:无
    输出参数:函数本身返回消息长度
    备注信息:无
    例子程序:无

    2.4.2GetRemainMessageLength(取得剩余消息长度)

    方法说明:GetRemainMessageLength()用来取得剩余的消息长度。
    输入参数:无
    备注信息:取消息、写入消息以及移动消息指针会对这个值产生影响
    例子程序:无

    2.4.3GetDataFromMessage(从消息中取得数据)

    方法说明:GetDataFromMessage()用来从消息中取得数据。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:pData数据缓冲
    ulDataLength要取得的长度
    输出参数:函数本身返回取得的字节数
    备注信息:取得的数据的同时会向后移动消息指针
    例子程序:无


    2.4.4WriteDataFromMessage(在消息中写入数据)

    方法说明:WriteDataToMessage()用来在消息中写入数据。如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:pData数据缓冲
    ulDataLength要写入的长度
    输出参数:函数本身返回执行结果
    备注信息:写入数据的同时会向后移动消息指针
    例子程序:无
    2.4.5SeekMessage(在消息中移动指针)

    方法说明:SeekMessage()通过ZSMQMessageInterface用来在消息中移动指针,如果调用失败方法会抛出异常ZSMQException,通过异常类提供的ZSMQGetLastError方法查看错误信息、调用异常类提供的ZSMQGetErrorTypeCode方法查看错误类型、调用异常类提供的ZSMQGetErrorReasonCode方法查看错误原因代码。
    输入参数:ulOffset数据的相对位置
    iSeekMode移动的模式
    输出参数:函数本身返回执行结果
    备注信息:iSeekMode ImessageInterface::SEEK_SET = 0 从开始计算相对位置ImessageInterface::SEEK_CUR = 1 从当前位置计算相对位置ImessageInterface::SEEK_END  = 2从最后计算相对位置
    例子程序:无


    附录:ZSMQ 代码信息参考

    3.1.原因码类型参考

    原因码原因标识原因描述
    0ZSMQERROR_NOERROR没有错误
    10000ZSMQERROR_PARAMETERERROR参数输入错误
    20000ZSMQERROR_SERVERERROR运行期错误
    40000ZSMQERROR_IOERROR磁盘IO错误
    80000ZSMQERROR_NETERROR网络层错误

     

    3.2.错误码参考

    错误码错误类型错误描述
    10001参数输入错误目的地不能为空
    10002参数输入错误目的地长度范围错误
    10003参数输入错误目的地队列名称长度
    10004参数输入错误不能直接将消息发送到目的地的发送队列中
    10005参数输入错误数据类型不能为空
    10006参数输入错误数据类型长度范围错误
    10007参数输入错误文件名称长度范围错误
    10008参数输入错误数据队列名称长度范围错误
    10009参数输入错误队列管理器名称长度范围错误
    10010参数输入错误优先级别取值范围错误
    10011参数输入错误以浏览的方式取得消息必须输入网关头
    10012参数输入错误以浏览的方式取得消息必须输入消息句柄
    10013参数输入错误以浏览的方式取得消息不能直接删除
    10014参数输入错误要发送的文件不存在
    10015参数输入错误接收目录不存在
    10016参数输入错误GB2312字符集不存在(Java API 使用)
    10017参数输入错误文件名称不能为空
    10018参数输入错误要发送的缓存不能为空
    20001运行期错误没有消息
    20002运行期错误服务器返回信息错误
    20003运行期错误文件已经存在
    40001磁盘IO错误打开文件失败
    40002磁盘IO错误读取文件失败
    40003磁盘IO错误写入文件失败
    40004磁盘IO错误移动文件指针失败
    40005磁盘IO错误关闭文件失败
    40006磁盘IO错误队列文件的大小错误
    80001网络层错误向服务器发送请求出错
    80002网络层错误服务器响应超时
    80003网络层错误等待服务器应答出错
    80004网络层错误读取服务器发应答出错
    80005网络层错误建立SOCKET失败
    80006网络层错误连接服务器监听端口失败