【问题标题】:How to do a DB reverse lookup with Akka Persistence in Lagom?如何在 Lagom 中使用 Akka Persistence 进行数据库反向查找?
【发布时间】:2019-04-04 19:01:59
【问题描述】:

我正在使用Lagom 构建令牌身份验证微服务,但遇到了问题。我的数据模型目前是

table Token (
  groupName varchar(255) PK,
  token varchar(255) (logical UUID type)
)

我有三种方法,createTokengetTokenvalidateToken。前两个采用组名,它很好地映射到https://www.lagomframework.com/documentation/current/scala/PersistentEntity.html#Persistent-Entity 中列出的实体 ID。
第三个在请求的正文中获取一个令牌,然后返回一个带有groupNametoken 的 json 有效负载(如果成功)。

Lagom 抽象出实际的 SQL,您可以通过以下方式访问持久层:val ref = persistentEntityRegistry.refFor[DptokenEntity](groupName)。实际的持久化代码在这里:

class DptokenEntity extends PersistentEntity {

  override type Command = DptokenCommand[_]
  override type Event = DptokenEvent
  override type State = DptokenState

  override def initialState: DptokenState = DptokenState(None)

  override def behavior: Behavior = {
    case DptokenState(_) => Actions()
      .onCommand[PersistToken, TokenResponse] {
      case (PersistToken(token), ctx, state) =>
        ctx.thenPersist(TokenPersisted(token)) { _ =>
          ctx.reply(token)
        }
    }.onReadOnlyCommand[GetToken, TokenResponse] {
      case (GetToken(groupName), ctx, state) =>
        state.token match {
          case Some(token) => ctx.reply(token)
          case None => ctx.invalidCommand(s"No token exists for $groupName")
        }
    }.onEvent {
      case (TokenPersisted(token), _) => DptokenState(Some(token))
    }
  }
}

case class DptokenState(token: Option[TokenResponse])

我很难理解如何使用上述模型进行反向查找,因为如果我通过令牌查找 entity,我表面上会在关系为 @ 的数据库中获得一个新行987654332@ -> groupName,这会给更新等带来大量问题......

在我撕掉 Event Sourcing 的东西并使用原始 Slick 之前,我想与 SO 上的好人核实一下。

【问题讨论】:

    标签: scala akka lagom


    【解决方案1】:

    您确定需要 CQRS 和 Lagom 持久实体吗? 如果您需要实现通过token 查找实体的案例,则需要为此使用Read-Side。但我不确定 Lagom PE 是否适合您。尝试使用基本的PersistentActor 而不是 Lagom PE。

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      相关资源
      最近更新 更多