首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lagom如何管理事件版本控制?

lagom如何管理事件版本控制?
EN

Stack Overflow用户
提问于 2019-09-05 23:15:57
回答 1查看 319关注 0票数 3

假设我们修改了一个事件,添加了一个新字段。我知道我们可以在这个文档https://www.lagomframework.com/documentation/1.5.x/scala/Serialization.html中处理事件映射更改的序列化,但是lagom如何知道事件是哪个版本呢?在声明和定义case类事件时,我们不指定事件版本。那么,lagom序列化如何知道要使用哪个事件版本映射?

在下面的图像中,有一个名为fromVersion的字段。lagom如何知道从事件存储数据存储中提取的事件的当前版本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-08 17:36:15

因此,要实现迁移,需要添加以下代码:

代码语言:javascript
复制
  private val itemAddedMigration = new JsonMigration(2) {
    override def transform(fromVersion: Int, json: JsObject): JsObject = {
      if (fromVersion < 2) {
        json + ("discount" -> JsNumber(0.0d))
      } else {
        json
      }
    }
  }

  override def migrations = Map[String, JsonMigration](
    classOf[ItemAdded].getName -> itemAddedMigration
  )
}

这意味着现在所有ItemAdded类型的新事件都将具有版本2。以前的所有事件都将被视为版本1。它是在类PlayJsonSerializer中定义的--请参见以下代码:

代码语言:javascript
复制
  private def parseManifest(manifest: String) = {
    val i = manifest.lastIndexOf('#')
    val fromVersion = if (i == -1) 1 else manifest.substring(i + 1).toInt
    val manifestClassName = if (i == -1) manifest else manifest.substring(0, i)
    (fromVersion, manifestClassName)
  }

此外,您还可以在数据库中检查它。我使用卡桑德拉,如果我要打开我的数据库,在eventsbytag1集合中我可以找到ser_manifest字段中描述的版本。其中是简单类-它是version 1,在这里您指定了额外的'#2',它意味着版本2等等。

如果需要更多关于其工作方式的信息,可以在类fromBinary中检查方法PlayJsonSerializer。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57813971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档