gpt4 book ai didi

java - QuickFIX/J 中断开连接的客户端的消息队列行为

转载 作者:行者123 更新时间:2023-12-01 10:35:37 43 4
gpt4 key购买 nike

我想澄清 QuickFIX/J (FIX 4.2) 在以下场景下的行为。此 QuickFIX/J 通信涉及两方:

  1. 客户端发起者,称为I
  2. 我们公司的接受者计划,称为A

I登录到A时,它们会与标签35=A交换FIX消息。连接建立后,开始提交订单。然而,可能会在某一时刻,I 意外断开连接,此时 A 决定为 I 的所有未平仓订单发送取消订单(这是有效的,因为A不知道为什么失败了,也不知道什么时候能活着回来。

请注意,整个取消连接过程是由 A 单独启动和处理的 - 它是从 AonLogout(... ) 方法并由其正常的订单管理机制处理。为 I 的每个未结订单生成一条 35=F 消息,并生成一个 ExecutionReport (35=8) code>) 在每次成功取消时生成。

I活着回来时,这些ExecutionReport必须以某种方式传递给I,以便它知道之前的所有订单都已被执行。取消。我的印象是 QuickFIX/J 的消息队列实现无需应用程序级帮助即可处理此问题。确保所有 QuickFIX 消息都能传送给交易对手 ( http://permalink.gmane.org/gmane.comp.finance.quickfix.devel/169 )。

然而,与我的理解相反,AQuickFIX 日志中没有显示 ExecutionReport,也没有将 ExecutionReport 传送到 II重新连接时,导致I不知道其之前的订单已被取消。我注意到由于 QuickFIX/JSessionsendRaw(Message message, int num) 方法的以下源代码而没有发生日志记录>:

/**
* Send the message
*
* @param message is the message to send
* @param num is the seq num of the message to send, if 0, the next expected sender seqnum is used.
* @return
*/
private boolean sendRaw(Message message, int num) {
...
} else {
try {
application.toApp(message, sessionID);
} catch (final DoNotSend e) {
return false;
} catch (final Throwable t) {
logApplicationException("toApp()", t);
}
messageString = message.toString();
if (isLoggedOn()) { // happens only if session is connected
result = send(messageString); // logging happens within "send"
}
}
...
}

在为 I 断开连接发起的取消生成 ExecutionReport 消息时, session 未登录,因此它从未命中 send(messageString ); 并且没有发生日志记录。我相信出于同样的原因,没有消息被排队(基于在活着回来时没有收到任何消息的事实)。

我们公司基于 QuickFIX/J 保证所有消息无损传递的信念进行了许多实现,但我对上述场景的观察却表明事实并非如此。

当 session 未登录时,QuickFIX/J 的消息队列在这种情况下预期如何表现?不管怎样,它是否应该对消息进行排队,等待 session 将来再次可用时发送,或者在 session 关闭期间停止排队?

最佳答案

private boolean sendRaw(Message message, int num)方法的末尾有这样的代码:

if (num == 0) {
final int msgSeqNum = header.getInt(MsgSeqNum.FIELD);
if (persistMessages) {
state.set(msgSeqNum, messageString);
}
state.incrNextSenderMsgSeqNum();
}

state.set(msgSeqNum, messageString) 将调用 messageStore.set(sequence, message),如果 session 未连接,它实际上存储消息以供以后传递.

据我所知,所有消息都会排队,直到 session 成功登录。

关于java - QuickFIX/J 中断开连接的客户端的消息队列行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34758046/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com