可作为FIX消息唯一标识的标签有哪些?是否存在通用FIX标签?
FIX消息唯一匹配通用标签说明
不存在单个适用于所有场景的通用唯一标识标签,但标准FIX协议定义了跨所有版本(FIX 4.0至FIX 5.0 SP2)通用的组合标签规则,可100%匹配收发两端的同一条消息:
- 首选高可靠匹配组合:
SenderCompID(标签49) +MsgSeqNum(标签34) +SendingTime(标签52)SenderCompID为消息发送方的唯一身份标识,全局唯一MsgSeqNum为同一会话周期内发送方按发送顺序生成的递增序列号,单会话内唯一SendingTime为消息离开发送方的精确时间戳,默认精度到毫秒,部分场景支持微秒级,三者组合完全不会出现重复,即便会话重启重置序列号,也可通过SendingTime区分不同周期的同序列号消息
- 常规测试场景下,若能确认测试周期内不会触发会话重置序列号,可简化为
SenderCompID+MsgSeqNum两组标签匹配,覆盖99%以上的使用需求
QuickFIX/J 字段获取方法
以上标签均属于FIX消息的会话层头字段,无需解析消息体,直接从Header对象读取即可,示例代码如下:
import quickfix.field.MsgSeqNum; import quickfix.field.SenderCompID; import quickfix.field.SendingTime; // 读取SenderCompID 标签49 String senderCompId = message.getHeader().getString(SenderCompID.FIELD); // 读取MsgSeqNum 标签34 int msgSeqNum = message.getHeader().getInt(MsgSeqNum.FIELD); // 读取SendingTime 标签52 Date sendingTime = message.getHeader().getUtcTimeStamp(SendingTime.FIELD);
注意事项
- 不要使用消息体的业务字段做通用匹配,不同业务类型的消息字段差异极大,不具备通用性
- 不要依赖
toString()方法的返回值做匹配,QuickFIX/J的toString()输出会受本地数据字典配置影响,收发两端数据字典规则不同时输出内容会存在差异,和消息本身的实际传输内容无关
内容的提问来源于stack exchange,提问作者G. Tabs
相关产品推荐
相关产品推荐

