在 FIX 协议中使用 TargetSubID 作为测试数据的标志是否正确?

Is it correct to use TargetSubID as a flag for test data in FIX protocol?

我们目前正在开发 FIX 连接,从而可以标记只应验证的数据。已决定用特定的 TargetSubID 标记此数据。但这意味着一个新的 session。

假设我们将消息发送到 session FIX.4.4:S->T。如果我们随后收到一条消息,该消息仅应使用 TargetSubID V 进行验证,这意味着 session FIX.4.4:S->T/V。如果这个 Session 没有配置,我们会得到错误

Unknown session: FIX.4.4:S->T/V

如果我们明确配置这个 session 与另一个相邻,就会出现错误

quickfix.Session – [FIX/Session] Disconnecting: Encountered END_OF_STREAM

bhageera says 一样,您使用相同的凭据登录。

(...) the counterparty I was connecting to allows only 1 connection per user/password (i.e. session with those credentials) at a time.

我不是 FIX 专家,但我想知道 TargetSubID 是否在这里被滥用了。如果没有,我想知道该怎么做。我们用 camel-quickfix.

开发 FIX 客户端

这取决于交易对手 - 有时 Sender/TargetSubID 被认为是唯一连接的一部分,有时他们在一个连接上区分消息。

您的图书馆是否有从连接查找中排除子 ID 的配置选项?例如在 QuickFix 中,您可以设置 SessionQualifier.

这在很大程度上取决于你的系统是什么样的以及你最终想要实现什么。

通常要评估的维度是:

  • 最大限度地提高灵活性
  • 最小化支持测试所需的额外逻辑量
  • 最大限度地降低从测试环境意外连接到生产环境时发生坏事的风险(可能发生,不管你怎么想)。

就我自己而言,我不会使用可能涉及 sesson/routing 行为的标签进行测试,除非我只需要路由功能并且我的系统可靠地按照我期望的方式运行(可能不是你的情况)。

相反,我会考虑以下之一:

  • 从用户定义的范围 (5000-9999) 中选择内容
  • 使用以某种可逆方式损坏的符号系统标签之一(例如 Symbol(55))(例如标签 55 中的 "TEST_VOD.L" 而不是 "VOD.L")

来自自定义范围的标签会提供很大的灵活性,损坏的符号系统标签会确保测试订单在意外发送到生产时会被退回。

对于任一解决方案,您都可能需要基于标记的路由和转换层。如果您使用的是基于 Java 的东西(我会期待 javax.scripting / Nashorn),那么两者都可以在几个小时内以通用形式完成。