0

这是我的用例:

case class Organization(id: String = UUID.randomUUID().toString, userId: String)
case class OrganizationState(organization: Option[Organization])
case CreateOrganization extends OrganizationCommand
case OrganizationCreated extends OrganizationEvent
class OrganizationEntity extends PersistentEntity[OrganizationCommand, OrganizationEvent, OrganizationState]

POST /organizations?userId=1 <= creates an organization associated with user 1
GET /organizations?userId=1 <= retrieves all organizations associated with user 1

如何实施我的服务以确保一致性?

我尝试使用 aCassandraReadSide来维护一个映射 userId 和 organizationId 的表,但该表最终是一致的。我是否需要使用 userId 作为 entityId 创建另一个实体?

在 fun-cqrs 中,有Projection.onEvent允许知道事件何时被投影处理。

请参阅https://groups.google.com/forum/#!topic/lagom-framework/JG71x5W5h7I

4

1 回答 1

0

正如您所指出的,Readside 就是答案。当然,最终是一致的。或者,您可以创建另一个实体并让一个实体直接调用另一个实体,但从客户端的角度来看,它最终仍将是一致的。

您必须问自己的问题是,为什么 POST 和 GET 必须立即保持一致?有很多方法可以做到这一点,但您所做的权衡通常会影响性能,并且可能与 lagom 不一致。

于 2017-03-22T20:49:30.207 回答