DROOLS规则引擎:在DROOLS内进行网络调用



我使用的一个事务系统处理来自多个外部系统的数据收集,并基于(事务实体+收集的数据)做出一些业务决策。

目前,我们遵循以下步骤:

  1. 从多个子系统收集数据。

  2. 使用(收集的数据+事务实体)作为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中的任何内容。

最新更新