2016-05-22 13 views
2

Я изучаю использование Lagom Framework, и я не могу понять, как работает постоянная сторона.Как получить состояние, не сохраняя его с помощью платформы Lagom

Мой пример прост: у меня есть товарный запас и несколько сервисов, которые создают, покупают и заказывают продукцию, делая акции колеблются. В настоящий момент я сохраняю продукт с количеством запасов вместе с каждым движением запаса с добавленным/удаленным количеством. То, что я хотел бы достичь, - это только сохранить все движения акций и создать продукт из них.

Мое понимание Lagom Framework заключается в том, что я не должен упорствовать в продуктах, а вместо этого событий движения запаса. Таким образом, если я хочу знать запас продукта, события обрабатываются каким-то образом для получения текущего состояния.

В моей реализации службы, вот как я получаю состояние продукта на данный момент:

@Override 
public ServiceCall<String, NotUsed, Source<Product, ?>> getProduct() { 
    return (id, req) -> { 
     Source<Product, ?> result = session.select("SELECT * FROM products WHERE id = ?", id) 
       .map(row -> new Product(row.getString("id"), row.getString("ean"), row.getLong("quantity"))); 
     return CompletableFuture.completedFuture(result); 
    }; 
} 

и вот как я добавить акцию:

@Override 
public ServiceCall<String, Stock, NotUsed> add() { 
    return (id, request) -> { 
     log.info("EAN: {}. Supply order received.", id); 
     PersistentEntityRef<StockCommand> ref = persistentEntityRegistry.refFor(StockEntity.class, id); 
     return ref.ask(new StockCommand.AddStock(request.amount)).thenApply(r -> NotUsed.getInstance()); 
    }; 
} 

Есть ли способ с ЛАГОМ в восстановить состояние продукта только с сохраненными событиями? Как это можно достичь для моих нужд?

ответ

2

Приношу свои извинения, я нахожу ваш пример очень запутанным. Таким образом, у вас есть инвентарь с несколькими продуктами. Каждый продукт имеет счетчик (который показывает, сколько предметов доступно). Процессы заказов уменьшают счет, поскольку продукт приобретается, процессы доставки хранилища увеличивают запас (следовательно, счет).

Вы можете использовать функцию state() в команде, чтобы получить состояние.

См. https://github.com/orefalo/lagom-sample-bank для получения более подробной информации о аналогичном варианте использования.

Надеюсь, что это поможет,

+0

Извините, что забыл проверить этот вопрос. Это было решено путем полной реорганизации проекта, и теперь мой вопрос не имеет значения. Спасибо, что пытались помочь. –

 Смежные вопросы

  • Нет связанных вопросов^_^