Я ознакомился с несколькими демонстрационными примерами, включая демонстрационное приложение Chirper: https://github.com/lagom/lagom-java-sbt-chirper-example
Добавление чириканья и получение живого потока чирпов добавлено к тому же сервису.Кажется, это обычная практика:
public interface ChirpService extends Service {
ServiceCall<Chirp, NotUsed> addChirp(String userId);
ServiceCall<LiveChirpsRequest, Source<Chirp, ?>> getLiveChirps();
ServiceCall<HistoricalChirpsRequest, Source<Chirp, ?>> getHistoricalChirps();
@Override
default Descriptor descriptor() {
// @formatter:off
return named("chirpservice").withCalls(
pathCall("/api/chirps/live/:userId", this::addChirp),
namedCall("/api/chirps/live", this::getLiveChirps),
namedCall("/api/chirps/history", this::getHistoricalChirps)
).withAutoAcl(true);
// @formatter:on
}
}
Мой вопрос вращается вокруг идеи, что вы могли бы отправить сообщение addChirp
в тему брокера сообщений (процесс Кафки) с целью отделения операций чтения от записей.,Таким образом, запись вернет успех, даже когда сторона чтения (потребитель) временно недоступна (т. Е. ЧФП временно сохраняется Kafka на диск, чтобы обрабатываться стороной чтения, как только она снова становится доступной).
Разве не было бы логично разделить сторону записи и сторону чтения на отдельные службы и запустить их на разных портах в целом?Или у этого подхода есть общие подводные камни?