我使用的一个事务系统处理来自多个外部系统的数据收集,并基于(事务实体+收集的数据)做出一些业务决策。
目前,我们遵循以下步骤:
-
从多个子系统收集数据。
-
使用(收集的数据+事务实体)作为drools的输入,并从中得出业务决策。
上述方法的一个主要缺点是我必须事先收集所有数据(昂贵的网络调用),甚至没有考虑数据的有用性。
我想做的是通过将服务调用移动到规则执行层来延迟服务调用。这样做的目的是利用drools决策树来避免在我可以对一些已经可用的数据(在我的事务实体本身内)做出决策时进行服务调用。
只是想验证思维过程(即,将服务调用作为规则执行的一部分是否是一个好实践)。
有谁能分享一下相同的利弊吗?有任何线索将不胜感激
你不能用你还没有的事实来推理。如果你已经知道的事实让你决定了你还需要什么,你可以根据下面这个简单的例子来编写规则。
rule "x and y, not z"
when
Dimension( $id: id, coord == "x" )
Dimension( id == $id, coord == "y" )
not Dimension( id == $id, coord == "z" )
then
fetch and insert missing Dimension
end
rule "x, y and z" ... end
注意,这个读取和插入的过程不能同步执行。您可以将请求作为事件队列插入-使用Java中的任何内容。