资料由wedmeed合着
2017年,当我们的项目在越南启动时,我们为我们遇到了新的野兽IBM DataPower。 IBM DataPower是客户端和后端之间的网关产品,旨在对通过它的消息(以下称为请求)进行过滤,路由,扩充或其他转换。 必须快速学习,没有时间进行积累,因此我们被要求熟悉它,之后与来自莫斯科的同事进行了许多小时的Skype会议,他将我们在此产品上的知识和经验告诉了我们。
自学的基础是研究文档并观看来自Internet的培训视频-在这里,我正在等待收获。 我几乎找不到俄语的信息。 顺便说一句,那时我对英语的了解还不是很高,这是我的第一个项目,而且可能这些因素使我的生活变得复杂。 这使我用俄语以最简单的方式写了一篇培训文章,供初学者使用该产品并试图快速了解其基础知识。 本文不会使您从阅读文档中解放出来,但是它将使您在了解“工作原理”的早期阶段变得更加轻松。
还值得注意的是,实践中给出的结构将接近实际项目,这将使您可以将其用作基础,扩展和补充需求。 总之,将在“理论”部分给出一些有关已经实施的项目的文字,以及一些值得关注的功能。

第1部分。使用Docker工具箱安装DataPower
安装并运行Docker Toolbox应用程序。 启动之后,您将立即看到计算机的IP地址,以后可以通过该IP地址使用DataPower:

要启动映像,您需要更改虚拟机的某些设置(与版本IDG.2018.4.1.0相关)并重新启动它:
- 使用以下命令停止docker计算机:
docker-machine stop
- 系统->主板->主内存:最低4096Mb;
- 系统->处理器:至少2;
- 显示->屏幕->视频内存:至少128Mb;
- 我们使用以下命令启动docker计算机:
docker-machine start
注意事项 如果提示重启docker-machine env,请运行:
docker-machine env
- 接下来,您需要缩小IBM DataPower映像:
docker pull ibmcom/datapower
- 然后使用以下命令启动docker容器:
docker run -it \ -v $PWD/config:/drouter/config \ -v $PWD/local:/drouter/local \ -e DATAPOWER_ACCEPT_LICENSE=true \ -e DATAPOWER_INTERACTIVE=true \ -p 9090:9090 \ -p 3630:3630 \ -p 9022:22 \ -p 7170:7170 \ --name idg \ ibmcom/datapower
- 完成命令后,按Enter键,然后输入admin / admin作为用户名和密码。
- 要启动Web管理界面,请使用以下命令:
co
和
web-mgmt 0 9090
- 完成所有这些步骤后,在浏览器中执行https://192.168.99.100:9090/
第2部分。
2.1。 理论
DataPower中的域使您可以分离管理和开发工具,并提供安全性。
安装后,只有一个默认域可以从中创建应用程序域。 每个域都有其自己的参数配置。
某些公共资源和参数只能在默认域中定义,包括网络接口,用户和访问控制,应用程序域等。
应用程序域是请求处理服务的开发部分。 其中定义的服务不能与其他应用程序域共享。 可以分别和独立地重新启动应用程序域,而无需完全重新启动DataPower。
您可以创建,重新启动,重置,暂停,续订或删除域。 您可以在官方文档中找到有关所有管理功能的更多详细信息。
关于已完成项目的一些信息。 我们使用了3个域:
- default-包含共享资源和参数的默认域;
- 主干-主域,包含处理请求所需的一切;
- 设置-设置和安全域,本地文件包含有关服务路由规则和安全设置的信息。
为了寻找更简单的部署路径,需要将所有设置转移到单独的域。 与许多项目一样,开发,测试和生产环境是分开的,转移到单独的设置域使我们可以通过导出/导入在其他环境中安装开发环境中的所有主要域,而不会丢失环境设置。
2.2。 练习
- 在搜索字段中,输入“域”,选择“应用程序域”,然后单击“添加”

- 在这里,您需要指定域名,注释(如果需要)并激活审核和日志记录。 填写字段并应用更改

- 同样,添加另一个域“ trunk”
- 转到查看更改

- 并保存域配置

- 您可以通过转到状态->主菜单->对象状态中导航树中的默认域来检查已创建对象的状态。

- 选择查看方式:类型

- 在列表中找到“应用程序域”并检查对象的状态:每个对象都必须保存,打开并处于启动状态。 如果是这样,请继续下一章。

第3部分。队列管理器
队列管理器不是IBM DataPower的必需组件,但是通过MQ的示例,您可以显示该产品的全部功能。 我们将使用IBM的MQ。 在第6章中描述的测试期间,我们将需要向本地队列管理器发送一条消息。 在本文中,我将使用rfhutil实用程序来执行此操作,但是您可以使用任何可用的方法。 为了进行测试,您将需要使用MQ队列管理器创建从DP到本地队列管理器的连接。
3.1。 理论
队列管理器在网关和远程队列管理器之间提供数据交换。
您还可以配置MQ队列管理器组,这将增加系统的容错能力。 例如,如果要将客户端连接到任何工作队列管理器集,并且在某些情况下(可在官方文档中找到),这将很有用。
从项目的经验来看,仅值得注意一个功能:一次我们想尝试使用DataPower来实现负载平衡,尤其是使用队列管理器组,但是在实践中我们没有发现这种可能性。 另一种解决方案是创建队列管理器集群。
3.2。 练习
3.2.1。 准备工作
- 安装WebSphere MQ;
- 创建一个本地LOCAL_DP_QM队列管理器,可在端口3630上访问;
- 配置DP.SVRCONN通道;
创建频道时,以下命令可能对您有用:
strmqm LOCAL_DP_QM /* mq*/ runmqsc LOCAL_DP_QM /* mq*/ DEFINE CHANNEL (DP.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('evlasenko') /* */ SET CHLAUTH('DP.SVRCONN') TYPE(USERMAP) CLNTUSER('evlasenko') USERSRC(channel) ADDRESS('*') ACTION(ADD) /* */ SET CHLAUTH(DP.SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody') /* */ ALTER LISTENER (SYSTEM.DEFAULT.LISTENER.TCP) TRPTYPE(TCP) PORT(3630) control(QMGR) /* 3630*/ ALTER AUTHINFO (SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL) /* */ REFRESH SECURITY TYPE(CONNAUTH) /* */ endmqm LOCAL_DP_QM /* mq*/ strmqm LOCAL_DP_QM /* mq*/ END
- 创建队列DP.IIB.REQIN和DP.IIB.RESIN
- 在创建通道的用户名下运行rfhutil。 在“队列管理器名称(要连接)”行中,输入:
DP.SVRCONN/TCT/127.0.0.1(3630)
- 尝试加载队列名称列表;消息窗口中应该没有任何错误。 与通道的连接已验证。
3.2.2。 创建IBM MQ队列管理器
- 转到主干域。
- 在搜索中,键入MQ,选择IBM MQ Queue Manager,然后单击添加。
- 您需要指定名称(TEST_QM),队列管理器主机名,队列管理器名称和通道名称以及超时。 配置并保存更改。

以与检查域的状态相同的方式检查队列管理器对象的状态。 为此,请选择“对象状态”,然后从干线域中选择“查看方式:类型”过滤器。 在“ IBM MQ队列管理器”部分中,找到适当的对象并检查其状态。
第4部分。多协议网关
4.1。 理论
多协议网关(MPG)是一种多协议网关,它使您可以使用各种协议从客户端接收请求,然后使用各种协议将它们传输到不同的服务器。 客户端使用的协议可能与远程访问服务器使用的协议不匹配。
在主要的MPG设置中,您可以定义以下组件:
- XML Manager-控制样式表(xsl,xslt)的编译和缓存,文档的缓存。
- 策略-由规则组成,每个规则都定义了一组应用于通过网关传递的消息的操作。
- 正面和背面设置(设置url,传入和传出消息的类型,超时等)。
关于项目的几句话:
该项目使用4个多协议网关(路由,2个用于不同终端系统的转换网关,以及另外一个旨在从设置域接收文件的网关)。 下图显示了一般的交互方案:

MPG的数量可能会根据整个解决方案的体系结构而有所不同。 在我们的案例中,DataPower面临着集成总线(IIB)和微服务,它们在接口(json / http与xml / mq)之间具有显着差异,因此决定为每个特定的后端制作转换MPG并相应地命名。 对于所有客户端,我们使用json / http,因此路由MPG是其中之一。 主要的MPG包含3条处理消息的规则-请求,响应和错误。 每个规则都包含必要的操作,例如转换,日志记录,路由和其他操作。
从功能-如果在策略中使用操作ConvertQueryParamToXML,则请注意InputConversion。 如果将“默认编码”设置为JSON并尝试发送GET请求,您会惊讶地发现该消息没有经过您指定的任何转换,也找不到任何痕迹。 此功能将有助于克服为GET请求创建单独的规则的问题。
4.2。 练习
4.2.1。 准备工作
您可以在链接https://github.com/EvgenyaVlasenko/IBM_DataPower.git上找到工作所需的所有文件。
4.2.1.1。 域中继
- 转到主干域。
- 在控制面板中,选择“文件管理”。
- 在本地目录中,创建以下目录结构并将相应的文件放入其中(每个文件均包含对其执行功能的简要说明,以及本文稍后对此内容的详细讨论)。

4.2.1.2。 域设置
- 转到设置域。
- 在控制面板中,选择“文件管理”。
- 在本地目录中,创建以下目录结构并将相应的文件放入其中(这些文件还包含对它们的简短描述)。

4.2.2。 创建GetFileMPG
首先,创建一个简单的帮助器MPG,它将从设置域返回文件。
- 转到设置域。
- 在控制面板中,选择“多协议网关”,然后单击“创建”。
- 指定名称(GetFileMPG),描述(可选)和后端类型(动态)。 实际上,由于将没有对后端的调用,并且仅文件将从本地系统返回,因此在此示例中,您可以指定任何类型的后端。

- 指定请求和响应类型。 明确指定类型将减少内联检查的数量。 指定“通过”类型允许您不创建规则(在这种情况下,将转换响应)。 如果我们指定“请求类型也通过”,那么我们将无法以任何方式处理消息。 此选项不适合我们,因此我们使用Non-XML限制请求的类型。

- 单击+,然后选择HTTP处理程序以创建新的前端协议。

- 在这里,您应该指定名称,ip地址,端口和允许的方法列表。 注意IP地址。 如果指定0.0.0.0,则每个人都可以访问此网关。 如果为127.0.0.1-仅在同一DataPower内部的其他网关。 由于设置中包含安全参数,因此我们使用第二个选项。 填写字段并单击“应用”,该协议将自动添加到网关。

- 单击+添加新策略。

- 填写策略名称“ GetFilePolicy”。
- 创建一个新规则,填写规则的名称和方向。 由于实际上没有后端,并且仅返回所需的文件,因此将只有一个规则(客户端到服务器)。

- 双击“匹配”操作对其进行配置,选择一个现有规则并应用更改。 在意识形态上对仅接收Get请求的能力进行限制是正确的,但是在培训任务的框架内,您可以选择现有的请求。
- 添加另一个动作-GatewayScript,方法是将其拖动到规则上并进行配置。 作为转换,我们将使用准备好的文件,该文件在本地:///文件系统将从传入请求的URI中按名称查找文件,并将其放置在消息正文中。 操作结果将直接传输到规则的输出缓冲区。 保存更改。

- 最终的策略结果应如下所示:

- MPG创建完成,保存更改。
- 您可以使用“对象状态”来验证其创建是否成功,类似于检查域和队列管理器的状态。 为此,请从设置域中选择“对象状态”和“查看方式:”服务过滤器。 在“多协议网关”部分中,搜索相应的对象并检查其状态。
- 您无法从外部调用此MPG,因为已使用ip保护了它。 临时将ip从127.0.0.1更改为0.0.0.0,并将端口从7171更改为7170,然后运行以下查询:
curl -vv -k "http://192.168.99.100:7170/trunk/route/routeRules.xml"
- 您应该得到以下答案:

- 再次,将ip和端口更改为原始的127.0.0.1:7171。
4.2.3。 创建RoutingMPG
现在创建RoutingMPG。 根据输入的请求和路由规则,他将确定应将请求发送到何处以及使用什么参数。
- 转到主干域。
- 根据第4.2.2节第2-10条,使用以下值创建一个新的多协议网关:
- 3-名称:RoutingMPG,后端类型:动态(用于在必要时将请求路由到其他MPG的功能)。
- 4-Rq:非xml,Rs:非xml。
- 6-名称:RoutingHTTP_FSH,IP:0.0.0.0,端口:7170,+ Get方法。
- 8-名称:RoutingPolicy。
- 9-名称:RoutingPolicy_rule_req,方向:客户端到服务器。
- 再添加一个动作以路由请求,将“路由”动作拖到规则上,双击它进行配置,填写字段并应用更改。 route.xsl文件通过先前创建的GetFileMPG从设置域接收路由设置文件。 之后,基于URI,已经从文件中选择了该操作所需的设置。 其中一些用于路由,另一些则添加到标头以用于其他MPG。 输入和输出参数确定仅使用消息正文的方式,而决不影响标题和变量。 因此:输入null,因为消息正文中的信息不用于路由。 输出为空-因为转换的结果只是服务信息的变化。

- 同样,再创建2条规则并保存所有更改:
- 方向:服务器-客户端,名称:RoutingPolicy_rule_resp;
转换:输入INPUT,输出NULL,本地转换文件:///RoutingMPG/transform/resp.xslt。 resp.xslt文件接收转换MPG响应的http状态,并将其显式设置为RoutingMPG响应。 如果不这样做,那么即使转换MPG中发生错误,默认代码也将设置为200。
- 方向:错误,名称:RoutingPolicy_rule_error;
转换:输入INPUT,输出PIPE(根据文档,在两个相邻动作节点之间使用PIPE作为INPUT和OUTPUT可以消除额外的处理并减少使用的内存量),转换文件位于本地:///RoutingMPG/transform/errors.xsl。 errors.xsl文件从转换MPG的响应中接收错误代码和文本,并以客户端期望的格式生成JSON错误消息。
- 最终的策略结果应如下所示:

- MPG创建完成,保存更改。
- 使用例如curl工具,运行以下查询:
curl -vv -k "http://192.168.99.100:7170/dp/test/transformMessage"
- 如果出现以下错误,则说明一切正确。 此错误表示已成功接收和处理了该消息,但是调用后端(在本例中为IIBMPG)的尝试失败。 转到下一步。

4.2.4。 创建IIBMPG
下一步是创建一个转型的MPG。 假设外部系统采用JSON请求格式,内部系统采用XML。 我们需要转换输入消息,以便内部系统可以理解它。 值得注意的是,这并不总是整个消息的简单转换。 通常需要传达截断或增强的消息,有时会采用完全重新设计的结构。
- 转到主干域。
- 根据第4.2.2节第2-10条,使用以下值创建一个新的多协议网关:
- 3-名称:IIBMPG,后端类型:动态
- 4-Rq:JSON,Rs:XML
- 6-名称:IIBHTTP_FSH,ip:127.0.0.1(仅来自同一DataPower的请求),端口:7172,+ Get方法
- 8-名称:IIBPolicy
- 9-名称:IIBPolicy_rule_req,方向:客户端到服务器
- 添加说明。 基于请求标头中的X-DP-Transform-Name,IIBRuleRoute.xsl文件从本地///IIB/route/IIBRouteRules.xml文件接收此服务的请求转换,响应和错误文件的名称,并将它们的值设置为相应的上下文变量var:// context / IIB / reqTransform,var:// context / IIB / ansTransform,var:// context / IIB / errTransform。 标头中的其他值(url,uri,expire,timeout)也放置在上下文变量中。

- 通过将“高级”拖动到您的规则并从列表中选择“将查询参数转换为XML”进行配置,以添加其他操作。 您需要添加一个新的输入转换图,为其指定名称(cmnJSONParseCNVM)和所需的类型(JSON)。


- 在标准转换后添加转换并进行配置。 在这种情况下,在上一个转换中设置的变量用于指示转换文件。 这样做是为了使转换具有通用性,并且根据输入消息将文件本身“即时”替换。 邮件正文已准备就绪。 下一步是路由消息,消息主体不会改变,因此我们创建dpvar_1变量并将结果保存在其中。 我们正是将此变量指向“结果”操作的输入。 保存更改。

- 添加路由操作并设置以下参数。 IIBURLRoute.xsl文件接收上下文变量的值,其中一些被设置为服务请求变量,其余的则形成用于目的地系统请求的URI,该URI也存储在服务变量中。

- 同样,再创建2条规则并保存所有更改:
- 方向:服务器-客户端,名称:IIBPolicy_rule_resp;
转换:输入INPUT,输出PIPE,转换文件var:// context / IIB / ansTransform(用于替换“即时”响应转换的上下文变量)。 - 方向:错误,名称:IIBPolicy_rule_error;
转换:输入NULL,输出PIPE,转换文件var:// context / IIB / errTransform(使用上下文变量替代动态错误转换)。
- 最终的策略结果应如下所示:

- MPG创建完成,保存更改。
第5部分。测试
5.1。 准备工作
- 下载,例如,用于在队列中读取和写入消息的rfhutil实用程序;
- 测试文件位于与项目文件相同目录的tests文件夹中。
5.2。 健康检查
- 使用curl工具发送请求(对于下面的请求,当前目录应与example.json相同)。
curl -vv -k "http://192.168.99.100:7170/dp/test/transformMessage" -H "Content-Type: application/json" --data-binary @example.json
- 打开2个rfhutil实用程序实例,并从第一个实例的DP.IIB.REQIN队列中减去消息;
- 转到MQMD选项卡并复制MessageID;
- 在第二个实例中,打开rs.xml文件,在MQMD选项卡中,将消息标识符插入CorrelID中,并将消息放入DP.IIB.RESIN队列中。
- 您应该得到类似的答案:

- 重复步骤1-3;
- rs_error.xml correllId;

6.
6.1。 理论
Log Targets , .
Log Targets . , 4 1000Kb, . 2-4 . , . , DataPower, , , , , , - MPG, .
6.2.
- trunk;
- Log Target ;
- :
- (IIB_LOG);
- (File);
- (Text);
- timestamp(zulu);
- (logtemp:///IIB.log — IIBMPG);
- (1000).

- . MPG IIBMPG.

- , , ( , ).

- ;
- ;
- .
- Log Targets MPG.
- :
- , , .

- .

7. -
- – , . – , , - .
- . View Logs. , « », « » .
- . . MPG Show Probe -> Enable Probe. . , .

- , .
– .