如何在 Kie (RedHat Decision Manager) 中调用决策服务作为无状态会话

How to invoke decision service as a stateless session in Kie (RedHat Decision Manager)

我刚刚安装了 RedHat Decision Manager 7.3,可以部署决策服务。到目前为止,我一直在使用 /server/containers/instances/{containerId} 端点来调用我的服务,其中有效负载列出了将对象插入工作内存的命令。

但是,这是一个有状态会话,我正在尝试了解如何使用无状态会话调用决策服务。文档并不清楚如何通过 REST API 执行此操作,但是如果您使用 Java API(除非我遗漏了什么),有很多示例。

有没有人有任何关于如何通过 REST 执行此操作的示例?

非常感谢任何帮助。

更新 首先我指的是版本 7.3 而不是 7.4,但文档看起来是一样的。

所以看起来我不在一百万英里之外,从提供的文档看来我需要在 lookup 参数中指定一个会话 ID,所以我的请求将是这样的:

{
  "lookup": "mysession",
  "commands": [
    {
      "insert": {
        "object": {
          "com.indecision.baggage.Result": {}
        },
        "return-object": true,
        "out-identifier": "results"
      }
    },
    {
      "insert": {
        "object": {
          "com.indecision.baggage.Booking": {
            "fareClass": "First",
            "baggageItems": [
              {
                "com.indecision.baggage.BaggageItem": {
                  "width": 100,
                  "height": 100,
                  "depth": 100,
                  "weight": 20
                }
              }
            ]
          }
        },
        "return-object": true,
        "out-identifier": "booking"
      }
    },
    {
      "insert": {
        "object": {
          "com.indecision.baggage.FlightInformation": {
            "currentWeight": 100000,
            "flightNumber": "IA001",
            "maxOperatingWeight": 200000
          }
        },
        "return-object": true,
        "out-identifier": "flightInfo"
      }
    },
    {
      "fire-all-rules": {
        "out-identifier": "firedActivations"
      }
    }
  ]
}

然而,当我发送请求时,我收到以下错误消息:

{
  "type": "FAILURE",
  "msg": "Error calling container Indecision-Airlines-Baggage-Fee-Calculator: Session 'mysession' not found on container 'Indecision-Airlines-Baggage-Fee-Calculator_1.0.0-SNAPSHOT'.",
  "result": null
}

现在,在服务器配置下的 RH Business Central 中,您可以为决策服务指定一个会话 ID,但是无论我尝试什么,保存 按钮总是灰显。所以我的第一个问题是关于为什么或如何启用此配置的设置的任何想法?

我的第二个问题是,如果会话 ID 必须预先定义,那么这些服务真的不能跨多个请求真正无状态吗?正如我所见,他们需要预先指定他们想要在什么会话 ID 下执行,而不是新请求由 KIE 引擎为他们创建一个新会话。还是我听错了?

再次感谢您的回答。

您可以参考此 RHDM v7.4 文档 API 通过 Java API 或 REST API 与知识 session 交互: doc link

我认为这是一份相关文档,因此它将向您展示 side-by-side Java API 及其 REST API 等价物,因此您可以将其用于您的 use-case.

那里报告的示例也与无状态相关session,只要您使用批处理命令来包装所有命令;换句话说,对我来说,该文档中报告的示例应该可以与无状态 session 一起使用,没问题。如果您遇到其他情况,请不要犹豫,将其报告为错误

原问题更新后

Q1:不是,问题中附上的截图是关于"process configuration"的。如果您想有目的地命名 session,在 Business Central 的水平选项卡 "Settings" 中打开您的项目,在垂直选项卡 "Kie bases" 中,您可以编辑 kmodule.xml 的等效项并根据需要命名您的知识库和 session。然后,此标识符将成为批处理命令引用的标识符。

快速示例屏幕截图供您参考:

请注意 session 的 Business Central kmodule 定义是 默认无状态 ,这是预期的。

Q2不是真的,正如Drools/DM手册中描述的那样,无状态session引用不是persisted/stateful,所以会发生什么是您的请求将以无状态方式处理(因为它确实是无状态的 session)。

换句话说,对于发送到名为 "mysession" 的无状态 session 的任何请求,无状态 session 实例 将处理您的请求, 透明.

您不必为每个请求配置一个 session 名称。

我还没有足够的声誉点数来对 tarilabs 的回答添加评论,所以我在这里告诉你我们已经更新了 tarilabs 提到的 KIE APIs document 的另一个答案(因为Red Hat Decision Manager 和 Process Automation Manager,以及社区中的 Drools),并附有说明如何查看或更改 KIE 会话 ID 以便在 lookup 命令属性中使用的注释。希望这会帮助其他有同样问题的用户。感谢您就您在尝试修改 KIE 会话设置时遇到的问题提出问题。

此外,我已经与您分享了该文档的 7.4 版本(尽管在 7.3 中也进行了更新)因为我想让您了解我们的 Red Hat Decision Manager 中的一个新的直接文档反馈功能和流程自动化管理器文档从 7.4 开始。您可以突出显示文档的任何部分,单击添加反馈,并直接向我们的文档团队提供文档反馈以进行评估、确定优先级和解决。有关此功能的详细信息,请参阅 Red Hat Customer Portal 中的此公告。

如果您对我们的 Decision Manager 或 Process Automation Manager 文档有任何其他具体问题或建议,请随时使用客户门户中的反馈功能。对于社区文档,请随意使用 tarilabs 提到的社区渠道。

再次感谢您的反馈,贾斯汀!