0

我正在为某些业务逻辑使用中断器,这些逻辑会发布到另一个处理 IO 的中断器。发布到 IO 中断器的事件可能到达太快,无法构建和验证 IO。嗯,这就是重点……

IO 中断器的设置如下:

disruptor = new Disruptor<>(factory, RING_SIZE, executor, ProducerType.SINGLE, new BlockingWaitStrategy());
disruptor.handleEventsWith(new Logic(disruptor, io));

然后逻辑事件处理程序设置如下:

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,因此重复的消息被发送出去。

你有什么建议?

4

1 回答 1

-1

答案看起来像是要完成事件处理程序变量并在事件上使用同步的最终锁定,如下所示:

private final Object lock = new Object();

public void onEvent(final FixEvent event, final long sequence, final boolean endOfBatch)
{   
    synchronized(lock)
    {
        ...

除非锁定是最终的,否则它不起作用。它不适用于静态最终锁。除了最终锁之外,它在其他任何东西上同步都不起作用,即在不起作用的情况下同步final event

然后它在乐队营地工作了 1 次,然后停止工作......

于 2015-09-14T14:07:54.800 回答