IO を処理する別のディスラプターにパブリッシュするビジネス ロジックにディスラプターを使用しています。IO ディスラプターにパブリッシュされたイベントは、IO を構築して検証するにはあまりにも早く到着する可能性があります。まあ、それは一種のポイントです...
IO ディスラプターは次のようにセットアップされます。
disruptor = new Disruptor<>(factory, RING_SIZE, executor, ProducerType.SINGLE, new BlockingWaitStrategy());
disruptor.handleEventsWith(new Logic(disruptor, io));
次に、Logic イベント ハンドラーを次のように設定します。
public void onEvent(FixEvent event)
{
quickfix.Message ioMessage = event.message;
quickfix.SessionID receiver = event.session;
Log.debug("message: " + event.message.toString());
SessionID id = new SessionID(receiver.getBeginString(), "MYFX", receiver.getTargetCompID());
Session session = Session.lookupSession(id);
Log.debug("message: " + ioMessage.toString());
session.send (ioMessage);
}
何が起こっているかというと、送信 (ioMessage) するまでに、何らかの形で ioMessage を上書きする新しいイベントが発生したため、重複したメッセージが送信されています。
何を提案できますか?