接続IPが到達不能になるシナリオを想像してみてください。この場合、QuickFIX/JはパラメータReconnectInterval
で設定された30秒ごとに自動的に再接続を試みます。どのように私はそのような行動を避けるのですか?QuickFix/Jの接続に失敗した場合の自動再接続を避けるにはどうすればよいですか?
1
A
答えて
0
この考えは、QuickFix/JからパラメータReconnectInterval
を取得し、Session
がまだログオンしていない場合にのみSession
を殺す別のスレッドを作成することにあります。
この機能を有効にするには、QuickFix/Jスレッドが再接続を試みる前にスレッドを起動する必要があります。言い換えれば、ReconnectInterval=30
を設定した場合は、その前に前述のスレッドを起動し、すべてのイニシエータを閉じる必要があります。この方法では、QuickFix/Jは実際に再接続を再試行しません。
import java.io.InputStream
import java.util.Locale
import scala.util.control.NonFatal
import quickfix._
import quickfix.field._
class SimpleConnection(val configInputStream: InputStream,
val messageFactory: quickfix.MessageFactory)
extends MessageCracker
with quickfix.Application {
private val locale = Locale.getDefault.getCountry
private val settings = new SessionSettings(configInputStream)
private val storeFactory = new FileStoreFactory(settings)
private val loggerFactory = new QuickfixLoggerFactory(settings)
private var initiatorOption: Option[SocketInitiator] = None
private var sessionOption : Option[SessionID] = None
private var senderSeqOption: Option[Int] = None
private var targetSeqOption: Option[Int] = None
override def onLogout(sessionId: SessionID): Unit = {
log.info("onLogout called for %s".format(sessionId))
initiatorOption.foreach(initiator => initiator.stop(true))
fireDisconnectedState // inform listeners
initiatorOption = None
sessionOption = None
}
override def onCreate(sessionId: SessionID): Unit = {
log.info("onCreate called for %s".format(sessionId))
val session = Session.lookupSession(sessionId)
val interval = settings.getLong(session.getSessionID, "ReconnectInterval")
if(interval <= 10)
log.error("ReconnectInterval should be at least 10secs.")
else {
import java.util.concurrent.Executors
import scala.concurrent.ExecutionContext
val executor = ExecutionContext.fromExecutor(Executors.newSingleThreadExecutor)
val monitor = new Runnable {
override def run(): Unit = {
val sleep = (interval-5)*1000
Thread.sleep(sleep)
if(!session.isLoggedOn) {
log.warn("Killing QuickFix/J session before reconnection.")
onLogout(session.getSessionID)
}
}
}
executor.execute(monitor)
}
senderSeqOption.foreach(session.setNextSenderMsgSeqNum(_))
targetSeqOption.foreach(session.setNextTargetMsgSeqNum(_))
senderSeqOption = None
targetSeqOption = None
}
}
1
あなたのアプリケーションクラスはApplicationExtended
代わりのApplication
拡張する必要があります。その後、canLogonメソッドをオーバーライドすることができ、falseを返すと、Quickfixjはログインしようとしません。
関連する問題
- 1. どのように私のWindowsデスクトップのC#アプリケーションを再接続する場合は、接続が失われた場合にサーバーに再接続
- 2. NSURLConnection proxy.pacのダウンロードが失敗した場合の自動直接接続
- 3. ネットワーク再接続後にSQLサーバーの接続が失敗する
- 4. Flask-SQLAlchemyで失敗した場合、別のDBに動的に接続する
- 5. の接続は、再起動後に失敗した - Azureの
- 6. 接続が失われた場合は、Goの再接続でnet.Dialを作成するには?
- 7. cx_Oracle接続メソッドで失敗した場合にユーザーにパスワードを再試行するように促す
- 8. 自動再接続によるJDBC接続
- 9. /192.168.15.186(ポート80)への接続に失敗しました解決方法:失敗した接続:私はアンドロイドスタジオの接続をテストしようとしている
- 10. 接続に失敗しましたか?
- 11. 失敗した場合、SQL Server接続を再試行します。
- 12. C#インターネット接続が失われたときにMySQL接続が失敗する
- 13. SQL接続が失敗した場合のトラップエラーの詳細
- 14. 接続の中断後にOracle接続プールを自動再接続する方法はありますか。
- 15. c#接続されたホストが応答に失敗したためにgmail接続に失敗しました
- 16. XMPP strophe接続接続プロセスに失敗しました
- 17. 接続中に接続が失われた場合、クエリは正しいですか?
- 18. socket.ioが接続されている場合、Socket.ioが接続されている場合、Alamofireの要求は常に「要求のタイムアウト」で失敗します
- 19. Python - sqlalchemy - Oracle接続がSIDへの接続に失敗する
- 20. データベース接続に失敗しました:AD接続を作成できません:[DB接続](接続)
- 21. SpringでDataSource接続を自動的に再接続する方法は?
- 22. ダウンロード中にユーザーがアプリを再起動した場合、iOSアプリをバックグラウンドダウンロードに再接続するにはどうすればよいですか?
- 23. Jedisクライアントでredis接続の自動再接続を有効にする方法
- 24. Yiiでデータベース接続が失敗した場合、特定のページにリダイレクトするにはどうすればよいですか?
- 25. ジャスパーレポートmysqlに接続するとサーバー接続が失敗する
- 26. 接続が失われた場合、javascriptはサーバー側に再接続しません。
- 27. デバイスがルータに接続されている場合のインターネット接続の可用性を確認するにはどうすればよいですか?
- 28. Cronの接続が失敗した後にRsyncを再実行
- 29. BTrDB接続に失敗しました
- 30. Rmysql接続に失敗しました