В документах Akka Streams четко указано, что для запуска потока он должен иметь ровно один источник и ровно один приемник. Интересно, что накладывает такое ограничение. Сценарии с несколькими источниками, объединенными в один, с несколькими приемниками, разветвленными из одного потока, вполне разумны. Есть ли технические причины для такого ограничения?
Почему поток Akka имеет ровно один источник и один приемник?
Ответы (1)
Я предполагаю, что вы ссылаетесь на этот раздел документации, определяющий основные компоненты Akka Streams:
Источник: стадия обработки с ровно одним выходом, [...]
Sink: стадия обработки только с одним входом, [...]
Поток: этап обработки, который имеет ровно один вход и выход, [...]
RunnableGraph: поток, оба конца которого присоединены к источнику и приемнику соответственно, и который готов к
run()
.
Теперь, в то время как первые 3 определения ясны и правдивы, я думаю, что определение RunnableGraph
является неполным. RunnableGraph
можно определить, как описано (т.е. source.via(flow).to(sink)
), и это самый простой способ получить один из них. Однако существуют более гибкие и сложные способы определения RunnableGraph
, например GraphDSL.
Если вы посмотрите примеры в это вы увидите RunnableGraph
, созданные из нескольких источников и/или нескольких приемников.
Вероятно, правильнее будет сказать, что RunnableGraph
— это стадия обработки без входов и выходов (т. е. имеет ClosedShape
).