【问题标题】:DROOLS Rule Engine : Making network calls within DroolsDROOLS 规则引擎:在 Drools 中进行网络调用
【发布时间】:2017-03-24 12:03:54
【问题描述】:

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

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

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

  2. 使用(收集的数据 + 交易实体)作为 drools 的输入,并从中得出业务决策。

上述方法的一个主要缺点是我必须事先收集所有数据(昂贵的网络调用),甚至不必担心数据的有用性。

我想要做的是通过将服务调用移动到规则执行层来延迟服务调用。 如果我可以对一些已经可用的数据(在我的事务实体本身内)做出决定,则其目的是利用 drools 决策树来避免进行服务调用。

只是想让思维过程得到验证(即,将服务调用作为规则执行的一部分将是一个好习惯与否。)。

任何人都可以分享一下相同的优点/缺点。任何线索将不胜感激

【问题讨论】:

  • 看来你已经确定了主要问题:网络调用。如果通过避免某些调用获得的时间收益值得额外的工作来创建该逻辑:那么,就是这样。您对您提供的意见还有什么期望?
  • 我不想在我的代码本身中创建该逻辑(这似乎有点黑客)。相反,想知道 drools 本身是否是处理相同逻辑的正确位置(通过决策树)。只是想让思维过程得到验证(即,将服务调用作为规则执行的一部分是否是一个好习惯。)

标签: java drools distributed-system


【解决方案1】:

你不能用你(还没有)的事实来推理。如果您确实拥有的事实让您决定还需要什么,您可以根据以下简单示例编写规则。

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 中的任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 2011-06-20
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多