基于JPos的消息交换系统

消息交换系统需求解读

消息交换系统不不是一个具体的业务系统,而是业务系统的运转的基础框架;

他的运转是体现在报文交换上的;

要定义一个可被不同业务系统使用的报文规范;

报文格式

报文内容参考ISO8583(87版),传输使用XML形式。为不和标准冲突,目前吧自定义域放在87版的自定义域里。

具体定义可参考schema.xls

系统运转机制

基于JPos的消息交换系统是一个自管理的服务框架。

JPos作为消息平台十分灵活,为统一流程我们将设计一套网银专用的消息交换机制。

系统将建立3个层次,接入层、业务层、收单链路层;

每个层都是一或多个平等的组件,相互间可以通过Socket调用;

  • 一个标准的组件由下列几个模块组成

  • 服务器的工作机制

    作为一个服务程序它在启动后将监控一个部署目录,不断扫描并发现所有的XML配置文件。如果发现有新增或改动,就会用XML生成组件并加载到注册机里。
  • 消息交换流程
    1. 客户端把消息发送到组件服务
    2. 服务监听将接收到的消息转给入口通道
    3. 入口通道顺序执行被配置在这里的处理器
    4. 经过入口通道后消息被转给路由器
    5. 路由器根据配置域的为消息匹配一个出口通道
    6. 消息被转给出口通道
    7. 出口通道顺序执行配置在这里的处理器
    8. 消息被发送出去

配置文件

<!-- 服务监听 -->
<server
class="org.jpos.q2.iso.QServer"
logger="Q2"
name="module">
    <attr
name="port"
type="java.lang.Integer">9031</attr>
 
    <!-- 入口通道 -->
    <channel
class="org.jpos.iso.channel.XMLChannel"
logger="Q2"
        packager="org.jpos.iso.packager.XMLPackager">
        <!-- 入口通道内的处理器,如果不需要要也可以不配置 -->
        <!-- 方向incoming:匹配消息进入,outgoing:匹配消息返回-->
        <filter
class="com.example.jpos.client.TestFilter"
direction="incoming">
            <property
name="fields"
value="0 2 3"/>
        </filter>
    </channel>
 
    <!-- 路由器 -->
    <!-- 这里是根据32域匹配出口通道 -->
    <request-listener
class="org.jpos.apps.qsp.Q2Router"
logger="Q2">
        <router
switch="${32}==01"
type="mux"
bounce="true"
destination="out1"
timeout="30000"
/>
        <router
switch="${32}==02"
type="mux"
bounce="true"
destination="out2"
timeout="30000"
/>
    </request-listener>
</server>
<!-- 出口通道需要用mux链接 -->
<mux
class="org.jpos.q2.iso.QMUX"
logger="Q2"
name="out1">
    <in>receive</in>
    <out>send</out>
</mux>
<channel-adaptor
name="channeladaptor"
    class="org.jpos.q2.iso.ChannelAdaptor"
logger="Q2">
    <!-- 出口通道 -->
    <channel
name="channel"
class="org.jpos.iso.channel.XMLChannel"
logger="Q2"
packager="org.jpos.iso.packager.XMLPackager">
        <property
name="host"
value="localhost"
/>
        <property
name="port"
value="9051"
/>
    </channel>
    <in>send</in>
    <out>receive</out>
    <reconnect-delay>1000</reconnect-delay>
</channel-adaptor>

JPos学习的更多相关文章

  1. Atitit.收银系统模块架构attilax 总结

    Atitit.收银系统模块架构attilax 总结 1. 常规收银系统模块结构1 1.1. 商品管理1 1.2. 会员系统1 1.3. 报表系统1 1.4. 会员卡系统1 1.5. 库存管理1 2.  ...

  2. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  3. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  4. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  5. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  8. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  9. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

随机推荐

  1. 转 Java 208道面试题及部分答案 补充部分答案

    转自https://www.cnblogs.com/chen1005/p/10481102.html   ---恢复内容开始--- 一.Java 基础 1.JDK 和 JRE 有什么区别? 答:JRE ...

  2. BOM学习-javascript计时器小结

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. android开发工具eclipse的安装与配置

    l开发主要应用Eclipse 3.7版本. l辅助工具为jdk.Androidsdk Android环境搭建   –1.1.JDK安装 –1.2.Eclipse安装 –1.3.Android SDK安 ...

  4. 安装mysql时 make 时 提示 redeclaration of C++ built-in type ‘bool’ 错误

    安装mysql时 make 时 提示 redeclaration of C++ built-in type ‘bool’ 错误 由于gcc-c++是在./configure后进行编译的 重新./con ...

  5. jstat查看JVM的GC情况

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上 ...

  6. postgres的强制类型转换与时间函数

    一.类型转换postgres的类型转换:通常::用来做类型转换,timestamp到date用的比较多select  now()::dateselect  now()::varchar 示例1:日期的 ...

  7. 洛谷 U10223 Cx大帝远征埃及

    题目背景 众所周知,Cx是一个宇宙大犇.Cx能文善武,一直在为大一统的实现而努力奋斗着.Cx将调用他的精锐军队,一个精锐士兵最多可以战胜十个埃及士兵.同时Cx是个爱才的人,他想要制定一份能使在占领埃及 ...

  8. 洛谷 P1216 [USACO1.5]数字三角形 Number Triangles(水题日常)

    题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大.每一步可以走到左下方的点也可以到达右下方的点. 7 3 8 8 1 0 2 7 4 4 4 5 ...

  9. Android(java)学习笔记155:中文乱码的问题处理(qq登录案例)

    1. 我们在之前的笔记中LoginServlet.java中,我们Tomcat服务器回复给客户端的数据是英文的"Login Success","Login Failed& ...

  10. linux部署全流程(未完)

    一.环境搭建 1.jdk 2.tomcat 3.nginx 4.redis 推荐工具:winSCP(用来传输文件).SecureCRT(用来执行命令) 1.jdk 下载地址:https://www.o ...