MQ开发C教程
更新时间:2024-01-22 07:38:01 阅读量: 教育文库 文档下载
MQ发送消息和接收消息例子, /////////////
//MQ初始化 MQHOBJ hObj;
MQLONG O_options, CompCode, Reason;
MQOD od = {MQOD_DEFAULT}; // Object Descriptor MQMD md = {MQMD_DEFAULT}; // Message Descriptor MQPMO pmo = {MQPMO_DEFAULT}; // put message options MQGMO gmo = {MQGMO_DEFAULT}; // get message options
memcpy(md.Format,MQFMT_STRING, (size_t)MQ_FORMAT_LENGTH);
strncpy(od.ObjectName, \(size_t)MQ_Q_NAME_LENGTH); O_options = MQOO_INPUT_AS_Q_DEF /* open queue for receive */ + MQOO_BROWSE
+ MQOO_FAIL_IF_QUIESCING; /* but not if MQM stopping */ MQOPEN(hConn, &od, O_options, &hObj, &CompCode, &Reason); if ( CompCode==MQCC_FAILED ) {
sprintf(sErrMsg, \打开队列: %s 失败, MQ_ERR_CODE: %d\Reason); return -1; }
//发送消息
md.Expiry = 60*10;
strncpy( od.ObjectName, \ //sMsgBuf 消息内容 piMsgLen 消息长度
MQPUT1(hConn, &od, &md, &pmo, *piMsgLen, sMsgBuf, &CompCode, &Reason); if(CompCode == MQCC_FAILED) {
sprintf(sErrMsg, \发送消息失败, MQ_ERR_CODE: %d\ if(hObj != MQHO_UNUSABLE_HOBJ)
MQCLOSE(hConn, &hObj, MQCO_NONE, &CompCode, &Reason); return -2; }
dwStartTime = GetTickCount(); Sleep(1000);
bGetFistMsg = TRUE;
memcpy(md.MsgId, MQMI_NONE, sizeof(md.MsgId));
memcpy(md.CorrelId, MQCI_NONE, sizeof(md.CorrelId));
md.Version = MQMD_VERSION_2 ; gmo.Version = MQGMO_VERSION_2; // gmo.Options = MQGMO_BROWSE_NEXT; //取回应消息 while(1) {
if(GetTickCount() - dwStartTime > (unsigned)iGetResExpiry*1000) break;
if(bGetFistMsg == TRUE) {
gmo.Options = MQGMO_BROWSE_FIRST; } else {
gmo.Options = MQGMO_BROWSE_NEXT; }
md.Encoding = MQENC_NATIVE; md.CodedCharSetId = MQCCSI_Q_MGR;
memcpy(md.MsgId, MQMI_NONE, sizeof(md.MsgId));
memcpy(md.CorrelId, MQCI_NONE, sizeof(md.CorrelId));
MQGET(hConn, hObj, &md, &gmo, MAX_THEEAD_BUF, sMsgBuf, (long *)piMsgLen, &CompCode, &Reason); if(CompCode==MQCC_FAILED) {
if(Reason==MQRC_NO_MSG_AVAILABLE) { Sleep(1000);
bGetFistMsg = TRUE;
// DisplayMsg(\无消息可取\ continue; }
else {
sprintf(sErrMsg, \取消息错误, MQ_ERR_CODE: %d\ if(hObj != MQHO_UNUSABLE_HOBJ)
MQCLOSE(hConn, &hObj, MQCO_NONE, &CompCode, &Reason); return -3; } }
//分析消息内容,如果是需要的回应,则取出 gmo.Options = MQGMO_MSG_UNDER_CURSOR;
MQGET(hConn, hObj, &md, &gmo, MAX_THEEAD_BUF, sMsgBuf, (long
*)piMsgLen, &CompCode, &Reason); if(CompCode==MQCC_FAILED) {
sprintf(sErrMsg, \取回应消息错误, MQ_ERR_CODE: %d\ if(hObj != MQHO_UNUSABLE_HOBJ)
MQCLOSE(hConn, &hObj, MQCO_NONE, &CompCode, &Reason); return -4; }
bGetFistMsg = FALSE;
Sleep(10); }
if(hObj != MQHO_UNUSABLE_HOBJ)
MQCLOSE(hConn, &hObj, MQCO_NONE, &CompCode, &Reason);
if(bGetResMsgSuc) return 0; else {
sprintf(sErrMsg, \取回应消息超时\ return -5; }
/////////////
索引消息格式vc例子: ///////////// head:
#define NULL_POINTER (void*)0L #define MAX_FILENAME_LENGTH 256 #define MAX_MQRMH_LENGTH 1000
typedef struct tagMQRMHX{ MQRMH ref;
MQCHAR SrcName[MAX_FILENAME_LENGTH];
MQCHAR DestName[MAX_FILENAME_LENGTH]; } MQRMHX;
int prmGetQMgrCCSID (MQCHAR48 QMgrName ,MQHCONN HConn
,PMQLONG pQMgrCCSID ); //////////// main:
MQOD od = {MQOD_DEFAULT}; /* Object Descriptor */
MQMD md = {MQMD_DEFAULT}; /* Message Descriptor */
MQPMO pmo = {MQPMO_DEFAULT}; /* put message options */
MQGMO gmo = {MQGMO_DEFAULT}; /* get message options */
MQRMHX refx = {{MQRMH_DEFAULT}}; /* reference message */
/** note, sample uses defaults where it can **/
MQHCONN Hcon; /* connection handle */
MQHOBJ Hobj = MQHO_UNUSABLE_HOBJ;
/* object handle */
MQLONG CompCode ; /* completion code */ //MQLONG OpenCompCode; /* MQOPEN completion code */
MQLONG ConnCode ; /* MQCONN completion code */ //int rc = 0; /* Return code */
MQLONG Reason; /* reason code */
MQLONG CReason; /* reason code for MQCONN */
//MQLONG oo; /* MQOPEN options */
MQLONG co = MQCO_NONE; /* MQCLOSE options */
MQLONG DataLength; /* Length of report message */
MQLONG WaitInterval = 15 ;
/* Wait interval */
MQLONG QMgrCCSID; /* QMgr CodedCharSetId */
PMQRMH pMQRMH; /* -> MQRMH structure */ PMQXQH pMQXQH; /* -> MQXQH structure */
char QMName[MQ_Q_MGR_NAME_LENGTH+1] = \
/* local queue manager name */
char DestQName[MQ_Q_NAME_LENGTH+1] = \ /* destination queue name */
// char DestQMName[MQ_Q_MGR_NAME_LENGTH+1] = \ /* destination qmgr name */
char SourceFileName[MAX_FILENAME_LENGTH+1] = \ /* source file name */
char TargetFileName[MAX_FILENAME_LENGTH+1] = \ /* target file name */
char ObjectType[sizeof(refx.ref.ObjectType)]; /* Object type */
char Buffer[sizeof(MQXQH)+MAX_MQRMH_LENGTH];
strcpy(QMName, sMQManager);
strcpy(DestQName, sMQSendQueue); strcpy(SourceFileName, sFileName); strcpy(TargetFileName, sFileName);
MQCONN( QMName /* queue manager */ ,&Hcon /* connection handle */
,&ConnCode /* completion code */
,&CReason ); /* reason code */
CompCode = ConnCode;
if (CompCode == MQCC_FAILED)
{
cout << \ return -1; }
rc = prmGetQMgrCCSID(QMName ,Hcon
,&QMgrCCSID );
if (rc != 0) {
cout << \ goto EXIT; }
// strncpy(od.ObjectName // ,\
// ,(size_t)MQ_Q_NAME_LENGTH // );
// oo = MQOO_FAIL_IF_QUIESCING + // MQOO_INPUT_AS_Q_DEF;
// MQOPEN(Hcon /* connection handle */
// ,&od /* object descriptor for queue */
// ,oo /* options */
// ,&Hobj /* object handle */
// ,&OpenCompCode /* MQOPEN completion code */
// ,&Reason); /* reason code */
// if( OpenCompCode == MQCC_FAILED && Reason != MQRC_NONE ) // {
// cout << \// goto EXIT; // }
// cout << \
memset(ObjectType,' ',sizeof(ObjectType));
memcpy(ObjectType, \
refx.ref.StrucLength = sizeof(refx); refx.ref.Encoding = MQENC_NATIVE; refx.ref.CodedCharSetId = QMgrCCSID; memcpy(refx.ref.Format,MQFMT_STRING ,(size_t)MQ_FORMAT_LENGTH);
refx.ref.Flags = MQRMHF_LAST; memcpy(refx.ref.ObjectType,ObjectType, sizeof(refx.ref.ObjectType));
memset(refx.SrcName ,' '
,sizeof(refx.SrcName)+sizeof(refx.DestName));
memcpy(refx.SrcName ,SourceFileName
,strlen(SourceFileName) );
memcpy(refx.DestName ,TargetFileName
,strlen(TargetFileName) );
refx.ref.SrcNameLength = strlen(SourceFileName); refx.ref.SrcNameOffset = offsetof(MQRMHX,SrcName);
refx.ref.DestNameLength = strlen(TargetFileName); refx.ref.DestNameOffset = offsetof(MQRMHX,DestName);
memcpy(md.ReplyToQ ,\
, strlen( \ );
strncpy(od.ObjectName ,DestQName
,sizeof(od.ObjectName) );
/* strncpy(od.ObjectQMgrName , \
, strlen( \
);
strncpy(md.ReplyToQMgr , \
, strlen( \ ); */
md.Report = MQRO_COA_WITH_FULL_DATA + MQRO_EXCEPTION_WITH_FULL_DATA;
pmo.Options = MQPMO_FAIL_IF_QUIESCING; memcpy(md.Format,MQFMT_REF_MSG_HEADER ,(size_t)MQ_FORMAT_LENGTH);
// md.Report = MQRO_COA + MQRO_EXCEPTION;
MQPUT1(Hcon, /* connection handle */
&od, /* object descriptor for queue */
&md, /* message descriptor */
&pmo, /* options */
sizeof(refx), /* buffer length */
&refx, /* buffer */
&CompCode, /* MQPUT1 completion code */
&Reason); /* reason code */
if (Reason != MQRC_NONE) {
cout << \
rc = -1; goto EXIT; }
else cout << \发送索引消息成功!\//////////////// UNIX分段发送例子
char sFilePath[300]; char sErrMsg[1024] = \ int nRec = 0; //
//MQMD mqMd;
//MQ初始化 MQHCONN hConn;
MQLONG CompCode, Reason;
MQOD od = {MQOD_DEFAULT}; // Object Descriptor MQMD md = {MQMD_DEFAULT}; // Message Descriptor MQPMO pmo = {MQPMO_DEFAULT}; // put message options
memcpy(md.Format,MQFMT_STRING, (size_t)MQ_FORMAT_LENGTH); MQAgent agent; int agentRec;
agentRec = agent.Init(sMQManager, &hConn); if ( agentRec != 0 ) {
cout<<\连接队列管理器失败\ goto EXIT1; } //
GetPrivateProfileString(\sFilePath, 100, \ strcat(sFilePath, sFileName);
nRec = agent.PutFile(sMQSendQueue, sFilePath); if(nRec != 0) {
sprintf(sErrMsg, \发送文件(%s)失败-->%s\sFilePath,agent.m_strErrText);
cout< sprintf(sErrMsg, \发送文件(%s)成功------\ cout< EXIT1: if(hConn != MQHC_UNUSABLE_HCONN) MQDISC(&hConn, &CompCode, &Reason); //////////////////////////// int prmGetQMgrCCSID (MQCHAR48 QMgrName ,MQHCONN HConn ,PMQLONG pQMgrCCSID ) { int rc = 0; /* Function return code */ MQLONG CompCode; MQLONG Reason; MQOD ObjDesc = {MQOD_DEFAULT}; /* Object descriptor */ MQLONG Selectors[1]; MQLONG flags; MQHOBJ Hobj; /********************************************************************/ /* Open the queue manager object */ /********************************************************************/ ObjDesc.ObjectType = MQOT_Q_MGR; memcpy(ObjDesc.ObjectQMgrName ,QMgrName ,MQ_Q_MGR_NAME_LENGTH ); flags = MQOO_INQUIRE; MQOPEN(HConn ,&ObjDesc ,flags ,&Hobj ,&CompCode ,&Reason ); if (CompCode == MQCC_FAILED) { cout << \ rc = -1; goto MOD_EXIT; } /********************************************************************/ /* Use MQINQ to get the queue manager CCSID */ /********************************************************************/ Selectors[0] = MQIA_CODED_CHAR_SET_ID; MQINQ(HConn ,Hobj ,1 /* Number of selectors */ ,Selectors ,1 /* Number of integer selectors */ ,pQMgrCCSID ,0 /* length of character attributes */ ,NULL /* character attributes */ ,&CompCode ,&Reason ); if (CompCode == MQCC_FAILED) { cout << \ rc = -1; goto MOD_EXIT; } MOD_EXIT: if (Hobj != MQHO_UNUSABLE_HOBJ) { MQCLOSE(HConn ,&Hobj ,MQCO_NONE ,&CompCode ,&Reason ); } return rc; } ----------------------- msgexit.dll 存放路径:$MQ安装路径 \\IBM\\WebSphere MQ\\Exits 系统环境变量 FILE_DIRECTORY_VAR 值:文件存放路径.
正在阅读:
MQ开发C教程01-22
大学物理第五版课后答案(上)完整版10-10
《物理化学》下册试卷01-20
七国语言警告语塑料袋03-11
飞机场安检系统05-16
河南省信阳高级中学2016届高三上学期第八次大考语文试题 - 图文03-05
员工合理化建议100条07-31
四年级数学销售中的买几送几问题练习题12-18
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 教程
- 开发
- 巡检标准
- 三年级下语文第二单元练习 姓名
- 元月20日 团柏煤矿采煤工作面搬家倒面管理办法
- 四年级数学思维训练 - 鸡兔同笼问题二有答案
- 小学六年级教案-列方程解稍复杂的分数应用题(一) 精品
- 2014年全国社会工作者职业水平考试社会工作师(初级)社会工作综合能力真题
- 电视节目评价模型
- 钻孔反循环灌注桩施工工艺
- 批处理常用命令及用法大全
- 广东劳务派遣单位用工管理规章制度
- 副职转正述职报告(3篇)
- 2018深圳中考语文试题及答案解析
- 生 活 垃 圾 热 解 技 术
- 2016年11月20日广西公需科目最新试题答案(大部分)
- 私人教练协议书
- 第十九章细胞信息转导的分子机制
- 新闻写作
- apm闪存日志分析
- 专职安全管理人员题库-P87
- 四年级数学教学质量研讨会发言稿