0

我正在使用 Quickfix/n 库。我有在 2 台机器和一个启动器上运行的接受器。目前,当其中一个接受者出现故障时,我遇到了维护发起者和接受者之间的序列号的问题。对于 ex-Initiator 正在发送和接收来自机器 1 上的接受者的消息。机器 1 上的接受者发送的最后一个 SeqNum 是 5 当它关闭时。现在机器 2 上的接收器已连接,但启动器正在发送注销消息,说 MsgSeqNum 太低,期望 SeqNum 6 但接收到 1。那么我如何确保机器 2 上的接收器将从 SeqNum 6 而不是 1 开始?

4

1 回答 1

0

我认为唯一可行的方法是,如果两个 Acceptor 都使用相同的消息存储源。

如果您使用的是 FileStore,那么该文件必须位于共享驱动器上,并且两个 Acceptor 都指向它。

根据评论更新答案:

我没有意识到你的接受者正在同时运行。(不过,我不知道这将如何工作。当第一个接受者死亡时,发起者如何被路由到第二个接受者?)

除了带括号的问题,自定义数据库存储也可以工作。实现 IMessageStore 和 IMessageStoreFactory 接口非常容易。两个接受者都可以指向同一个数据库;只要他们不是同时写到同一张桌子上,那么你应该很好。

当然,不必是数据库。任何可以允许两个连接的持久位置都可以。只需实现一个 IMessageStore 即可使用它。

于 2020-06-27T02:33:55.873 回答