本节讲述了CUST自定义协议(以Primeton MQ为例)穿透场景的创建过程,包括创建ESB项目、创建CUST协议相关的服务、部署、监控和运行。通过本节你将了解到如下内容:

  1. 如何创建CUST(Primeton MQ为例)协议穿透场景;
  2. 如何在Studio中测试运行开发的业务逻辑;
  3. 如何通过APIGateway Console部署Primeton MQ相关的Module;

# 穿透说明

本穿透主要内容是:在APIGateway中以队列的形式接收一条来自Primeton MQ中队列q_receive中的TextMessage类型的消息,穿透APIGateway后,再发送到Primeton MQ中队列q_send。

# 创建ESB项目

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

  2. 在项目创建向导中,填写项目的基本信息,如项目名称等,如下图所示。
    worddav08c98dbf6d4240aec109e039de5e58a7.png

  3. 点击【下一步】,设置项目的引用库,这里使用缺省设置,如下所示。
    worddav94ed965b7f7d79156f12007741385410.png

  4. 点击【完成】按钮,完成创建ESB项目。创建ESB项目后,资源管理器如下所示。
    worddav7c033be315f21c63c828745c9798d760.png

至此,ESB项目创建完毕。

# 创建公共Module

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

# 创建CUST Transport

1.在资源管理器中,选择"Transport->创建"菜单项,选中"CUST类型Transport",如下图所示。
worddav6f3cfe94653879e3ac7c609c9455fb67.png

2.修改Cust Transport 扩展配置信息,如下图所示。
image2022-4-24_15-28-4.png

  • 选择协议类型为: PMQ;
  • 扩展实现不做任何改变;

扩展属性配置如下:

属性标识 属性名称 属性值 属性描述
属性标识 属性名称 属性值 属性描述
brokerUrl 服务器地址 tcp://192.168.80.106:61616 PMQ所在服务器tcp协议传输地址
username 用户名 admin MQ授权用户名
password 密码 admin MQ授权密码
messageModel 消息模式 P2P 只能填写(发布订阅模型PUBSUB或点对点模型P2P),默认是P2P
destination 目标 q_receive 队列或者主题名称
acknowledge 消息应答方式 AUTO_ACKNOWLEDGE 只能填写(自动应答AUTO_ACKNOWLEDGE,客户端手动应答CLIENT_ACKNOWLEDGE,重复消息应答DUPS_OK_ACKNOWLEDGE),默认是AUTO_ACKNOWLEDGE

# 创建CUST Endpoint

1.在资源管理器中,选择"Endpoint->创建"菜单项,如下图所示。
worddav72ee6779e87c47d2e56927c7ba631ba2.png

2.修改Cust Endpoint 扩展配置信息,如下图所示。
image2022-4-24_15-12-39.png

  • 选择协议类型为: PMQ;
  • 扩展实现不做任何改变;

扩展属性配置如下:

属性标识 属性名称 属性值 属性描述
brokerUrl 服务器地址 tcp://192.168.80.106:61616 PMQ所在服务器tcp协议传输地址
username 用户名 admin MQ授权用户名
password 密码 admin MQ授权密码
messageModel 消息模式 P2P 只能填写(发布订阅模型PUBSUB或点对点模型P2P),默认是P2P
destination 目标 q_send 队列或者主题名称
acknowledge 消息应答方式 AUTO_ACKNOWLEDGE 只能填写(自动应答AUTO_ACKNOWLEDGE,客户端手动应答CLIENT_ACKNOWLEDGE,重复消息应答DUPS_OK_ACKNOWLEDGE),默认是AUTO_ACKNOWLEDGE

# 创建业务Module

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

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

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

# 创建CUST业务服务

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

  2. 在"创建CUST业务服务"向导中,输入相应的信息,点击【完成】按钮,完成CUST业务服务的创建,如下图所示。
    image2022-4-24_15-21-12.png

  3. 编辑生成的CUST业务服务的文件。如下所示。
    image2022-4-24_15-35-34.png

说明

  • 这里Endpoint选择刚才建立的名为:com.primeton.esb.project.common.endpoint 的 CUST Endpoint。
  • 这里协议类型选择:PMQ

# 创建CUST代理服务

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

  2. 在"创建CUST代理服务"向导中,输入相应的信息,点击【完成】按钮,完成CUST代理服务的创建,如下图所示。
    image2022-4-24_15-44-55.png

  3. 编辑生成的CUST代理服务的文件。如下所示。
    image2022-4-24_15-46-13.png

说明

  • 这里Transport选择刚才所创建的名为:com.primeton.esb.project.common.transport 的CUST Transport;
  • 这里关联服务类型选择:业务服务;
  • 这里服务名称选择刚才所创建的名为:com.primeton.esb.project.restaurant.bs.pmq.bizService的业务服务;
  • 这里协议类型选择:PMQ

点击保存按钮即可。

# 导出部署包

  1. 在资源管理器中选中"project"项目,点击右键,点击"导出(O)..."菜单项,准备导出该项目,如下图所示。

  2. 在"导出"窗口中,选择"ESB->导出部署包",点击【下一步】按钮,如下图所示。

  3. 在弹出的"导出部署包"窗口中选择这两个Module,并指定"保存位置",将部署包命名为CUSTDemo.ecd,点击【下一步】按钮,如下图所示。
    worddav325f69a4fad935973df26bb9e4063cee.png

  4. 点击【完成】按钮,会弹出"提示"窗口,显示"导出成功",表明已经成功导出这两个Module。

# 部署

  1. 使用开发账户登陆开发门户,单击左侧导航树上的 “模型部署 >新建部署” ,弹出 “新建部署” 界面。
    img

  2. 单击“新建部署“,显示新建部署页面,选取文件。
    img

  3. 勾选“服务器”,点击“部署”,将模型部署到服务器。
    img

  4. 部署成功后会显示相应信息,如下图所示。
    img

# 发送消息

可编写Java方法来发送消息,java 方法如下: MsgSender .java

private static String url = "tcp://192.168.80.106:61616";

private static String queueName = "q_receive";

private static ConnectionFactory connectionFactory;

private static Connection connection;

private static Session session;

private static Destination destination;

private static MessageProducer producter;

private static String text = "Hello , Primeton APIGateway";

public static void main(String[] args) {
    init();
    sendMessage(text);
    close();
}

/**
 * 初始化
 */
public static void init() {
    connectionFactory = new PMQConnectionFactory(url);
    try {
        connection = connectionFactory.createConnection();
        connection.start();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        destination = session.createQueue(queueName);
        producter = session.createProducer(destination);
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

public static void close() {
    try {
        if (producter != null) {
            producter.close();
            producter = null;
        }
        if (session != null) {
            session.close();
            session = null;
        }
        if (connection != null) {
            connection.close();
            connection = null;
        }
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

/**
 * 发送消息
 *
 * @param text 消息体
 */
public static void sendMessage(String text) {
    try {
        Message message = session.createTextMessage(text);
        producter.send(message);
        System.out.println("发送消息 : " + text);
    } catch (JMSException e) {
        e.printStackTrace();
    }
}

说明

# 结果

使用运维账户登陆运维门户,可通过governor的“监控统计>资源监控>队列监控“查看q_send队列中是否有一条"Hello , Primeton APIGateway"的消息,如果有,则说明成功地从队列q_receive接收到了一条消息,经过APIGateway后,再发送到了队列q_send中。
image2023-10-8_13-55-45.png

也可以设置APIGateway ESBServer的日志等级(APIGateway ESBServer安装路径/EOS/_srv/config/log4j-trace.xml),这样消息成功穿透APIGateway并发送后,APIGateway ESBServer将会在后台打如下印出信息。
image2022-4-24_17-3-1.png