我从http://www.lagomframework.com/documentation/1.0.x/ReadSide.html成功编译了代码示例
这是关于 CQRS 模式的读取端。
唯一的问题是:它不运行。
看起来像配置问题......而Lagom的官方文档此时非常不完整。
错误说:
java.util.concurrent.CompletionException: java.util.concurrent.ExecutionException: com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table postsummary
好的,代码中有一行代码执行 cassandra 查询,从 & 中选择并插入到名为 postsummary 的表中。
我认为这些表是默认自动创建的。无论如何,有疑问,我只是将这一行添加到我的 application.conf 中:
cassandra-journal.keyspace-autocreate = true
cassandra-journal.tables-autocreate = true
仍然......,没有运气,重新启动后同样的错误。
也许它与启动期间的另一个错误有关,即:
[warn] a.p.c.j.CassandraJournal - Failed to connect to Cassandra and initialize. It will be retried on demand. Caused by: ServiceLocator is not bound
我想...好吧,也许它正在尝试联系 9042(默认 cassandra 端口),而 lagom 默认情况下在 4000 开始嵌入 cassandra。
所以我尝试在 application.conf 中添加这些行:
cassandra-journal.contact-points = ["127.0.0.1"]
cassandra-journal.port = 4000
lagom.persistence.read-side.cassandra.contact-points = ["127.0.0.1"]
lagom.persistence.read-side.cassandra.port = 4000
仍然......,没有运气,同样的错误。
任何人都可以帮我解决它。我需要运行这个示例,这是使用 lagom 进行 CQRS 研究的关键部分。
一些参考:https ://github.com/lagom/lagom/blob/master/persistence/src/main/resources/reference.conf
以下是一些截图:
顺便说一句,我通过在代码中创建表来解决它,从事件处理器的准备方法中调用此方法:
private CompletionStage<Done> prepareTables(CassandraSession session) {
CompletionStage<Done> preparePostSummary = session.executeCreateTable(
"CREATE TABLE IF NOT EXISTS postsummary ("
+ "partition bigint, id text, title text, "
+ "PRIMARY KEY (id))"
).whenComplete((ok, err) -> {
if (err != null) {
System.out.println("Failed to create postsummary table, due to: " + err.getMessage());
}
});
CompletionStage<Done> prepareBlogEventOffset = session.executeCreateTable(
"CREATE TABLE IF NOT EXISTS blogevent_offset ("
+ "partition bigint, offset uuid, "
+ "PRIMARY KEY (offset))"
).whenComplete((ok, err) -> {
if (err != null) {
System.out.println("Failed to create blogevent_offset table, due to: " + err.getMessage());
}
});
return preparePostSummary.thenCompose(a -> prepareBlogEventOffset);
}
谢谢!,拉卡