Lagom框架/持久读取端/Cassandra/DataStax/未配置表
我成功地编译了源代码示例 这是关于CQRS模式的读取端 唯一的问题是:它无法运行 看起来配置有问题。。。在这一点上,拉贡的官方文件是非常不完整的 错误显示:Lagom框架/持久读取端/Cassandra/DataStax/未配置表,cassandra,datastax,cqrs,typesafe,lagom,Cassandra,Datastax,Cqrs,Typesafe,Lagom,我成功地编译了源代码示例 这是关于CQRS模式的读取端 唯一的问题是:它无法运行 看起来配置有问题。。。在这一点上,拉贡的官方文件是非常不完整的 错误显示: java.util.concurrent.CompletionException: java.util.concurrent.ExecutionException: com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table postsummar
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
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
仍然…,没有运气,重新启动后出现相同错误
可能与启动过程中的另一个错误有关,即:
[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.keyspace-autocreate = true
cassandra-journal.tables-autocreate = true
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研究的关键部分
一些参考:
以下是一些屏幕截图:
顺便说一句,我通过在代码中创建表来解决这个问题,从事件处理器的prepare方法调用这个方法:
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);
}
private CompletionStage准备表(CassandraSession会话){
CompletionStage preparePostSummary=session.executeCreateTable(
“如果不存在,则创建表postsummary(”
+分区bigint、id文本、标题文本、
+“主键(id))”
).完成时((好,错误)->{
if(err!=null){
System.out.println(“未能创建postsummary表,原因是:”+err.getMessage());
}
});
CompletionStage prepareBlogEventOffset=session.executeCreateTable(
“如果不存在blogevent_偏移量,则创建表(”
+分区bigint,偏移量uuid
+“主键(偏移量))”
).完成时((好,错误)->{
if(err!=null){
System.out.println(“未能创建blogevent_偏移表,原因是:”+err.getMessage());
}
});
返回preparePostSummary.thenCompose(a->prepareBlogEventOffset);
}
谢谢!,
拉卡我这里有一个工作示例。即使不使用自动创建的表:
你好,马库斯,谢谢你指出。但是像其他两个例子(LagomJava和LagomChipper)一样,它仍然使用lagom的M1版本。自M2以来,ServiceCall定义已更改(2个类型参数,而不是3个)。lagom doc网站是指M2。。。我希望你们有机会将这些例子同步到M2上,以免混淆读者。嗨,马库斯:我还有一个关于拉各姆的问题,请帮忙。非常感谢