首页 文章

Lagom框架/持久读取端/ Cassandra / DataStax /表未配置

提问于
浏览
1

我成功编译了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

以下是一些截图:

enter image description here

enter image description here


顺便说一句,我通过在代码中创建表来解决它,从事件处理器的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);
}

谢谢!,拉卡

1 回答

相关问题