QuickFIX/J 的消息传递合同是什么?我能保证订单交货吗?

What is the messaging contract of QuickFIX/J? Do I get guaranteed in order delivery?

我才刚刚开始 QuickFIX/J。我在阅读他们的文档时感到困惑的一件事是,FIX 协议的 QuickFIX 实现所确保的消息传递合同到底是什么?

特别是,我知道 FIX 有一个内置的基于序列号的机制,实现可以利用该机制来处理乱序、丢失或重复的消息。但是 QuickFIX/J 是否已经内置了该功能?作为使用 QuickFIX/J 与修复引擎通信的应用程序,我可以假设:

  1. 从 QuickFIX/J 传送到我的应用程序的消息总是有序的。

  2. 没有遗漏的消息(QuickFIX/J会自动处理 重新请求)

  3. 没有重复的消息(QuickFIX/J可以 查看目前收到的序列号并过滤掉可能的 重复)

  4. 如果远程修复引擎崩溃,我会在引擎恢复时自动使用最后已知的序列号重新连接

  5. 如果我的应用程序崩溃,当它重新启动时它是否能够自动从之前已知的序列号恢复会话? (例如,是否有开箱即用的序列号持久化机制?)

QuickFIX/J 实现了 FIX 会话协议,因此它会为您处理所有 session-level 内容(连接、序列号……)。

  1. 是的,但可能有重复,见3。
  2. 是的。
  3. 不,实际上 QFJ 仍会将可能的重复项转发到您的应用程序,因为您可能仍想处理这些内容。需要自己筛选,根据43/PossDupFlag.
  4. 是的。
  5. 是的。 QFJ 有一些开箱即用的持久性机制,如 FileStoreJdbcStoreMemoryStore。如果需要,您也可以实现自己的 Store

这里是关于如何创建 QFJ 应用程序的 link,以防您还没有找到它:https://github.com/quickfix-j/quickfixj#creating-a-quickfixj-application