2 つ以上の異なるイベントを出力ディスラプターに同時に (次々に) 発行していますが、ディスラプター onEvent は通常、最後に発行されたイベントのみを IO セッションに送信しています。基本的にイベントデータは上書きされます。セッションレイヤーで各イベントのコピーを見たいのですが。セッションレイヤーをロックで同期しようとしましたが、通常、パブリッシャーはロックに対してもまだ速すぎます (動作している場合もありますが、ほとんどの場合は動作していません)。
ここにいくつかのコードがあります:
private final Object lock = new Object();
public void onEvent(final FixEvent event, final long sequence, final boolean endOfBatch)
{
synchronized(lock)
{
sendMessage(event.message);
}
}
これは他の誰かに起こりましたか?パブリッシャーのスピード バンプ以外に別の解決策はありますか?
プロデューサーコードは次のとおりです。
public void onData(Message message, SessionID s)
{
long sequence = ringBuffer.next(); // Grab the next sequence
try
{
FixEvent event = ringBuffer.get(sequence);
event.set(message, s);
}
finally
{
ringBuffer.publish(sequence);
}
}