Я пытаюсь внедрить актерскую систему с возможностью обратного давления. В качестве требования мастер-процесс получает потоковые данные в формате JSON. Однако каждое событие JSON имеет несколько полей, таких как {ip: '123.43.12.1', страна: 'US', ... и т. Д.}. Структура JSON известна заранее.Как создать реактивную систему актерского потока с возможностью вентиляции
Теперь я должен как-то сгладить структуру JSON в (ключ, значение). Например, вышеупомянутые данные могут быть сплющены в (ip, freq), (страна, частота), где частота - это время, в течение которого в потоке данных появляется ip (например, «123.43.12.1»).
Очень естественным способом является пересылка каждой пары (ключ, значение) соответствующему ребенку/удаленному актеру для дальнейшей оценки. Например, ('123.43.12.1', 1) отправляется на IP-Actor; («США», 1) отправляется в Country-Actor и так далее.
Я хочу убедиться, что вся система находится под давлением. В этом случае дело сложнее, потому что событие {ip: '123.43.12.1', country: 'US'} рассматривается только как обработанное, если оба IP-Actor и Country-Actor завершили обработку сплющенной пары ('123.43. 12.1 ', 1), (' US ', 1). Каждый актер может иметь разную скорость обработки (например, IP-Actor намного быстрее, чем Country-Actor). В этом случае я хочу, чтобы главный процесс, который получил поток, будет ждать/блокироваться до тех пор, пока не появится сигнал потребности (произойдет, когда оба участника закончат обработку существующих данных в своем почтовом ящике). В противном случае, какой-то актер может заполнить сообщение в почтовом ящике (Country-Actor - slow one), но сообщение все еще приходит, потому что другой почтовый ящик актера пуст (IP-Actor - более быстрый).
Может ли кто-нибудь предложить, если характеристики реактивного потока обеспечивают такую функциональность. Если нет, то в любом случае для достижения функциональности наиболее эффективным способом.
Спасибо.