QuickFix 维护多个接受器之间的序列号
QuickFix maintaining sequence number between multiple acceptors
我正在使用 Quickfix/n 库。我在 2 台机器和一个启动器上有接受器 运行。目前,当其中一个接受者出现故障时,我在维护发起者和接受者之间的序列号方面遇到了问题。
对于 ex- Initiator 正在发送和接收来自机器 1 上的 acceptor 的消息。机器 1 上的 acceptor 发送的最后一个 SeqNum 在它关闭时是 5。现在机器 2 上的接受器已连接,但发起者发送注销消息说 MsgSeqNum 太低,期望 SeqNum 6 但收到 1。
那么我如何确保机器 2 上的接受器将从 SeqNum 6 而不是 1 开始?
我认为唯一可行的方法是两个接受器都使用相同的消息存储源。
如果您使用的是 FileStore,则该文件必须位于共享驱动器上,并且两个接受器都指向它。
根据评论更新了答案:
我没想到你的接受者同时 运行。 (不过,我不知道那是如何工作的。当第一个接受者死亡时,发起者如何路由到第二个接受者?)
撇开带括号的问题不谈,自定义数据库存储可以工作。实现 IMessageStore 和 IMessageStoreFactory 接口非常容易。两个接受者可以指向同一个数据库;只要他们不是同时写入同一个 table 那么你应该是好的。
当然不一定是数据库。任何可以允许两个连接的持久位置都可以。只需实现一个 IMessageStore 即可使用它。
我正在使用 Quickfix/n 库。我在 2 台机器和一个启动器上有接受器 运行。目前,当其中一个接受者出现故障时,我在维护发起者和接受者之间的序列号方面遇到了问题。 对于 ex- Initiator 正在发送和接收来自机器 1 上的 acceptor 的消息。机器 1 上的 acceptor 发送的最后一个 SeqNum 在它关闭时是 5。现在机器 2 上的接受器已连接,但发起者发送注销消息说 MsgSeqNum 太低,期望 SeqNum 6 但收到 1。 那么我如何确保机器 2 上的接受器将从 SeqNum 6 而不是 1 开始?
我认为唯一可行的方法是两个接受器都使用相同的消息存储源。
如果您使用的是 FileStore,则该文件必须位于共享驱动器上,并且两个接受器都指向它。
根据评论更新了答案:
我没想到你的接受者同时 运行。 (不过,我不知道那是如何工作的。当第一个接受者死亡时,发起者如何路由到第二个接受者?)
撇开带括号的问题不谈,自定义数据库存储可以工作。实现 IMessageStore 和 IMessageStoreFactory 接口非常容易。两个接受者可以指向同一个数据库;只要他们不是同时写入同一个 table 那么你应该是好的。
当然不一定是数据库。任何可以允许两个连接的持久位置都可以。只需实现一个 IMessageStore 即可使用它。