最佳实践:如何根据应用于状态的某些条件检索所有EntityIds?

时间:2016-08-18 08:32:31

标签: scala cqrs lagom

这是我的用例:

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

正如你所指出的,

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

你必须问自己的问题是为什么POST和GET必须立即保持一致?有一些方法可以实现这一点,但你所做的权衡通常会影响性能,可能与拉格尔不一致。