我正在学习使用 Lagom 框架,但无法理解持久性方面的工作原理。
我的例子很简单:我有一个产品库存和几个创建、购买和订购产品的服务,这使得库存波动。目前,我坚持产品的库存数量以及每个库存移动以及添加/删除的数量。我想要实现的是只保留所有库存变动并从中创建产品。
我对 Lagom 框架的理解是,我不应该坚持产品,而应该坚持股票变动的事件。这样,如果我想知道产品的库存,就会以某种方式处理事件以检索当前状态。
在我的服务实现中,这是我目前获取产品状态的方式:
@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());
};
}
Lagom 有没有办法仅通过持久事件来重建产品状态?如何满足我的需求?