一种基于fix协议实现业务的方法及系统
技术领域:
:1.本发明属于互联网
技术领域:
:,具体涉及一种基于fix协议实现业务的方法及系统。
背景技术:
::2.金融信息交换协议(financialinformationexchangeprotocol,简称fix协议)是由国际fix协会组织提供的一个开放式协议,目的是推动国际贸易电子化的进程,在各类参与者之间,包括投资经理、经纪人,买方、卖方建立起实时的电子化通讯协议,用于促进与安全交易相关的信息交换。目前fix协议已经有8个版本,分别是fix4.0,fix4.1,fix4.2,fix4.3,fix4.4,fix5.0,fix5.0sp1,fix5.1sp1。3.而fix协议的多版本也带来了如下一些问题:4.1、基于跨境业务平台的交易方式,各交易所与跨境业务平台应使用相同版本的fix协议,但业务平台要对接多个交易所或清算机构,各个交易所及清算机构所使用的fix协议版本并不一致,因此,这将会带来多版本、多业务种类的fix报文信息。5.2、随着业务平台业务不断发展扩充,跨境业务平台将受理不断增长的业务种类(跨境支付、资金冻结、资金解冻、退款、交易扣收、融资贷款、资金账户查询、资金交易结果通知等等),跨境业务平台对各个版本的fix协议兼容性要求不断增加,由此带来跨境业务平台的部署成本和维护难度越来越大。技术实现要素:6.为解决上述问题,本发明的目的在于提供一种基于fix协议实现业务的方法及系统。7.本发明目的通过以下技术方案实现:8.根据本发明的一个方面,提供一种基于fix协议实现业务的方法,所述方法包括以下步骤:9.接收fix报文,所述fix报文为字符串的形式,包含协议号、业务类型和业务数据信息;10.解析获取fix报文中的协议号和业务类型,抽象封装fix报文;11.通过自定义注解方式,根据fix报文协议号和业务类型定位具体的业务实施单元,完成fix报文协议号和业务类型的适配;12.业务实施单元完成业务逻辑处理。13.fix报文由交易机构发送,所述交易机构包括但不限于清算所、证券所、交易所等,交易机构向业务平台发送fix报文,fix报文以字符串的形式上送,字符串内容包含有fix协议号、业务类型和业务数据信息(包括挂单订单号、挂单金额、卖方客户编号、卖方所属清算成员等),在fix报文的扩展使用中,基于fix协议,业务数据(字段)不做限制,即交易机构也可以上送双方约定的自定义字段参数完成业务数据上送。14.进一步地,所述自定义注解包括第一自定义注解和第二自定义注解;15.所述第一自定义注解注解定义业务实现类,并通过key=value存储业务实现类对象信息,其中,key用于存储协议号和业务类型拼接而成的字符串,value用于存储业务实现类对象值对象信息;16.所述第一自定义注解还注解定义name属性,其中name=业务类型;17.所述第二自定义注解包含filed和fieldtype枚举类型两个属性,其中filed值为fix报文中的业务类型,fieldtype涵盖所有fix报文包含实体对应的业务数据。18.进一步地,所述接收fix报文前,还包括:19.加载自定义注解的业务实现类,并将所有标记有该注解的类进行缓存。20.业务平台基于springboot而实施,通过建立abstractfixmessagehandlecommonfactory工厂类实现initializingbean接口,业务平台启动时,首先进行java类扫描工作,扫描平台中包含第一自定义注解@fixmessagehandlecommon自定义注解的业务实现类,并将扫描加载的业务实现类装载进入hashmap中,采用键值对存储业务实现类对象信息,其中,key用于存储协议号和业务类型拼接而成的字符串(即key=version_bussinesstype),value用于存储业务实现类对象值对象信息(即value=fixmessagehandleconfig.class)。fixmessagehandleconfig值对象包含clazz(业务实现类对象值)、messageclazz(业务实现类对象属性值,如姓名、银行账号、开户日期等)、messagefieldconfigs(属性包含业务实现类对象field信息以及type等信息,便于后续将报文信息转换为具体实现对象)。21.采用hashmap方式存储包括但不限于使用结构化数据库存储(mysql/oracle/sqlserver…)、非结构化存储(redis/memcache…)。使用hashmap缓存相对数据库存储好处在于,避免每次交易都访问数据库,可以降低对数据库的依赖;而且hashmap运行于jvm内存中,读取速度更快,对于系统并发能力提供更好的支撑。22.进一步地,所述接收fix报文包括:23.通过quickfix的消息分流器对各发送端的套接字进行异步非阻塞式监听;24.接收到交易机构fix报文后,根据fix报文消息来源以及报文中携带的会话id查找对应机构的会话信息;25.检查会话序号是否连续;26.若连续,则进入下一步;若不连续,则返回错误报文,并要求发送端重新发送。27.进一步地,所述解析获取fix报文中的协议号和业务类型,包括:28.截取fix报文header信息,获取fix报文的协议号和业务类型;29.拆分字符串,完成key=value的分解。30.第一自定义注解@fixmessagehandlecommon还注解定义name属性,用于定义各fix报文业务类型,如:挂单申请业务(name=2006)、议价申请业务(name=2007)等;业务平台接收上送的fix报文时,截取fix报文前35个字符,得到该fix报文的协议号和业务类型,并将字符串拆分,完成key=value的分解。31.进一步地,所述抽象封装fix报文,包括:32.基于自定义注解,通过key=value模式将fix报文向业务实体object进行转换。33.业务实现类接收报文转换实体objectfield由第二自定义注解@fixfieldconfig注解定义,该自定义注解包含filed和fieldtype枚举类型两个属性,其中,filed值为fix报文中业务类型定义,如2022、2023等;filedtype包含string、int、double、char、boolean等基础数据类型,涵盖了所有fix报文包含实体对应的业务数据。由此,业务平台基于porxcy反射原理,遍历业务类所定义的@fixfieldconfig属性,通过fix报文中的key=value值模式,将报文值对应到filed和filedtype属性中,完成fix报文转换统一实体,便于后续获取业务数据信息。34.进一步地,所述根据fix报文协议号和业务类型定位具体的业务实施单元,包括:35.根据自定义注解中协议号和业务类型属性定位到从缓存中获取的具体业务实现类对象。36.业务平台完成fix报文转换统一实体后,根据第一自定义注解@fixmessagehandlecommon中version和businesstype属性定位到hashmap中获取value值信息,并由hashmap中的value,获取到业务实现类对象信息,通过类对象加载,获取到具体业务实现类对象。37.进一步地,所述业务实施单元完成业务逻辑处理,包括:38.根据定位的业务实现类对象,通过动态反射原理,调用对应业务逻辑方法,进行业务逻辑处理;39.所述业务实现类对象统一继承于一抽象基类,该基类定义统一业务处理步骤,如:业务属性完整性检测、业务处理、业务异常处理、业务处理结果反馈等。40.业务平台业务实现类对象使用模板模式和策略模式,统一继承abstractfixmessagehandlecommon父类,父类中定义了业务处理逻辑单元,业务平台完成业务实现类对象转换,调用父类run方法,开始执行业务逻辑处理。41.进一步地,当有新的fix报文协议号更新,或有新的业务类型增加时,则同步更新业务实现类。42.基于上述技术方案,当有业务增加或协议变更维护时,业务平台只需要同步更新业务实现类,而不会对业务逻辑处理发生变动,从而降低了业务平台的部署运行成本,同时降低了业务运行故障发生率。43.根据本发明的另一方面,提供一种基于fix协议实现业务的系统,所述系统包括以下模块:44.接收模块:用于接收fix报文;45.解析模块:用于解析获取fix报文中的协议号和业务类型,抽象封装fix报文;46.定位模块:用于通过自定义注解方式,根据fix报文协议号和业务类型定位具体的业务实施单元;47.调用执行模块:用于业务实施单元调用业务逻辑方法,完成业务逻辑处理。48.与现有技术相比,本发明具有以下优点及有益效果:49.(1)本发明采用的是一种基于自定义注解实现的方法,通过提取fix报文中的版本协议号以及业务类型编码,基于动态反射原理可以查找到当前已编写的各fix协议版本对应的业务实现类,可动态定位指定fix协议版本和业务类型完成业务逻辑处理。50.(2)本发明利用模板模式、策略模式及java的类对象反射原理将业务处理逻辑单元和fix多协议版本进行解耦,促使业务平台业务逻辑处理与fix报文解析实现独立,以此完成fix多协议兼容、多业务种类报文适配的功能;当有业务增加或协议变更维护时,业务平台只需要同步更新业务实现类,而不会对业务逻辑处理发生变动,从而降低了业务平台的部署运行成本,同时降低了业务运行故障发生率。51.(3)本发明采用hashmap缓存而不是数据库存储,避免每次交易都访问数据库,可以降低对数据库的依赖;而且hashmap运行于jvm内存中,读取速度更快,对于系统并发能力提供更好的支撑。附图说明52.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。53.图1为本发明基于fix协议实现业务的方法步骤示意图。54.图2为本发明一实施例业务平台接收fix报文的步骤示意图。55.图3为本发明一实施例基于fix协议实现业务的方法步骤示意图。56.图4为本发明基于fix协议实现业务的系统模块示意图。57.图5为本发明一实施例业务平台加载自定义注解的业务实现类流程示意图。58.图6为本发明一实施例适配fix报文协议号和业务类型的流程示意图。具体实施方式59.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。60.实施例161.如图1和图2所示,本实施例提供一种基于fix协议实现业务的方法,该方法包括以下步骤:62.s1、业务平台接收交易机构发送的fix报文。63.具体地,fix报文是以字符串形式上送,字符串内容包含有fix协议号、业务类型和业务数据信息,业务数据信息如挂单订单号、挂单申请时间、挂单金额、卖方客户编号、卖方所属清算成员等。在fix报文的扩展使用中,基于fix协议,业务数据字段不做限制,即交易机构也可上送双方约定自定义字段参数,完成业务数据上送。64.具体地,业务平台接收交易机构发送的fix报文包括如下步骤:65.s11、业务平台通过quickfix的messagecracker(消息分流器)对各交易机构发送端的socket(套接字)进行异步非阻塞式监听;66.s12、业务平台接收到交易机构fix报文后,根据fix报文消息来源以及报文中携带的会话id查找对应机构的会话信息;67.s13、业务平台检查会话序号是否连续;68.s14、若连续,则进入下一步;若不连续,则返回错误报文,并要求交易机构重新发送。69.业务平台检查会话序号连续,则进入下一步的解析fix报文的步骤。70.s2、业务平台解析获取fix报文中的协议号和业务类型,抽象封装fix报文。71.具体地,业务平台接收到fix报文后,截取fix报文的header信息(前35字符),得到协议号和业务类型;基于自定义注解定义协议号和业务类型属性,可差异化解析fix报文,并将fix报文进行抽象封装转换为统一业务实体属性object,完成fix报文差异化内容的兼容格式化。72.s3、业务平台通过自定义注解方式,根据fix报文协议号和业务类型定位具体的业务实施单元,完成fix报文协议号和业务类型的适配。73.具体地,业务平台根据fix报文协议号和业务类型编码经自定义注解工具类转换,找到对应业务实现类;根据业务实现类中的属性信息(协议号和业务类型)自动定位到具体业务实现类对象,完成fix报文协议号和业务类型的适配。74.s4、业务实施单元完成业务逻辑处理。75.具体地,业务平台根据定位到的具体业务实现类对象,通过动态反射原理,活动类对象信息,调用对应业务逻辑处理方法,完成业务逻辑处理。业务实现类对象统一继承于一抽象基类,该基类用于定义统一业务处理步骤,如:业务属性完整性检测、业务处理、业务异常处理、业务处理结果反馈等。76.业务实施单元完成业务逻辑处理后,业务平台与交易机构发送端自身保存的会话编号+1。77.需要说明的是,在以上实施过程中,当有新的fix报文协议号更新,或有新的业务类型增加时,则同步更新业务实现类。78.基于上述技术方案,当有业务增加或协议变更维护时,业务平台只需要同步更新业务实现类,而不会对业务逻辑处理发生变动,从而降低了业务平台的部署运行成本,同时降低了业务运行故障发生率。79.本实施例采用的是一种基于自定义注解实现的方法,通过提取fix报文中的版本协议号以及业务类型编码,基于动态反射原理可以查找到当前已编写的各fix协议版本对应的业务实现类,可动态定位指定fix协议版本和业务类型完成业务逻辑处理。80.实施例281.如图2、图3、图5和图6所示,本实施例提供一种基于fix协议实现业务的方法,该方法包括以下步骤:82.s0、业务平台加载自定义注解的业务实现类,并将所有标记有该注解的类进行缓存。83.具体地,在本实施例中,业务平台基于springboot而实施,通过建立abstractfixmessagehandlecommonfactory工厂类实现initializingbean接口,业务平台启动时,首先进行java类扫描工作,扫描平台中包含@fixmessagehandlecommon自定义注解的业务实现类,并将扫描加载的业务实现类装载进入hashmap中,采用键值对存储业务实现类对象信息,其中key=version_bussinesstype,value=fixmessagehandleconfig.class,如key=4.4_2006。fixmessagehandleconfig值对象包含clazz(业务实现类对象值)、messageclazz(业务实现类对象属性值,如姓名、银行账号、开户日期等)、messagefieldconfigs(属性包含业务实现类对象field信息以及type等信息,便于后续将报文信息转换为具体实现对象)。84.采用hashmap方式存储包括但不限于使用结构化数据库存储(mysql/oracle/sqlserver…)、非结构化存储(redis/memcache…)。85.springboot是由pivotal团队提供的全新框架,其设计目的是用来简化新spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。86.hashmap是基于哈希表的map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键。除了非同步和允许使用null之外,hashmap类与hashtable大致相同。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get和put)提供稳定的性能。迭代collection视图所需的时间与hashmap实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。87.本实施例使用hashmap缓存相对数据库存储好处在于,避免每次交易都访问数据库,可以降低对数据库的依赖;而且hashmap运行于jvm内存中,读取速度更快,对于系统并发能力提供更好的支撑。88.s1、业务平台接收交易机构发送的fix报文,所述fix报文为字符串的形式,包含协议号、业务类型和业务数据信息。89.在本实施例中,交易机构包括但不限于清算所、证券所、交易所等。在同一类跨境业务中,不同交易机构上送的fix报文协议号可能会有所不同,对应同类业务fix报文业务数据也会有所不同。例如:对于碳配额议价申请业务,甲交易机构使用fix4.4协议,乙交易商使用fix5.0协议,对于议价订单编号,甲使用2049字段上送,而乙使用2048字段上送,那么业务处理逻辑需要同时兼容这两家机构的fix报文业务数据。90.具体地,fix报文是以字符串形式上送,字符串内容包含有fix协议号、业务类型和业务数据信息,业务数据信息如挂单订单号、挂单申请时间、挂单金额、卖方客户编号、卖方所属清算成员等。在fix报文的扩展使用中,基于fix协议,业务数据字段不做限制,即交易机构也可上送双方约定自定义字段参数,完成业务数据上送。91.具体地,业务平台接收交易机构发送的fix报文包括如下步骤:92.s11、业务平台通过quickfix的消息分流器对各交易机构发送端的套接字进行异步非阻塞式监听;93.s12、业务平台接收到交易机构fix报文后,根据fix报文消息来源以及报文中携带的会话id查找对应机构的会话信息;94.s13、业务平台检查会话序号是否连续;95.s14、若连续,则进入下一步;若不连续,则返回错误报文,并要求交易机构重新发送。96.业务平台检查会话序号连续,则进入下一步的解析fix报文的步骤。97.s2、业务平台解析获取fix报文中的协议号和业务类型,抽象封装fix报文。98.业务平台提供第一自定义注解@fixmessagehandlecommon,注解定义name属性,其中name=bussinesstype;截取fix报文header信息,获取fix报文的协议号和业务类型,拆分字符串,完成key=value的分解。99.具体地,业务平台提供@fixmessagehandlecommon自定义注解,该注解定义name属性,用于定义各fix报文业务类型,如:挂单申请业务(name=2006)、议价申请业务(name=2007)等;业务平台接收上送的fix报文时,截取fix报文前35个字符,得到该fix报文的协议号和业务类型,并将字符串拆分,完成key=value的分解。100.业务平台提供第二自定义注解@fixfieldconfig,注解包含filed和fieldtype枚举类型两个属性,其中filed值为fix报文中的bussinesstype,fieldtype涵盖所有fix报文包含实体对应的业务数据。101.业务实现类接收报文转换实体objectfield由@fixfieldconfig自定义注解定义,该自定义注解包含filed和fieldtype枚举类型两个属性,其中,filed值为fix报文中业务类型定义,如2022、2023等;filedtype包含string、int、double、char、boolean等基础数据类型,涵盖了所有fix报文包含实体对应的业务数据。由此,业务平台基于porxcy反射原理,遍历业务类所定义的@fixfieldconfig属性,通过fix报文中的key=value值模式,将报文值对应到filed和filedtype属性中,实现fix报文向业务实体object进行转换,便于后续获取业务数据信息。102.s3、业务平台通过自定义注解方式,根据fix报文协议号和业务类型定位具体的业务实施单元,完成fix报文协议号和业务类型的适配。103.具体地,根据第一自定义注解@fixmessagehandlecommon中version和businesstype属性定位到从hashmap中获取的具体业务实现类对象。104.在本实施例中,业务平台完成fix报文转换统一实体后,根据自定义注解@fixmessagehandlecommon中version和businesstype属性定位到hashmap中获取value值信息,并由hashmap中的value,获取到业务实现类对象信息,通过类对象加载,获取到具体业务实现类对象,完成fix报文协议号和业务类型的适配。105.s4、业务平台业务实施单元完成业务逻辑处理。106.具体地,业务平台根据定位的业务实现类对象,通过动态反射原理,活动类对象class信息,调用对应业务逻辑方法,进行业务逻辑处理;业务平台业务实现类对象统一继承于abstractfixmessagehandlecommon抽象基类,该基类定义统一业务处理步骤,如:业务属性完整性检测、业务处理、业务异常处理、业务处理结果反馈等。107.在本实施例中,业务平台业务实现类对象使用模板模式和策略模式,统一继承abstractfixmessagehandlecommon父类,父类中定义了业务处理逻辑单元,业务平台完成业务实现类对象转换,调用父类run方法,开始执行业务逻辑处理。108.策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码转移到父类里面,从而避免重复的代码,策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为。如果不使用策略模式,那么使用算法或行为的环境类就可能会有一些子类,每一个子类提供一个不同的算法或行为。但是,这样一来算法或行为的使用者就和算法或行为本身混在一起。决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻辑混合在一起,从而不可能再独立演化。继承使得动态改变算法或行为变得不可能。109.模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。110.业务实施单元完成业务逻辑处理后,业务平台与交易机构发送端自身保存的会话编号+1。111.需要说明的是,在以上实施过程中,当有新的fix报文协议号更新,或有新的业务类型增加时,则同步更新业务实现类。112.本实施例采用的是一种基于自定义注解实现的方法,通过提取fix报文中的版本协议号以及业务类型编码,基于动态反射原理可以查找到当前已编写的各fix协议版本对应的业务实现类,可动态定位指定fix协议版本和业务类型完成业务逻辑处理。113.本实施例利用模板模式、策略模式及java的类对象反射原理将业务处理逻辑单元和fix多协议版本进行解耦,促使业务平台业务逻辑处理与fix报文解析实现独立,以此完成fix多协议兼容、多业务种类报文适配的功能;当有业务增加或协议变更维护时,业务平台只需要同步更新业务实现类,而不会对业务逻辑处理发生变动,从而降低了业务平台的部署运行成本,同时降低了业务运行故障发生率。114.实施例3115.如图4所示,根据本发明的另一方面,本实施例提供一种基于fix协议实现业务的系统,包括以下模块:116.接收模块:用于接收fix报文。117.在本实施例中,fix报文是由交易机构以字符串形式上送,字符串内容包含有fix协议号、业务类型和业务数据信息,业务数据信息如挂单订单号、挂单申请时间、挂单金额、卖方客户编号、卖方所属清算成员等。118.需要说明的是,在fix报文的扩展使用中,基于fix协议,业务数据字段不做限制,即交易机构也可上送双方约定自定义字段参数,完成业务数据上送。119.解析模块:用于解析获取fix报文中的协议号和业务类型,抽象封装fix报文。120.在本实施例中,业务平台接收到fix报文后,截取fix报文的header信息(前35字符),得到协议号和业务类型;基于自定义注解定义协议号和业务类型属性,可差异化解析fix报文,并将fix报文进行抽象封装转换为统一业务实体属性object,完成fix报文差异化内容的兼容格式化。121.定位模块:用于通过自定义注解方式,根据fix报文协议号和业务类型定位具体的业务实施单元。122.在本实施例中,业务平台根据fix报文协议号和业务类型编码经自定义注解工具类转换,找到对应业务实现类;根据业务实现类中的属性信息(协议号和业务类型)自动定位到具体业务实现类对象,完成fix报文协议号和业务类型的适配。123.调用执行模块:用于业务实施单元调用业务逻辑方法,完成业务逻辑处理。124.在本实施例中,业务平台根据定位到的具体业务实现类对象,通过动态反射原理,活动类对象信息,调用对应业务逻辑处理方法,完成业务逻辑处理。业务实现类对象统一继承于一抽象基类,该基类用于定义统一业务处理步骤,如:业务属性完整性检测、业务处理、业务异常处理、业务处理结果反馈等。125.业务实施单元完成业务逻辑处理后,业务平台与交易机构发送端自身保存的会话编号+1。126.需要说明的是,在以上实施过程中,当有新的fix报文协议号更新,或有新的业务类型增加时,本系统则同步更新业务实现类。127.以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属
技术领域:
:技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。当前第1页12当前第1页12