эликсир GenStage потребитель min_demand

Есть проект с genstage.

Производитель A, производитель-потребитель B и потребитель C.

B запрашивает события один в A (min_demand: 0, max_demand: 1).

{:producer_consumer, nil, subscribe_to: [{Grub.Producer, max_demand: 1, min_demand: 0}]}

C запрашивает несколько событий от B (min_demand: 25, max_demand: 50).

workers = for id <- 1..count do
  {:"Elixir.Grub.Worker#{id}", max_demand: 50, min_demand: 25}
end
{:consumer, {in_process_queue, errors_queue}, subscribe_to: workers}

Но на самом деле C получает и обрабатывает данные по одному (я это вижу из лога приложения).

Как заставить C обрабатывать данные партиями?


person Marsel.V    schedule 10.09.2018    source источник


Ответы (1)


GenStage не кэширует данные самостоятельно. Итак, что вам нужно сделать, это кэшировать данные в производитель-потребитель как это задокументировано.

person Hauleth    schedule 10.09.2018
comment
спасибо, но тут я вижу только буферизацию в продюсере, при которой в handle_demand можно отследить, что событий не хватает для удовлетворения спроса. Но как это сделать в производитель-потребитель, в котором нет handle_demand, а есть handle_events? - person Marsel.V; 11.09.2018