【问题标题】:Lagom framework / Persistent Read Side / Cassandra / DataStax / Table unconfiguredLagom 框架 / Persistent Read Side / Cassandra / DataStax / 表未配置
【发布时间】:2016-05-16 01:02:13
【问题描述】:

我成功编译了来自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);
}

谢谢!, 拉卡

【问题讨论】:

    标签: cassandra datastax cqrs typesafe lagom


    【解决方案1】:

    【讨论】:

    • 嗨,马库斯,感谢您的指出。但与其他两个示例(lagom-java 和 lagom-chirper)一样,它仍然使用 M1 版本的 lagom。并且自 M2 以来,ServiceCall 定义已更改(2 个类型参数而不是 3 个)。 lagom doc网站指的是M2...希望大家有机会将示例同步到M2,以免混淆读者。
    • 嗨,Markus:我还有一个关于 Lagom 的问题,请帮忙。谢谢一堆! :stackoverflow.com/questions/37241401/…
    猜你喜欢
    • 2018-07-01
    • 2017-05-20
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2018-05-18
    • 2015-02-12
    相关资源
    最近更新 更多