You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Golang中使用quickfixgo将字符串解析为QuickFIX消息?

在Golang中使用quickfixgo解析字符串为FIX消息的方法

针对你的场景(从Kafka读取FIX字符串消息后转发至FIX服务器),以下是quickfixgo中常用的解析方案:

1. 带数据字典校验的解析(适合需要字段校验/修改的场景)

如果需要确保消息符合对应FIX版本的规范,或者要修改消息字段,需要先加载对应版本的FIX数据字典(XML格式),再进行解析:

步骤1:加载数据字典

import (
    "github.com/quickfixgo/quickfix"
    "github.com/quickfixgo/quickfix/datadictionary"
)

// 加载对应版本的FIX数据字典(例如FIX.4.4)
dd, err := datadictionary.Parse("FIX.4.4.xml")
if err != nil {
    // 处理字典加载错误(如文件不存在、格式错误)
    panic(err)
}

步骤2:解析FIX字符串

注意Kafka中存储的字符串可能用其他字符(如|)替代了FIX标准的SOH分隔符(ASCII 0x01),解析前需要先转换回SOH:

import "strings"

// 从Kafka获取的FIX字符串示例(此处用|代替SOH)
rawFixStr := "8=FIX.4.4|9=156|35=D|49=Sender|56=Target|11=TestOrdID|21=1|40=1|55=AAPL|54=1|38=100|44=150.0|59=0|10=123|"

// 将替代符转换为标准SOH分隔符
fixStr := strings.ReplaceAll(rawFixStr, "|", string(quickfix.SOH))

// 解析字符串为quickfix.Message对象
msg, err := quickfix.ParseMessage(fixStr, dd)
if err != nil {
    // 处理解析错误(如格式非法、字段缺失、校验不通过)
    panic(err)
}

// 示例:读取消息中的字段
var clOrdID quickfix.StringField
if err := msg.Body.Get(&clOrdID); err == nil {
    println("订单ID:", clOrdID.Value())
}

2. 无校验的轻量解析(仅用于转发场景)

如果只是需要转发消息,不需要校验字段或修改内容,可以跳过数据字典,直接解析(仅做基本的字段拆分,不做规范校验):

import (
    "github.com/quickfixgo/quickfix"
    "strings"
)

rawFixStr := "8=FIX.4.4|9=156|35=D|49=Sender|56=Target|11=TestOrdID|21=1|40=1|55=AAPL|54=1|38=100|44=150.0|59=0|10=123|"
fixStr := strings.ReplaceAll(rawFixStr, "|", string(quickfix.SOH))

// 传入nil跳过数据字典校验
msg, err := quickfix.ParseMessage(fixStr, nil)
if err != nil {
    // 处理基本的解析错误(如消息结构不完整)
    panic(err)
}

3. 转发解析后的消息

解析完成后,可通过quickfix的会话将消息发送至目标FIX服务器:

// 假设已通过quickfix建立会话,sessionID为目标会话的标识
sessionID := quickfix.SessionID{BeginString: "FIX.4.4", SenderCompID: "YourSender", TargetCompID: "TargetServer"}
if err := quickfix.SendToTarget(msg, sessionID); err != nil {
    // 处理发送错误(如会话断开、发送超时)
    panic(err)
}

部署注意事项(Kubernetes环境)

  • 将FIX数据字典文件打包进容器镜像,或通过ConfigMap挂载到容器的指定路径,确保代码能正确读取到字典文件
  • 配置Kafka客户端的连接参数(如bootstrap servers),确保Pod能访问Kafka集群
  • 确保FIX会话的配置(如心跳间隔、重连策略)符合目标服务器的要求,避免会话断开

内容的提问来源于stack exchange,提问作者user8217890

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:31:02