如何在QuickFIX服务器登录回复中添加58标签并指定起始序列
QuickFIX服务器序列相关问题解决方案
1. 在登录回复中添加标签58(Text字段)
登录回复是服务器对客户端Logon请求的响应,你需要在构造Logon回复消息时手动添加Text字段(标签58),值设为sequence expected 100。以下是主流语言的实现示例:
C++ 示例
void Application::fromApp(const FIX::Message& message, const FIX::SessionID& sessionID) throw(FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType) { FIX::MsgType msgType; message.getHeader().getField(msgType); // 拦截客户端的Logon请求 if (msgType == FIX::MsgType_Logon) { // 构造Logon回复消息 FIX::Message logonReply; logonReply.getHeader().setField(FIX::MsgType("A")); // 指定消息类型为Logon logonReply.setField(FIX::Text("sequence expected 100")); // 添加标签58 // 补充必要的登录字段 logonReply.setField(FIX::EncryptMethod(0)); logonReply.setField(FIX::HeartBtInt(30)); // 发送回复到目标会话 FIX::Session::sendToTarget(logonReply, sessionID); } }
Java(QuickFIX/J)示例
@Override public void fromApp(Message message, SessionID sessionID) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType { MsgType msgType = new MsgType(); message.getHeader().getField(msgType); if (MsgType.LOGON.equals(msgType.getValue())) { Logon logonReply = new Logon(); logonReply.setText("sequence expected 100"); // 设置标签58内容 logonReply.setEncryptMethod(EncryptMethod.NONE); logonReply.setHeartBtInt(30); Session.sendToTarget(logonReply, sessionID); } }
2. 设置服务器下一个预期序列号为100
服务器的预期序列号存储在会话状态中,你可以通过会话对象直接修改NextExpectedMsgSeqNum(即服务器期望客户端发送的下一个消息序列号),确保在处理客户端消息前生效即可。
C++ 示例
// 在onLogon回调或会话初始化时执行 void Application::onLogon(const FIX::SessionID& sessionID) { FIX::Session* session = FIX::Session::lookupSession(sessionID); if (session != nullptr) { // 将服务器预期的下一个客户端消息序列号设为100 session->setNextExpectedMsgSeqNum(100); // 若需要同步设置服务器自身的发送序列号,可添加以下代码 // session->setNextSenderMsgSeqNum(100); } }
Java(QuickFIX/J)示例
@Override public void onLogon(SessionID sessionID) { Session session = Session.lookupSession(sessionID); if (session != null) { session.setNextExpectedMsgSeqNum(100); // 可选:同步设置服务器发送序列号 // session.setNextSenderMsgSeqNum(100); } }
如果需要固定初始序列号,也可以在QuickFIX配置文件中配置,但代码动态设置更灵活,适合按需指定的场景。
内容的提问来源于stack exchange,提问作者DuduArbel
相关产品推荐
相关产品推荐

