经过前面章节的课程,对Mirth Connect在系统集成与数据交互中的使用有了一个大概的了解;大家一定有个疑惑,Mirth Connect如何组织响应消息并返回给调用者?今天我们就来继续深入讲解Response响应处理机制。

C#示例:

本课程我们将通过C#编程语言调用Mirth Connect接口服务来讲述,C#示例截图如下:

C#测试客户端

C#版本Webservice接口服务

TCP Listener 信道示例:

新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式

设置源端TCP Listener参数

设置目的端Channel Writer参数

设置源端转换规则

源端新建JS转换步骤,在‘输入消息模板’录入如下HL7消息模板并添加如下js脚本

MSH|^~\&|SMS|IAH|CERNER|PATHNT|200201291848||ADT^A01|CHPFADIT|P|2.3|||AL|NE|
EVN|A01|200201291848|||REJKB1
PID||53820452|00664524|220675537|AHMED^AYALNE^^^^||19781218|M||E|5718 SEMINARY RD #B5^^FALLS CHURCH^VA^22041||(703)379-8374|||||0053820452|220675537||
PV1||I|2324^2302^-B ||||1111111^PINA|||MED|||||||1111111^PINA|S||S|P||||||||||||||||||IAH|||||200201291848|
PV2|||^SEIZURE, FEVER, RLQ PAIN

var dbConn;

try {
      var pid=msg['PID']['PID.2']['PID.2.1'].toString();
      var name=msg['PID']['PID.5']['PID.5.2'].toString();
      var sex=msg['PID']['PID.8']['PID.8.1'].toString();
      var dob=msg['PID']['PID.7']['PID.7.1'].toString();
      var addr=msg['PID']['PID.11']['PID.11.3'].toString();
      var ssn=msg['PID']['PID.19']['PID.19.1'].toString();
      channelMap.put('pid',pid);
     dbConn=DatabaseConnectionFactory.createDatabaseConnection('org.mariadb.jdbc.Driver', 'jdbc:mariadb://127.0.0.1:3306/mirthtestdb', 'root', '125353Ct');
      var result=dbConn.executeCachedQuery("select count(*) from  patient WHERE pid = "+pid);
     result.next();
      var icount = result.getInt(1);
      if(icount==0)
      {
         var expression = "INSERT INTO patient (pid,name,sex,dob,addr,ssn) VALUES (?,?,?,?,?,?)";
         var paramList=new Array(pid,name,sex,dob,addr,ssn);
        icount = dbConn.executeUpdate(expression, paramList);
        channelMap.put('Ret','1');
      }else{
          channelMap.put('Ret','0');
      }
      result.close();

} finally {
     if (dbConn) {
         dbConn.close();
     }

}

目的端响应转换规则

在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本

<patient>

<pid></pid>

<ret></ret>

</patient>

tmp['pid']=$('pid');

tmp['ret']=$('Ret');

运行C#版TCP Sender,进行如上测试,成功获取响应,验证Mirth Connect 的TCP Listener信道OK!

HTTP Listener 信道示例:

新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式

设置源端HTTP Listener参数

设置源端转换规则;源端新建JS转换步骤,在‘输入消息模板’录入如下XML消息模板并添加如下js脚本

<patient><pid>110</pid><name>撰獲濟</name><sex>M</sex><dob>19650108</dob><addr>臺灣大學</addr><ssn>33661489</ssn><status>0</status></patient>

var dbConn;

try {
      var pid=msg['pid'].toString();
      var name=msg['name'].toString();
      var sex=msg['sex'].toString();
      var dob=msg['dob'].toString();
      var addr=msg['addr'].toString();
      var ssn=msg['ssn'].toString();
      channelMap.put('pid',pid);
     dbConn=DatabaseConnectionFactory.createDatabaseConnection('org.mariadb.jdbc.Driver', 'jdbc:mariadb://127.0.0.1:3306/mirthtestdb', 'root', '125353Ct');
      var result=dbConn.executeCachedQuery("select count(*) from  patient WHERE pid = "+pid);
     result.next();
      var icount = result.getInt(1);
      if(icount==0)
      {
         var expression = "INSERT INTO patient (pid,name,sex,dob,addr,ssn) VALUES (?,?,?,?,?,?)";
         var paramList=new Array(pid,name,sex,dob,addr,ssn);
        icount = dbConn.executeUpdate(expression, paramList);
        channelMap.put('Ret','1');
      }else{
          channelMap.put('Ret','0');
      }
      result.close();

} finally {
     if (dbConn) {
         dbConn.close();
     }

}

设置目的端Channel Writer参数

目的端响应转换规则;在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本

<patient>

<pid></pid>

<ret></ret>

</patient>

tmp['pid']=$('pid');

tmp['ret']=$('Ret');

运行C#版HTTP Sender,进行如上测试,成功获取响应,验证Mirth Connect 的HTTP Listener信道OK!

Web Service Listener 信道示例:

新建信道并设置源端输入输出参数格式、目的端输入输出格式、响应输入输出参数格式

设置源端Web Service Listener参数

设置源端转换规则;源端新建Mapper映射转换步骤,在‘输入消息模板’录入如下XML消息模板

<patient>

<pid></pid>

<ret></ret>

</patient>

设置目的端Channel Writer参数

目的端转换规则;在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本

<?xml version="1.0" encoding="utf-8" ?><patient><reason></reason><info><pid>103</pid><name>Amarnath Zhao</name><sex>M</sex><dob>19910518</dob><addr>臺灣&apos;&lt;&amp;&gt;&quot;台中</addr><ssn>886</ssn><status>0</status></info></patient>

var dbConn;

try {
     dbConn=DatabaseConnectionFactory.createDatabaseConnection('org.mariadb.jdbc.Driver', 'jdbc:mariadb://127.0.0.1:3306/mirthtestdb', 'root', '125353Ct');
      var result=dbConn.executeCachedQuery("select count(*) from  patient WHERE pid = "+$('pid'));
     result.next();
      var icount = result.getInt(1);
      if(icount==0)
      {
         tmp['reason']='不存在!';
         tmp['info']['pid']='';
         tmp['info']['name']='';
         tmp['info']['sex']='';
         tmp['info']['dob']='';
         tmp['info']['addr']='';
         tmp['info']['ssn']='';
         tmp['info']['status']='';
        channelMap.put('Ret','0');
      }else{
          var result1=dbConn.executeCachedQuery("select * from  patient WHERE pid = "+$('pid'));
          result1.next();
          tmp['reason']='存在.';
           tmp['info']['pid']=result1.getString(1);
           tmp['info']['name']=result1.getString(2);
           tmp['info']['sex']=result1.getString(3);
           tmp['info']['dob']=result1.getString(4);
           tmp['info']['addr']=result1.getString(5);
           tmp['info']['ssn']=result1.getString(6);
           tmp['info']['status']=result1.getString(7);
           result1.close();
          channelMap.put('Ret','1');
      }
      result.close();

} finally {
     if (dbConn) {
         dbConn.close();
     }

}

channelMap.put('patinfo',tmp);

目的端响应转换规则;在‘输出消息模板’中录入如下xml格式模板并添加如下js脚本

<xml>

<ret></ret>

<pat></pat>

</xml>

tmp['ret']=$('Ret');

tmp['pat']=$('patinfo');

运行C#版Web Service Sender,进行如上测试,成功获取响应,验证Mirth Connect 的Web Service Listener信道OK!

本课知识点总结

1.TCP\HTTP\Web Service三种Listener的响应消息处理

2.Response均以目的端作为响应

3.数据库JS查询与插入编程

本课扩展思考

请在目的端响应转换中写如下JS脚本responseMap.put('responseAck', ack.toString() );然后在源端Response参数指定此作为响应。

第六課-Channel Study For TCP Listener & HTTP Listener & Web Service Listener About Response Handler的更多相关文章

  1. 自顶向下深入分析Netty(六)--Channel总述

    自顶向下深入分析Netty(六)--Channel总述 自顶向下深入分析Netty(六)--Channel源码实现 6.1 总述 6.1.1 Channel JDK中的Channel是通讯的载体,而N ...

  2. Netty 源码解析(六): Channel 的 register 操作

    原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365篇原创计划”第六篇. 接下来的时间灯塔君持续更新Netty系列一共九篇   Netty 源码解析(一 ):开始 Netty ...

  3. Beaglebone Black– 智能家居控制系统 LAS - 网页服务器 Node.js 、Web Service、页面 和 TCP 请求转 UDP 发送

    上一篇,纯粹玩 ESP8266,写入了 init.lua 能收发 UDP.这次拿 BBB 开刀,用 BBB host 一个 web server ,用于与用户交互,数据来自 ESP8266 的 UDP ...

  4. Web中Listener的创建

    使用Listener只需要两个步骤: 定义Listener实现类. 通过Annotation或在web.xml文件中配置Listener 实现Listener类 监听不同Web事件的监听器不相同,常用 ...

  5. 测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)

    Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访 ...

  6. web service,soap ,http,tcp,udp

    webservice and soap  HTTP只负责把数据传送过去,不会管这个数据是XML.HTML.图片.文本文件或者别的什么.而SOAP协议则定义了怎么把一个对象变成XML文本,在远程如何调用 ...

  7. .NET Remoting三种信道Http,Tcp,IPC和Web Service的访问速度比较(转)

    Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访 ...

  8. web.xml listener配置

    listener简介: <listener>能为web应用创建监视器,监听上下文的各种事件,如:application和session事件,这些监视器都是按相同的方式定义,它的功能取决于各 ...

  9. SpringBoot系列教程web篇Listener四种注册姿势

    java web三要素Filter, Servlet前面分别进行了介绍,接下来我们看一下Listener的相关知识点,本篇博文主要内容为SpringBoot环境下,如何自定义Listener并注册到s ...

  10. 转:Java NIO系列教程(六) File Channel

    Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 打开FileChannel 在使用F ...

随机推荐

  1. AutoNumber VsCode插件开发

    AutoNumber VsCode插件开发 ::: details 目录 目录 AutoNumber VsCode插件开发 Step. 2: 安装脚手架 Step. 3: 创建空项目 Step. 4: ...

  2. Sub-process /usr/bin/dpkg returned an error code (1)问题

    在用apt-get安装软件包的时候遇到E: Sub-process /usr/bin/dpkg returned an error code (1)问题,解决方法如下: cd /var/lib/dpk ...

  3. 用于演示文稿的新 Dapr 幻灯片

    Dapr 官方博客上(https://blog.dapr.io/posts/2024/03/10/new-dapr-slide-deck-for-your-presentations/)发布了一个新的 ...

  4. 掌握 Kubernetes 故障排除技巧:kubectl命令的基本指南

    Kubernetes 彻底改变了容器编排,简化了应用程序的管理和扩展.然而,与任何复杂系统一样,Kubernetes 集群也会遇到问题,需要及时解决才能保持最佳性能和可靠性.在本文中,我们将深入探讨必 ...

  5. 关于全景(360)图片拼接的方法(Opencv3.0 Stitcher)----续(一)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  6. vue-router动态注册

    来源 写路由时每新建一个路由都需要import一下或其他方式(如箭头函数import)很是麻烦,有麻烦就有需求,于是以下这篇文章就来了 吹水 要想动态注册路由,那么就需要制定规则,即每个路由有一定的规 ...

  7. OWOD:开放世界目标检测,更贴近现实的检测场景 | CVPR 2021 Oral

    不同于以往在固定数据集上测试性能,论文提出了一个更符合实际的全新检测场景Open World Object Detection,需要同时识别出未知类别和已知类别,并不断地进行增量学习.论文还给出了OR ...

  8. FBNet/FBNetV2/FBNetV3:Facebook在NAS领域的轻量级网络探索 | 轻量级网络

    FBNet系列是完全基于NAS方法的轻量级网络系列,分析当前搜索方法的缺点,逐步增加创新性改进,FBNet结合了DNAS和资源约束,FBNetV2加入了channel和输入分辨率的搜索,FBNetV3 ...

  9. KingbaseES V8R3集群运维案例---failover切换故障分析

    案例说明: KingbaseES V8R3集群主库数据库服务重启后,failover切换失败,分析failover失败的具体原因. 适用版本: KingbaseES V8R3 一.集群架构 node1 ...

  10. KingbaseES KWR中等待事件分析案例

    背景 昨天有现场同事碰到了一个现象,一条简单的update语句运行缓慢.单独运行没有问题,在特定时间运行就会非常缓慢,怀疑是业务系统特殊逻辑导致数据库有阻塞引发的update语句慢的现象.故此现场同事 ...