是否可以在QuickFIX / J中断开Acceptor会话?我已经尝试过该方法disconnect(String reason, boolean logError)
。但是,一旦对方尝试重新连接,则会话将重新连接。
我要保持联络。
根据该disconnect()
方法的javadoc注释,您不应该从用户代码中调用它:
* This method should not be called from user-code since it is likely
* to deadlock when called from a different thread than the Session thread
* and messages are sent/received concurrently.
* Instead the logout() method should be used where possible.
因此,请使用该logout()
方法从会话中注销。它还将禁用会话,以使对方在连接时注销。但是登录的时间可能很短。这是因为该标志仅每秒检查一次。
要立即拒绝登录,可以RejectLogon
在fromAdmin()
回调中抛出异常。
我期望有一种机制可以手动注销并保持注销状态(换句话说,保持断开状态),直到手动允许登录为止。但是,当我尝试logout()方法时,如果对方尝试登录,则系统允许它。如我所提到的,我尝试设置RejectReason以便手动抛出RejectLogon,但是在收到登录请求时此消息不可用。因此,我无法保持会话注销。
扔
RejectLogon
你需要真正扔RejectLogon
出来fromAdmin()
,我提到。从中抛出它是行不通的logout()
。因此,请先致电logout()
,然后在支票存入您时将支票扔进fromAdmin()
去。那将拒绝传入。RejectLogon
Logon
Logons
在我抛出
RejectLogon
from 之前fromAdmin
,我想确保此注销是手动执行的。因此,我想验证LogoutReason
相应会话的state
。但是,在到达方法之前,它已被取消fromAdmin()
。有解决这种情况的想法吗?您的意思是仅
RejectLogon
在以前决定手动注销时才想抛出?您不能在应用程序中的某个位置存储布尔标志吗?然后只需检查该布尔标志是否已设置为true
?还是我误会了你?我们可以寻求布尔标志建议@ChristophJohn。非常感谢您的建议。