如果服务器(接受者)在上午 9 点创建了快速修复会话,但开始时间是上午 11 点。这意味着会话存在但未激活。
如果服务器从需要在此会话上发送的交换接收到未经请求的消息,如果我有配置 PersistMessages=Y 并在上午 11 点之后连接时将其发送给客户端(发起者),它是否会保留此消息?
如果服务器(接受者)在上午 9 点创建了快速修复会话,但开始时间是上午 11 点。这意味着会话存在但未激活。
如果服务器从需要在此会话上发送的交换接收到未经请求的消息,如果我有配置 PersistMessages=Y 并在上午 11 点之后连接时将其发送给客户端(发起者),它是否会保留此消息?
不,它不会保留在开始时间之前收到的消息,并且会向您发送拒绝消息。消息将在接口本身被拒绝,消息不被处理。您必须重新发送它才能获得回复。
QuickFIX 确实在会话连接之前保留(但不发送)消息。序列号被更新,当会话连接并发送第一条消息时,交易对手 FIX 引擎将看到序列号中的间隙并请求重新发送。QuickFIX 然后将重新发送持久消息。但是,根据您的 QuickFIX 配置,传出消息可能被认为太旧并在本地被拒绝。
据我了解,这些都是考虑到相应交易所接受订单的时间。应用程序或其子模块不需要维护时间并在关闭修复会话时采取一些措施。相反,QuickFix 将自动停用会话。当会话变为活动状态时,消息的持久性或重新发送对我来说看起来并不理想。
您可以在发送应用程序中维护某种队列来缓冲此类消息,并仅在时间与活动会话时间匹配时发送它们。
这是我的想法,希望对你有帮助。