Почему Disruptor будет хранить много данных, когда производитель намного быстрее, чем потребитель? - PullRequest
0 голосов
/ 28 апреля 2019

Я узнаю о Disruptor и у меня возникла проблема. Когда у меня очень большой кольцевой буфер, например, 1024, и мой продюсер намного быстрее, чем мой потребитель.Кольцевой буфер будет хранить много данных, но не будет публиковать события до конца моего приложения.Это означает, что мое приложение потеряло много данных (мое приложение не является демоном).

Я пытался замедлить скорость производителя, это работает.Но я не могу использовать этот способ в своем приложении, это с благодарностью снизит производительность моего приложения.

val ringBufferSize = 1024
val disruptor = new Disruptor[util.Map[String, Object]](new MessageEventFactory, ringBufferSize, new MessageThreadFactory, ProducerType.MULTI, new BlockingWaitStrategy)

      disruptor.handleEventsWith(new MessageEventHandler(batchSize, this))
      disruptor.setDefaultExceptionHandler(new MessageExceptionHandler)
      val ringBuffer = disruptor.start
      val producer = new MessageEventProducer(ringBuffer)
 part.foreach { row =>
//        Thread.sleep(2000)
        accm.add(1)
        producer.onData(row)

//        flush(row)
      }

Я хочу найти способ самостоятельно контролировать размер пакета прерывателя, и есть ли какой-нибудь способ потребить оставшуюся часть данных в конце моего приложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...