QuickFix/J 源代码研究(三)

QuickFix/J 源代码研究(三)
guibin.beijing@gmail.com

(三). 客户化FIX解析
基础知识:以下文章内容描述的前提是已经根据自己的业务规则,生成了符合要求的数据字典,并且使用QuickFix/J自带的 ant 的 jar target生成了客户化的协议解析代码。生成协议解析代码的流程和细节,请参考文章QuickFix/J 源代码研究(二)。

1. 在QuickFix/J的设计中,为了解除message factory和相应的协议的解析代码的耦合关系,quickfix.DefaultMessageFactory会在runtime时使用reflection动态发现解析协议的代码。因此,如果你有自定义的数据字典,并且已经根据该字典生成了解析该协议的代码,请别忘记在DefaultMessageFactory中加入相应协议的消息工厂[b]discoverFactory[/b](beginString, factoryClassName)。

2. DefaultMessageFactory有两个主要功能,一个是创建Message(根据beginString和msgType),另一个是创建Group(根据beginString、msgType和correspondingFieldID)。相应的,根据数据字典生成的解析协议的代码中,当然有MessageFactory了,而且这个MessageFactory当然会创建Message和Group。

3. DefaultMessageFactory创建Message时,首先根据beginString查找相应版本的消息工厂,找到了则create相应的Message,否则new一个默认的quickfix.Message。

4. MessageCracker的用法。当自动生成解析协议的代码之后,肯定会生成对应版本的MessageCracker。仔细阅读这个新生成的MessageCracker,你会发现其中有很多的onMessage方法内部没有实现,并且加入了默认的throw new UnsupportedMessageType();语句。在实际使用中,用户需要创建自己的Application,并且extends quickfix.MessageCracker implements quickfix.Application。由于Override,这些throw new UnsupportedMessageType自然会被屏蔽。
如果用户需要取到Message中的内容,做相应的业务逻辑,首先在用户的Application.fromApp中crack(message, sessionId),crack类似message cracker的工厂,它根据message header选择相应的message cracker,然后回调相应的onMessage。onMessage正好在用户Application中Override实现。

5. [color=red]客户化协议的客户端Initiator实现总结[/color]
a) 创建处理类,extends MessageCracker implements quickfix.Application implements quickfix.ApplicationExtended
b) 在fromApp中添加crack(message, sessionId);
c) 对需要处理的消息实现相应的onMessage
d) 创建SocketInitiator实例,填入客户化的application,messageStoreFactory,settings,logFactory,messageFactory。
e) start initiator。

6. 如果想把收到的每个消息单独存成一个文件备份,比如dbf之类的,该如何实现?
a) 方案1. 实现自己的MessageStore。QuickFix/J中提供了现成的FileStore,可以将所有的消息存入同一个文件中。
b) 方案2. 在Application的fromApp接口中,获取相应的Message,提取所需要素,存盘。
两个方案的比较:方案2减少了一次从String到Message的解析,效率应该更高。因为MessageStore的输入是StringMessage,需要再次解析才能得到Message。

7. FIX标准协议中规定了消息(Message)应该都至少有一个字段(Field),如果在客户化自己的FIX协议解析时,发现某些Message没有字段,则需要解除QuickFix/J中对这个条件的限制,具体在quickfix.Dictionary。

private void load(Document document, String msgtype, Node node) throws ConfigError {
...
// if (fieldNodes.getLength() == 0) {
// throw new ConfigError("No fields found: msgType=" + msgtype);
// }
...
}


8. 在QuickFix/J的实现中,关于不同版本的协议都有这样一个假设,就是如果Fix版本号小于等于"FIX.4.4"则是一种逻辑,大于FIX4.4是一种逻辑。那么就需要注意在客户化时你定义的协议版本(即FIX的beginString)是多少,是不是从字符串比较的角度看小于等于"FIX.4.4"。如果不是,则需要在诸多的地方更改QuickFix/J的逻辑。比如在quickfix.DataDictionary.load中:

private void load(InputStream inputStream) throws ConfigError {
...
if (beginString.startsWith(FIXT_PREFIX) || beginString.compareTo(FixVersions.FIX50) < 0) {
...
...
}


9. QuickFix/J在实现中,默认消息(Message)头(Header)中使用的时间都是UtcTimeStamp,如果在客户化中不使用UTC时间,而使用本地时间的化,
a) 添加本地时间的数据类型,比如LocalTimeStampField,可以仿照quickfix.UtcTimeStampField。其他还需要添加跟本地时间相关的LocalDateOnlyField,LocalTimeOnlyField,LocalTimeStampConverter,LocalDateOnlyConverter,LocalTimeOnlyConverter
b) 在使用TimeStamp的地方,添加版本判断,根据版本看是使用本地时间还是UTC时间。需要修改地方大概有:Session.doTargetTooHigh,Session.generateSequenceReset,Session.initializeResendFields,Session.validatePossDup,Session.verify。

10. QuickFix/J在实现中,心跳设置(HeartBtInt)由客户端(Initiator)决定,而STEP协议则规定心跳由服务器端(Acceptor),这需要修改DefaultSessionFactory.create(sessionID, settings)中关于角色和HeartBtInt的设置。并且还需要修改Session.nextLogon(message)中登陆之后读取HeartBtInt并设置到state中的逻辑。

Guibin
2010-12-30
QuickFIX 源代码 QuickFIX 源代码 支持跟版本FIX协议 立即下载

相关推荐

sslQuickfix:有关基于Quickfix的项目的SSL配置的概念证明

sslQuickfix 有关基于的项目的SSL配置的概念证明。 该库由,其可以在他们身边找到。 有几种方法可以签出: 由于存在一些原始配置文件,即接收器端口,因此实现了简单的XML配置。 尝试防止您的代码使用现代C ++功能; 典型的基于quickfix业务的二进制文件适用于经典Linux服务器。 安装quickfix库 仔细检查您的版本是否最新,足以在内部支持SSL并将其。 最简单的检查Quickfix库 受启发,一个应该测试我们以前的quickfix安装。 从根本上扩展了原始示例SSL证书上的vanilla示例。 检查证书 重用先前的代码,此子任务旨在并与它们运行简单的连接。 考虑到本小节非常取决于您的具体操作系统。 检测到有关设置对象的一些奇怪问题; 看起来只有“默认”认证配置使其符合SSL实用程序类。 两种角色:同一二进制文件中的接受者和发起者

QuickFix/J:Session状态

resetReceived:发送logon前,会检查tag:resetSeqNumFlag的值,或当resetSent=Y且序号为1时,会置为ture;发起nextLogon或disconnect时,会置为false;发起nextLogon或disconnect时,会置为false;当nextLogon或disconnect时,置为false;当nextLogon或disconnect时,置为false;logonReceived:发起nextLogon时,会置为true;

700

C# quickfix 例子以及源代码

C# quickfix 例子以及源代码

交易系统开发(十二)——QuickFIX官方文档

一、QuickFIX编译构建 1、Windows 使用VS Studio打开quickfix_vs12.sln、quickfix_vs14.sln、quickfix_vs15.sln。 链接库:链接lib\quickfix.lib和lib\debug\quickfix.lib到应用。 头文件:拷贝头文件到include目录。 编译控制:src目录的config_windows.h文件用于控制编译时选项。 #define HAVE_STLPORT 1 使用stlport替换Visual C++

天山老妖 5674

Win10离线安装.net framework 3.5全攻略:镜像匹配与DISM命令实战(附错误0x8024402c解决方案)

本文详细解析了在Windows 10系统中离线安装.NET Framework 3.5的完整流程与核心难点。重点阐述了如何精准匹配系统版本与安装镜像,并提供了使用DISM命令进行离线安装的实战步骤。针对常见的错误代码0x8024402c,文章深入剖析了其根源,并给出了系统级的排查与解决方案,特别适合企业内网运维人员参考。

weixin_29299807的博客 660

Cherry Studio部署MCP服务报错全记录:从零解决‘Connection closed‘问题

本文详细记录了在Cherry Studio中部署MCP服务时遇到‘Connection closed’报错的完整排查与解决过程。文章从环境依赖(UV、Bun)的安装验证、绝对路径配置、网络镜像源设置,到服务端手动调试与Cherry Studio配置检查,提供了一套系统性的解决方案,帮助开发者彻底解决此类连接问题。

g9h0i1的博客 761

交易系统开发(十三)——QuickFIX源码分析

一、QuickFIX源码目录 QuickFIX主要目录如下: doc:QuickFIX说明和简要HTML文件。 example:QuickFIX示例程序。 spec:存放FIX数据字典。 UnitTest++:单元测试框架。 test:测试脚本。 src:源代码目录。 src/C++:C++实现代码。 src/python:Python实现。 src/python2:Python2实现。 src/python3:Python3实现。 src/ruby:Ruby实现。 二、C++实现

天山老妖 2395

研一脑电小白日记 之 EEGLAB预处理实战指南

本文为脑电研究新手提供了一份详尽的EEGLAB预处理实战指南。从MATLAB与EEGLAB环境搭建、使用NeuracleEEGFileReader插件导入BDF格式数据开始,逐步讲解了电极定位、滤波、降采样、ICA去伪迹等核心步骤,旨在帮助初学者高效完成脑电数据预处理,为后续分析奠定坚实基础。

weixin_29230649的博客 556

FIX三天日记-quick fix简介

quickfix的使用和基本实现

少说,多做。 4万+

无刷电机控制基础(2)——有感和无感驱动、调速

上一篇文章我们讲了一些无刷电机的基础知识,包括无刷电机的内部结构,驱动原理等,我们知道了只需要按照转子的当前位置,来按顺序给定子线圈通电,就能让电机转动起来。但是,上一篇中我们跳过了一个关键步骤,就是如何检测转子的位置。本篇我们就讲讲常用的位置检测方法,以及引出的一些相关问题。我们知道,获取磁铁的位置可以用霍尔传感器,无刷电机的转子就是永磁体,因此只要在合适的位置安装霍尔传感器,就能知道转子的旋转位置。在无刷电机中,一般用3个开关型霍尔器件就能检测转子的位置。

小白白学电子 2万+

YOLOv11低照度目标检测优化方案:基于SCINet可训练预处理主干的全流程实现指南

创建一个新的Python文件,如。

FJN110的博客 188

QuickFix/J 源代码研究

http://guibin.iteye.com/blog/853393 QuickFix/J 源代码研究(一) guibin.beijing@gmail.com (〇)QuickFix/J简介 FIX是Financial Information eXchange的简称。FIX是一种专门为实时电子证券交易设计的标准消息协议。FIX协议由FIX protocol, Ltd(FPL)所有并维

l799623787的专栏 6043

手把手教你学simulink(41.4)--逆变器电场景示例:基于Simulink的主从控制的多逆变器协同控制(Multi-Inverter Coordinated Control)

需求分析在现代电力系统中,分布式发电和储能系统的广泛应用使得多个逆变器并联运行成为常见的应用场景。为了确保多个逆变器之间的协同工作,实现系统的稳定性和高效性,通常采用主从控制(Master-Slave Control)策略。主从控制通过一个主控制器(Master)来协调多个从控制器(Slave),确保所有逆变器的输出电压、频率和功率分配符合预期目标。本项目将基于Simulink平台,开发一个多逆变器协同控制系统,采用主从控制策略,实现对多个逆变器的精确控制和优化。

MHD0815的博客 305

QuickFix/J 源代码

三). 客户化FIX解析 基础知识:以下文章内容描述的前提是已经根据自己的业务规则,生成了符合要求的数据字典,并且使用QuickFix/J自带的 ant 的 jar target生成了客户化的协议解析代码。生成协议解析代码的流程和细节,请参考文章QuickFix/J 源代码研究(二)。 1. 在QuickFix/J的设计中,为了解除message factory和相应的协议...

aikenqiu5098的博客 328

IPD流程中的RR\OR\IR\PB\SR\AR\CR等名词汇总(基于新的产品包需求架构)

RR:Raw Requirement,原始需求=》IR:Initial Requirement,初始需求=》SR:System Requirement,系统需求=》AR:Allocated Requirement,分配需求=》CR:Process Change Requirement,流程变更需求。

a1809032425的博客 3188

工业相机的检测原理课件(建议收藏)

本课件为各位工程师详细介绍了工业相机的视觉检测原理 ,旨在为工程师调试工业相机的视觉检测原理时提供理论性指导。

Bamboo265925的博客 498

QuickFix/J 源代码研究(一)

QuickFix/J

程序员的冷浪漫 3960

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

QuickFix/J 源代码研究一

(〇)QuickFix/J简介FIX是Financial Information eXchange的简称。FIX是一种专门为实时电子证券交易设计的标准消息协议。FIX协议由FIX protocol, Ltd(FPL)所有并维护。FIX协议的网址为http://

Michelle 5551

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

QuickFix/J 源代码研究(四)

QuickFix/J 源代码研究(四) liyayawodeai@163.com (四). QuickFix/J总体逻辑架构 1. QuickFix/J是以Initiator为核心,如下图所示 上图中各个模块的关系: 处于核心位置的是Initiator,具体如图上表示的一系列继承关系构成,正是Initiator将QuickFix/J的大多数的核心功能组合在一起,成为一个整体。而各个

li_yaya的专栏 1385

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

QuickFIX 源码分析

FIX是Financial Information eXchange的简称。FIX是一种专门为实时电子证券交易设计的标准消息协议。FIX协议由FIX protocol, Ltd(FPL)所有并维护。FIX协议的网址为http://www.fixprotocol.org QuickFix/J是实现了FIX协议所有版本及其功能的开源软件,100%使用JAVA实现。 QuickFix/J的网址为http...

weixin_42702873的博客 1623

The QuickFIX/J Demo

Source List:   SRC │ log4j.properties │ ├─conf │ └─demo │ acceptor.conf │ initiator.conf │ └─myfix ├─common │ AccountConstant.java │ ...

tacyuuhon 1034

QuickFix/J

(〇)QuickFix/J简介FIX是Financial Information eXchange的简称。FIX是一种专门为实时电子证券交易设计的标准消息协议。FIX协议由FIX protocol, Ltd(FPL)所有并维护。FIX协议的网址为http://www.fixprotocol.orgQuickFix/J是实现了FIX协议所有版本及其功能的开源软件,100%使用JAVA实现。Quick...

weixin_33863087的博客 260
上一篇: QuickFix/J 源代码研究(一)
下一篇: STEP协议解读
Guibin
博客等级 码龄23年 45粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值