客户通过HTTP协议接入TUXEDO,通过中介服务将接入的HTTP协议转换为TUXEDO服务;本节讲述了HTTP-TUXEDO协议转换场景的创建过程,包括创建工程、创建HTTP和TUXEDO协议相关的服务和运行。通过本节你将了解到如下内容:

  1. 如何创建HTTP-TUXEDO协议转换场景;
  2. 如何在Studio中测试开发的业务逻辑;

本节中的例子使用Tuxedo自带的"TOUPPER"--即大小写转换(用户输入一串字符,Tuxedo服务端将其转换为全部大写返回);由于服务端是C语言写的,首先按照Tuxedo帮助文档中的步骤,配置服务器、设置正确的IP和端口,编译服务端代码,并启动Tuxedo服务器,ESB采用的是JOLT方式与Tuxedo进行交互。 本示例中通过浏览器模拟调用者,用HTTP请求到达ESB后会转化成为TUXEDO协议所对应的请求服务;由于TUXEDO并不是一个独立的协议,而是属于自定义CUST协议的一种,所以要使用TUXEDO服务,首先创建CUST,在配置中选择TUXEDO。

# 创建工程

  1. 打开APIGateway Studio,在资源管理器中,点击右键,选择"创建->ESB项目"菜单项,创建工程,如下图所示。
    worddav535f7657bcdc356374bbebed94b03252.png

  2. 在工程创建向导中,填写工程的基本信息,如工程名称等,如下所示。
    esb1.jpg

  3. 点击下一步,设置工程的引用库,这里使用缺省设置,如下所示。
    esb3.png

  4. 点击"完成"按钮,完成创建工程。创建工程后,资源管理器如下所示。
    worddavea4de0664d5b0d1f6e4774bf55829435.png

  5. 至此ESB项目创建完成。

# 创建公共Module

  1. 在资源管理器中,选中project,点击右键,选择"创建->公共Module"菜单项,创建公共Module,如下图所示。
    worddav62a2aac605873f21dbf6bfe3338c05c0.png

2.在"公共Module"向导中,输入公共Module的相关信息,点击"完成"按钮,创建公共Module,如下图所示。
common.png

  1. 公共Module创建完毕,展开新创建的公共Module,如下所示。
    common1.png

# 创建Http Transport

1.在资源管理器中,选中新建的公共Module中的"Transport",点击右键,选择"创建->Http类型Transport"菜单项,创建HttpTransport,如下图所示。
httptrans0.jpg

2.在"创建Http类型Transport"向导中,输入HttpTransport的相关信息,点击"完成"按钮,创建HttpTransport。
httptrans1.jpg

3.HttpTranport创建完毕,展开新创建的HttpTranport,如下所示。
httptrans2.jpg

  1. 打开该文件后,可以修改默认值,在此我们不做修改,如下图所示。
    image2020-7-10 17:46:25.png

# 创建TUXEDO Endpoint

  1. 在资源管理器中,选中新建的公共Module中的"Endpoint",点击右键,选择"创建->CUST类型Endpoint"菜单项,创建CUSTEndpoint,如下图所示。
    worddav236afae25b71cbe9d6ad722fe4cf953b.png

2.在"创建CUST类型Endpoint"向导中,输入CUSTEndpoint的相关信息,点击"完成"按钮,创建CUSTEndpoint,如下图所示。
worddav86c66ed6ceeea653add24746ac6cf957.png

  1. 打开该文件后,可以修改默认值,在此我们不做修改,如下图所示。
    worddav9db3b39ba4048d24468a6f3b3dbaf58d.png

上图中的"协议类型"是可以选择的,由于我们创建的时tuxedo服务,所以这里选择TUXEDO。

参数名称 描述
hostName Tuxedo服务器的IP
port 一个十进制的端口数值
userRole Tuxedo的用户角色,(默认为:admin,如果安全要求强制)
appPassword Tuxedo 超级管理员的口令
username Tuxedo用户标识,(默认为你的帐户名称,如果安全要求强制)
userPasswd Tuxedo 的口令
idletimeout 服务请求超时时间

# 创建业务Module

  1. 在资源管理器中,选中project,点击右键,选择"创建->业务Module"菜单项,创建业务Module,如下图所示。
    rest1.jpg

  2. 在"业务Module"向导中,输入业务Module的相关信息,点击"完成"按钮,创建业务Module,如下图所示。
    rest.jpg

  3. 业务Module创建完毕,展开新创建的业务Module,如下所示。
    rest2.jpg

# 创建TUXEDO业务服务

  1. 在资源管理器中,选中新建的业务Module中的"业务服务",点击右键,选择"创建->CUST业务服务"菜单项,创建CUST业务服务,如下图所示。
    worddav785bc1a57a915aa2ec785ccb6b472288.png

  2. 在"创建CUST业务服务"向导中,输入相应的信息,点击"完成"按钮,完成CUST业务服务的创建,如下图所示。
    worddav12611cd2cc356b78760b6eb5d9f4a146.png

  3. 编辑生成的TUXEDO业务服务的文件。选择刚刚创建的CUSTEndpoint,如下图所示。
    worddavaf148c62f2189615ed45cb396c2ceb94.png

在"协议类型"下拉列表中选择TUXEDO。

# 创建JAVA方法

  1. 创建Java方法。在资源管理器中右键点击业务Module中的Java,选择"创建->类" 菜单项,如下图所示。
    worddavcf90f350d08e8cf08711fbaa55ea7a42.png

2.在弹出的"新建Java类"向导中输入相应信息后,点击"完成"按钮即可,如下图所示。
worddav06cf126af5227bab7e0248fd42cb4be2.png

  1. 完整的HelloTuxedo代码如下所示。
package com.nandy.tuxedo;
import java.util.Map;
import com.primeton.esb.message.ITipMessagePayload;
import com.primeton.esb.message.TipMessageBuilder;
public class HelloTuxedo {
    public ITipMessagePayload firstTuxedo(ITipMessagePayload mesg){
        TipMessageBuilder<Object> mBuilder = TipMessageBuilder.withPayload(mesg.getMessagePayload());
        mBuilder.copySystemHeaders(mesg.getSystemHeaders());//放置系统头
        mBuilder.setMessageHeaders(mesg.getMessageHeaders()); //设置消息头
        @SuppressWarnings("unchecked")
        Map<String, Object> protocolHeaders = (Map<String, Object>) mesg.getProtocolHeaders();//设置协议头
        protocolHeaders.put("#tuxedo.jolt.service.name", "TOUPPER");
        protocolHeaders.put("#tuxedo.jolt.service.prepare", "com.nandy.tuxedo.PrepareClazz");
        mBuilder.setProtocolHeaders(protocolHeaders);
        ITipMessagePayload message=mBuilder.build();//构建出ITipMessagePayload
        return message;
    }
}

代码解析: 本实例代码的主要作用是把中介服务中Java图元中传递的参数inMessage进行消息转换,向protocolHeaders中放入需要调用的Tuxedo服务端服务名称,这里的两个Key值是约定好的,不能改动(#tuxedo.jolt.service.name、#tuxedo.jolt.service.prepare),而"com.nandy.tuxedo.PrepareClazz"为下面规则中定义的类的完整路径,此类的报名和类名可以自行定义,向protocolHeaders中put时要特别注意。 规则: 同时需要创建一个类包含以下两个方法,并且该类编写完成后,需要打成jar包,导出到ESB_homelibs public JoltRemoteService prepareParams(JoltRemoteService tuxedoService); public Object prepareResults(JoltRemoteService tuxedoService); 我们该实例是以Tuxedo中的"TOUPPER"服务器代码为例进行讲解,所以给出的规定中该类的示例代码为PrepareClazz.java。

package com.nandy.tuxedo;
import bea.jolt.JoltRemoteService;
public class PrepareClazz {
    public JoltRemoteService prepareParams(JoltRemoteService tuxedoService){
        tuxedoService.setStringItem("STRING",0, "Yesterday once more!");
        return tuxedoService;
    }
    public Object prepareResults(JoltRemoteService tuxedoService) {
        Object obj = tuxedoService.getStringDef("STRING", "");
        return obj;
    }
}

# 创建中介服务

  1. 在资源管理器中,选中新建的业务Module的"中介服务"项,点击右键,选择"创建->中介服务"菜单项,创建中介服务,如下图所示。
    worddav7dc863c67714819a2162c50bf8c36943.png

  2. 在"创建中介服务"向导中,输入相应的信息,点击"完成"按钮,如下图所示。
    worddavb9ee1f91ad63c868745d41d49bf0f781.png

  3. 生成中介服务,如下图所示。
    worddav0243dae7aeba38f7384a0c9f3979e5bc.png

4.在"中介服务"编辑页面点击"服务编排"链接,进入编排中介服务的界面。在"选用板"中将"JAVA方法"和"CUST业务服务"图元拖拽到右边的编辑区,并用"连接线"依次连接,如下图所示。
worddav37e3ced7f755b5ad2d3cf1aa33391416.png

5.双击编辑区中的"Java方法"图元,弹出"JAVA方法属性设置"窗口,如下图所示。
worddav3a5d45b501c7ce8fc8bf2891f5f59ffa.png

  1. 在"JAVA方法属性设置"窗口中,点击"浏览...",弹出"选择java方法"窗口,在"选择要打开的类型:"的输入框中输入类名"TUXEDO..",在"匹配的类型"中选中HelloTuxedo ,再选中firstTuxedo方法。
  2. 在"JAVA方法属性设置"中设置"参数配置表",如下图所示。
    worddav52fd3643cdac752e29168864aa52b4cf.png

8.双击编辑区中的"CUST业务服务"图元,弹出JMS业务服务的"设置对话框",点击"浏览..."按钮,选择刚创建的CUST业务服务。 9.在"设置对话框"中设置"参数配置表",并点击"确定"按钮,如下图所示。
worddavf8d1114d7dfdb92a5046b3043c5fde3b.png

注意:步骤7中参数的"返回值"和步骤9中的"参数",由于Java图元的返回至是下一个图元的输入参数,所以参数值"outMeg"一定要对应一致,否则会出错。 至此,中介服务创建完成。

# 创建HTTP代理服务

  1. 在资源管理器中,选中新建的业务Module的代理服务项,点击右键,选择"创建->HTTP代理服务"菜单项,创建HTTP代理服务,如下图所示。
    worddav49db507fd2b65a105a7b26ec10997efa.png

  2. 在"创建HTTP代理服务"向导中,输入相应的信息,点击"完成"按钮,如下图所示。
    worddava830d8a0cb1364de0ee04aaea6066d4f.png

  3. 在HTTP代理服务的编辑界面中,需要输入"Url"并设置引用的中介服务,如下图所示。
    worddava0f09d1e53971e49a1b0a7e6c6d2bb80.png

4.至此,HTTP-TUXEDO协议转换场景中所涉及到的开发工作已经完成,可以启动APIGateway ESBServer,并进行测试。

# 启动和测试

  1. 在APIGateway Studio中启动APIGateway ESBServer,如下图所示。
    worddav0acb96d07c2f99501cad234929183aa4.png

这里地址栏中输入的地址,根据工程中配置的具体情况而定,如:APIGateway ESBServer的IP地址:Transport中配置的端口/代理服务中配置URI 。