2016-08-18 4 views
0

Вот мой случай использования:Лучшая практика: как получить все EntityIds на основе какого-либо условия, применяемого к состоянию?

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 с организациейId, но эта таблица в конечном итоге является последовательной. Нужно ли мне создать еще один объект с userId как entityId?

В fun-cqrs есть Projection.onEvent, который позволяет узнать, когда событие было обработано проекцией.

См https://groups.google.com/forum/#!topic/lagom-framework/JG71x5W5h7I

ответ

0

Readside ответ, как вы отмечаете. Это, конечно, в конечном итоге последовательное. В качестве альтернативы вы можете создать другой объект и иметь одну сущность, напрямую ссылающуюся на другую, но она все равно будет в конечном итоге согласована с точки зрения клиента.

Вопрос, который вы должны задать себе, - это почему POST и GET должны быть немедленно согласованы? Есть способы достижения этого, но компромиссы, которые вы делаете, обычно влияют на производительность и могут не совпадать с лагом.