Drools 如何在Kie(RedHat决策管理器)中将决策服务作为无状态会话调用

Drools 如何在Kie(RedHat决策管理器)中将决策服务作为无状态会话调用,drools,rule-engine,kie,redhat-brms,Drools,Rule Engine,Kie,Redhat Brms,我刚刚安装了RedHat Decision Manager 7.3,可以部署决策服务。到目前为止,我一直在使用/server/containers/instances/{containerId}端点来调用我的服务,其中有效负载列出了将对象插入工作内存的命令 然而,这是一个有状态会话,我正在尝试解决如何使用无状态会话调用决策服务。关于如何通过restapi实现这一点,文档一点也不清楚,但是如果您使用javaapi,文档中有很多示例(除非我遗漏了一些东西) 有没有人能举例说明如何通过REST实现这一

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

然而,这是一个有状态会话,我正在尝试解决如何使用无状态会话调用决策服务。关于如何通过restapi实现这一点,文档一点也不清楚,但是如果您使用javaapi,文档中有很多示例(除非我遗漏了一些东西)

有没有人能举例说明如何通过REST实现这一点

任何帮助都将受到感激

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

看起来我不在一百万英里之外,从提供的文档来看,我需要在
lookup
param中指定会话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与知识会话进行交互:

我相信这是一个相关的文档,因此它将并排向您展示Java API及其REST API等价物,以便您可以将其用于您的用例

报告的示例也与无状态会话相关,只要您使用批处理命令包装所有命令;换言之,对我来说,该文档中报告的示例应该能够处理无状态会话,没有问题。如果您遇到其他问题,请毫不犹豫地将其报告为错误

在更新原始问题之后

Q1:否,问题中附带的屏幕截图是关于“流程配置”的。如果您想有目的地命名一个会话,在Business Central的垂直选项卡“Kie bases”的水平选项卡“设置”中打开您的项目,您可以编辑与
kmodule.xml
等效的内容,并根据需要命名您的知识库和会话。然后,该标识符将是批处理命令引用的标识符

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

请注意业务中心kmodule会话的定义默认为无状态,这是预期的

Q2实际上,正如Drools/DM手册中所述,无状态会话引用不是持久化/有状态的,因此将发生的情况是,您的请求将以无状态方式处理(因为它确实是无状态会话)

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


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

您可以参考本文档,以便RHDM v7.4 API通过Java API或REST API与知识会话交互:

我相信这是一个相关的文档,因此它将并排向您展示Java API及其REST API等价物,以便您可以将其用于您的用例

报告的示例也与无状态会话相关,只要您使用批处理命令包装所有命令;换言之,对我来说,该文档中报告的示例应该能够处理无状态会话,没有问题。如果您遇到其他问题,请毫不犹豫地将其报告为错误

在更新原始问题之后

Q1:否,问题中附带的屏幕截图是关于“流程配置”的。如果您想有目的地命名一个会话,在Business Central的垂直选项卡“Kie bases”的水平选项卡“设置”中打开您的项目,您可以编辑与
kmodule.xml
等效的内容,并根据需要命名您的知识库和会话。然后,该标识符将是批处理命令引用的标识符

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

请注意业务中心kmodule会话的定义默认为无状态,这是预期的

Q2实际上,正如Drools/DM手册中所述,无状态会话引用不是持久化/有状态的,因此将发生的情况是,您的请求将以无状态方式处理(因为它确实是无状态会话)

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


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

我还没有足够的信誉点来添加对tarilabs答案的评论,因此我在这里告诉您另一个答案,我们已经更新了tarilabs提到的答案(适用于Red Hat Decision Manager和Process Automation Manager,以及社区中的Drools)附带说明,说明如何查看或更改KIE会话ID,以便在
查找
命令属性中使用。希望这能帮助其他有同样问题的用户。感谢您在试图修改KIE会话设置时提出了您面临的问题

另外,我已经和你分享了7个。