我已经看了一些演示,包括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进程)的主题,目的是将读与写分离。也就是说,即使读取端(使用者)暂时不可用(即,kafka临时将啁啾存储到磁盘上,一旦再次可用,读取端将对其进行处理),写入也将返回成功。
将写端和读端分离成单独的服务,并在不同的端口上运行它们,难道不合乎逻辑吗?或者这种方法有共同的缺陷吗?