- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Lagom reference documentation显示如何标记事件:
object BlogEvent {
val BlogEventTag = AggregateEventTag[BlogEvent]
}
sealed trait BlogEvent extends AggregateEvent[BlogEvent] {
override def aggregateTag: AggregateEventTag[BlogEvent] =
BlogEvent.BlogEventTag
}
sealed trait 表明可以标记父事件以使所有子事件按顺序处理:
All events with a particular tag can be consumed as a sequential, ordered stream of events.
所以我们这样做了,我们标记了我们的父事件,我们使用 slick 实现了一个 ReadSideProcessor,但它没有用。提高日志记录级别,我们看到了一条“未处理的消息”,并且我们在 SlickReadSideImpl
中发现了以下内容:
override def handle(): Flow[EventStreamElement[Event], Done, NotUsed] =
Flow[EventStreamElement[Event]]
.mapAsync(parallelism = 1) { element =>
val dbAction = eventHandlers.get(element.event.getClass)
.map { handler =>
// apply handler if found
handler(element)
}
.getOrElse {
// fallback to empty action if no handler is found
if (log.isDebugEnabled) log.debug("Unhandled event [{}]", element.event.getClass.getName)
DBIO.successful(())
}
.flatMap { _ =>
// whatever it happens we save the offset
offsetDao.updateOffsetQuery(element.offset)
}
.map(_ => Done)
slick.db.run(dbAction.transactionally)
}
如果类与注册处理程序的类不完全匹配,则上面的 eventHandlers.get(element.event.getClass)
无法找到任何处理程序,例如它是一个子类(我们的案例)。
这有点令人困惑:这是期望的行为还是 JDBCReadSideImpl
和 SlickReadSideImpl
实现中的错误?
最佳答案
这是按预期工作的。预计您将希望以不同方式处理具体事件类型,因此您将为每种具体类型注册一个处理程序。
用相同标签标记所有事件子类型的目的是确保同一实体上不同类型事件之间的顺序。例如,如果您有一个 BlogCreatedEvent
和一个 BlogPublishedEvent
那么您会希望确保您的处理器在发布事件之前收到创建的事件,即使它以不同的方式处理它们.
关于scala - Lagom 中的事件标签是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46877923/
我指的是 Jonas Boner 撰写的 Reactive Microservices Architecture 的“Managing Communication Patterns”部分。 通常在服务
我开始在 Java 中使用 Lagom,并且需要编写自定义(反)序列化程序。我通读了文档并了解了 NegotiatedSerializer、MessageSerializer、SerializerFa
我正在创建 lagom 简单应用程序,定义一个休息端点并使用休息客户端 postman 命中端点。但作为回应,我收到了“未找到操作”错误。我正在将 Akka 与 lagom 集成,以下是我的代码: 服
我们的大多数 Lagom 入口点不使用多部分表单请求,但有一个使用。由于 Lagom 目前本身不支持多部分请求,我看到的一般建议是使用 PlayServiceCall 机制调用底层的 Play API
我有一个概念上的疑问。我知道特定实体的事件是在读取端按顺序处理的,但我认为下一个事件的处理不会等到前一个事件成功处理并且数据库更新后。 我说得对吗?如果是,那么有没有办法强制只有当先前的事件成功处理并
在我当前的场景中,我有一个来自 Alpakka 的文件源,它应该生成我要发布到主题的文件记录事件。可以从其他服务订阅该主题以接收读取事件。到目前为止,在我看到的大多数示例中,都有一个外部事件触发了一系
Lagom reference documentation显示如何标记事件: object BlogEvent { val BlogEventTag = AggregateEventTag[Blo
我想要一个接收项目对象的服务,该对象包含;名称、描述、价格和图片。 其他属性是字符串,可以很容易地作为 Json 对象发送,但要包含图片,最好的解决方案是什么? 如果 multipart formda
我是 Lagom 世界的新手。我有一个使用单元测试的场景。我在 Lagom/Java 框架和 Cassandra 数据库下工作。我有两种不同的服务: 设备服务 用户服务 我的需求是一个智能接入场景。用
我正在致力于在生产环境中设置 Lagom 应用程序。我曾尝试联系 Lightbend 获取 ConductR 许可证,但很久没有收到回复。所以,现在我正在寻找替代方法。我有多个问题。 由于现在应用程序
安装激活器为: brew 安装类型安全激活器 创建了一个新项目: activator new my-first-system lagom-java 切换到目录并以 activator run 运行项目
我是 lagom-sbt 的新手,我正在尝试使用 ConductR 运行 Lagom 服务包。 我添加了以下 sbt-conductr 版本在 plugins.sbt addSbtPlugin("c
我已经读过,ElasticSearch在持久性方面并不是最可靠的,但是我想用它在读取侧存储数据以实现最佳搜索。 如果我们将事件(写端)存储在cassandra数据库中,则意味着数据永远不会真正丢失。
我无法让调试器工作。重现步骤: 1) sbt lagom:runAll 2) sbt -jvm-debug 5005 3)在Intellij中设置远程配置+开始调试 4) 设置断点 5) 提出请求 调
以下资源指出 Lagom 在生产中使用异步记录器。 https://www.lagomframework.com/documentation/1.3.x/java/SettingsLogger.htm
我对 Lagom 框架非常陌生,我完全不知道自己在做什么。我有一个简单的 CRUD lagom 应用程序,可以正常工作,但我不知道如何检索列表。 这就是我现在所拥有的,但我正在得到 @Override
根据这个Lagom doc对于序列化: Compression, as described here, is only used for persistent events, persistent s
是否可以在 Lagom 中为每个服务注册两个或多个 ReadSideProcessor,如下所示: @Inject public BlogServiceImpl( Persistent
我正在研究 Lagom POC,使用自定义 header 向非 lagom 服务发送 POST 请求。就我而言,我试图点击 postman-echo 来测试自定义 header 。但是,尽管我相应地更
一项 Lagom 服务只能有一个实体吗?我找不到在单个服务中使用两种实体类型的示例。 最佳答案 单个 Lagom 服务可以拥有任意数量的实体,没有限制,只需为每个实体调用 PersistentEnti
我是一名优秀的程序员,十分优秀!