如何启动/停止特定的会话连接

问题描述

我的QuickFIX启动器可以管理5个会话(目标)。我可以使用ReconnectInterval来控制重试频率。

假设一个会话连接给我一个问题,但我不想停止其他四个连接。我也不希望有问题的会话继续尝试连接。

是否有任何方法可以停止并稍后重新启动此特定会话连接?

解决方法

Quickfix没有提供禁用会话的直观方法。

var signatureAlgorithm = GetEllipticCurveAlgorithm(privateKey);

            ECDsaSecurityKey eCDsaSecurityKey = new ECDsaSecurityKey(signatureAlgorithm)
            {
                KeyId = settings.Apple.KeyId
            };

            var handler = new JwtSecurityTokenHandler();   
            var token = handler.CreateJwtSecurityToken(
                issuer: iss,audience: AUD,subject: new ClaimsIdentity(new List<Claim> { new Claim("sub",sub) }),expires: DateTime.UtcNow.AddMinutes(5),issuedAt: DateTime.UtcNow,notBefore: DateTime.UtcNow,signingCredentials: new SigningCredentials(eCDsaSecurityKey,SecurityAlgorithms.EcdsaSha256));

上面的代码是不断尝试保持所有会话连接的循环。查找代码,有两种方法可以避免会话连接:1.禁用会话; 2.限制会话时间范围(会话初始化后无法执行此操作,因此这不是有效的选择)。

方法void Initiator::connect() { Locker l(m_mutex); SessionIDs disconnected = m_disconnected; SessionIDs::iterator i = disconnected.begin(); for ( ; i != disconnected.end(); ++i ) { Session* pSession = Session::lookupSession( *i ); if ( pSession->isEnabled() && pSession->isSessionTime(UtcTimeStamp()) ) doConnect( *i,m_settings.get( *i )); } } 基本上返回pSession->isEnabled,但是一旦m_state为私有,就无法访​​问SessionState对象的属性。将m_enabled设置为false并避免尝试连接的唯一方法是调用Session.m_state.m_enabled

Session.logout()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...