ile rpg 紅皮書_在ILE RPG中使用IBM WebSphere MQ消息属性API

2024-03-27 10:40

本文主要是介绍ile rpg 紅皮書_在ILE RPG中使用IBM WebSphere MQ消息属性API,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

旧的路和前进的路

传统上,要与JMS应用程序(例如,在IBM WebSphere Application Server中运行的Web服务)进行通信,则需要使用RFH2标头。 这很麻烦,尤其是在RPG中。 RFH2头包括一组固定的头字段,后跟任意数量的数据结构,每个数据结构包含一个长度字段和一个缓冲区,该缓冲区包含定义属性的XML数据。 生成RFH2标头并不难。 只需将复制文件cmqrfh2g包含到您的数据结构中,并根据需要设置的文件夹数量定义所需的长度和数据对即可(不同文件夹中的属性必须成对发送)。 为了获得更大的自由并消除从固定长度字段中发送额外的空格,您还可以动态构建缓冲区。 真正的麻烦在于尝试读取属性,这需要解析另一个应用程序发送的RFH2标头。 尽管RPG完全能够解析具有任意数量的可变长度字段的可变长度报头,但它更适合固定长度,类似记录的数据。

在RPG(实际上是任何ILE语言)中使用RFH2标头的另一个问题是XML数据必须为Unicode。 RPG在此具有原生支持UTF-16的优势。 但是,除非您仅与其他RPG应用程序打交道,否则您从其他应用程序获得的任何RFH2标头很可能都将使用UTF-8,因为这是Linux,Windows和Java的默认设置。 这意味着您几乎可以肯定必须处理iconv,这总是很痛苦的。

随着WebSphere MQ 7.0的发布,MQ获得了新的API调用,从而大大减少了与消息属性进行交互所需的工作量,并消除了生成或解析RFH2标头的需要。 这些是:

  • MQSETMP –设置消息属性
  • MQDLTMP –删除消息属性
  • MQINQMP –查询消息属性

除了这些API之外,还添加了其他API来帮助使用消息属性API:

  • MQCRTMH –创建消息句柄
  • MQDLTMH –删除消息句柄
  • MQBUFMH –将消息缓冲区转换为消息句柄
  • MQMHBUF –将消息句柄转换为消息缓冲区

新消息属性API的关键是消息句柄。 消息句柄( MQHMSG )是64位标识符,用于允许应用程序引用消息的属性,类似于使用MQHCONN来引用与队列管理器的连接或使用MQHOBJ来进行连接。请参阅主题或队列。 使用这些新的消息属性API的第一步是创建消息句柄。

dcl-s Hmsg int(20);
dcl-ds MQCMHO Qualified;/copy CMQCMHOG
end-ds;MQCRTMH(HConn : MQCMHO : HMsg : CompletionCode : Reason);

您声明两个变量, HMsg为64位整数和MQCMHO (创建消息句柄选项)结构。 然后,您调用MQCRTMH生成我们的消息句柄。 假设CompletionCode0 ,您现在有了一个消息句柄,可以使用它使用新的消息属性API。

使用MQSETMP

要查看如何使用MQSETMP设置消息属性,让我们首先看一下MQSETMP的参数:

示例1:来自CMQG的MQSETMP过程定义
DMQSETMP          PR                  EXTPROC('MQSETMP')
D* Connection handle
D HCONN                         10I 0 VALUE
D* Message handle
D HMSG                          20I 0 VALUE
D* Options that control the action of MQSETMP (MQSMPO)
D SETOPT                        20A   
D* Property name (MQCHARV)
D PRNAME                        32A   
D* Property descriptor (MQPD)
D PRPDSC                        24A   
D* Property data type
D TYPE                          10I 0 VALUE
D* Length of the Value area
D VALLEN                        10I 0 VALUE
D* Property value
D VALUE                           *   VALUE
D* Completion code
D CMPCOD                        10I 0
D* Reason code qualifying CompCode
D REASON                        10I 0

在本练习中,可以使用MQSMPOMQPD的默认值。 有关这些参数的更多信息,请参考WebSphere MQ信息中心 。

让我们定义一些变量以使用MQSETMP

dcl-ds PropName Qualified;/copy QMCHRVG
end-ds;dcl-s PropertyName varchar(40);
dcl-s PropertyValue varchar(40);dcl-ds MQPD Qualified;/copy CMQPDG
end-ds;dcl-ds MQSMPO Qualified;/copy CMQSMPOG
end-ds;

在此示例中,我们将定义usr.format属性,以通知接收应用程序该消息是XML数据。 首先,设置属性名称。

PropertyName = 'format';
PropertyValue = 'xml';
PropName.VCHRP = %ADDR(PropertyName : *DATA);
PropName.VCHRL = %LEN(PropertyName);

注意:如果您没有限定属性名称,则默认为“ usr”文件夹。

然后,您只需要调用MQSETMP ,指定所有参数:

MQSETMP(HConn : HMsg : MQSMPO : PropName : MQPD : TYPSTR :%LEN(PropertyValue) : %ADDR(PropertyValue : *DATA) :CompletionCode : Reason);

至此,您已经创建了一个消息句柄并将usr.format属性设置为xml ,但是什么消息接收到了该属性? 答案是您尚未在实际消息上实际设置此属性。 您已经完成的所有工作都分配了一个消息句柄,该消息句柄指向WebSphere MQ中包含消息属性的存储区域。 放置消息时,可以告诉WebSphere MQ将那些属性添加到您要放置的消息中。 为此,您唯一要做的就是将消息句柄字段设置为从MQCRTMH获得的消息句柄,并告诉WebSphere MQ您正在使用版本3 MQPMO (以便WebSphere MQ知道已定义消息句柄字段。 )。

MQPMO.PMVER = PMVER3;
MQPMO.PMOMH = Hmsg;

现在,像往常一样执行MQPUT ,消息属性将添加到消息中。 在幕后,WebSphere MQ将从消息句柄读取属性并为您生成RFH2标头。 您可以使用IBM WebSphere MQ Explorer或WRKMQMQ系统命令轻松地验证一切是否正常。 MQ Explorer是基于Eclipse的图形工具,使您能够从Microsoft®Windows®或Linux®PC浏览和配置所有WebSphere MQ对象和资源。 它包含在MQ服务器安装中,也可以在MS0T SupportPac中单独获得。 要在MQ Explorer中查看,请展开队列管理器,然后单击Queues 。 然后,您可以右键单击队列,然后单击浏览消息 。 在列表中找到要检查的消息,然后右键单击它,然后单击“ 属性” 。 在左窗格中选择“ 命名属性”时 ,可以看到如图1所示的属性。

图1:MQ Explorer
图1:MQ Explorer

使用MQINQMP

MQSETMP一样,它使设置消息属性更加容易,还有MQINQMP可以检索特定消息属性的值,甚至可以使用通配符来获取多个属性的值。 示例2中显示了一个原型。

示例2:来自CMQG的MQINQMP过程定义
DMQINQMP          PR                  EXTPROC('MQINQMP')
D* Connection handle
D HCONN                         10I 0 VALUE
D* Message handle
D HMSG                          20I 0 VALUE
D* Options that control the action of MQINQMP (MQIMPO)
D INQOPT                        72A   
D* Property name (MQCHARV)
D PRNAME                        32A   
D* Property descriptor (MQPD)
D PRPDSC                        24A   
D* Property data type
D TYPE                          10I 0
D* Length in bytes of the Value area
D VALLEN                        10I 0 VALUE
D* Property value
D VALUE                           *   VALUE
D* Length of the property value
D DATLEN                        10I 0
D* Completion code
D CMPCOD                        10I 0
D* Reason code qualifying CompCode
D REASON                        10I 0

MQSETMP的唯一真正区别是,您使用MQIMPO而不是MQSMPO

要使用MQINQMP ,首先要像上面那样创建一个消息句柄,并将其传递到MQGMO 。 您唯一需要的其他技巧是告诉WebSphere MQ您希望在消息句柄中而不是在RFH2标头中返回消息属性。

MQGMO.GMVER = GMVER4;
MQGMO.GMMH = Hmsg;MQGMO.GMOPT += GMPRIH; // return message properties in handleMQIMPO.IPOPT = IPINQN + // iterate over propertiesIPCTYP + // convert type if necessaryIPCVAL;  // convert value into native CCSIDPropQuery = 'usr.%';
PropName.VCHRP = %ADDR(PropQuery : *DATA);
PropName.VCHRL = %LEN(PropQuery);MQIMPO.IPRETNAMCHRP = %ADDR(PropertyName : *DATA);
MQIMPO.IPRETNAMVSBS = PropNameMax;MQINQMP(HConn : HMsg : MQIMPO : PropName : MQPD : PropertyType :PropValueMax : %ADDR(PropertyValue : *DATA) :ActPropLength : CompletionCode : Reason);%LEN(PropertyValue) = ActPropLength;
%LEN(PropertyName) = MQIMPO.IPRETNAMCHRL;

在这里,您使用usr.%的查询来检索usr文件夹中的所有属性。 在调用MQINQMPPropertyName包含找到的第一个用户属性的名称,而PropertyValue包含其值。 处理MQINQMP此属性后,可以再次调用MQINQMP来检索与查询匹配的下一个属性。 最终,将没有更多的属性,并且WebSphere MQ将设置完成码1和原因码2471(MQRC_PROPERTY_NOT_AVAILABLE)。

结论

随着WebSphere MQ 7.0中新消息属性功能的出现,现在在ILE应用程序中处理消息属性变得更加容易。 应用程序不再需要解析RFH2标头,处理XML或使用iconv处理字符转换来获取或设置消息属性。 本文介绍了如何在您的应用程序中使用这些新的API。 完整示例可在WebSphere MQ 7.1随附的AMQ3IQM4和AMQ3STM4示例中找到。 这些样本也包含在WebSphere MQ 7.0.1.6和更高版本的修订包中。

翻译自: https://www.ibm.com/developerworks/ibmi/library/i-websphere-mq-messaging/index.html

这篇关于ile rpg 紅皮書_在ILE RPG中使用IBM WebSphere MQ消息属性API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851831

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10