每个请求的 Drools 有状态会话
Posted
技术标签:
【中文标题】每个请求的 Drools 有状态会话【英文标题】:Drools stateful session per request 【发布时间】:2018-05-23 00:03:57 【问题描述】:我们正在尝试使用 Drool 作为我们的规则引擎服务。下面列出了我们到目前为止所做的工作
Deployed workbench 7.2.Final Deployed KIE server 7.2.0.Final 配置了一些数据对象、规则,将更改部署到 KIE 服务器,我们能够使用 REST API 执行规则无状态会话满足了我们的大部分需求(给出一组数据,执行规则并返回数据,就是这样)。但是使用无状态,我们不得不妥协 Drools 有状态会话提供的许多重要特性。
所以我们尝试对每个请求使用有状态会话。这意味着会话应在请求结束后立即处理。此外,即使会话名称相同,并行请求也不应相互干扰
我们发现容器运行时策略配置(Workbench > Deploy > any container > Process Configuration > Runtime strategy)
但即使将容器策略配置为 Per Request,它的行为仍然与 Singleton 相同(每次请求后会话不会被释放)
我们读它的地方很少,运行时策略只在 jBPM 中实现
我们向KIE服务器发出请求的方式如下所示
Request: POST HOST/kie-server/services/rest/server/containers/instances/TestRequest_1.0.4
"lookup": "ab-session", //stateful session
"commands": [
"insert":
"out-identifier": "125",
"object":
"com.myteam.testrequest.Product":
"id": "123",
"name": "Hoo Hoo",
"count": 0
,
"return-object": "true"
,
"insert":
"out-identifier": "126",
"object":
"com.myteam.testrequest.Product":
"id": "123",
"name": "Hoo Hoo",
"count": 0
,
"return-object": "true"
,
"fire-all-rules": "hf2"
]
我们需要帮助来实现这一要求。另外,如果我们做错了什么,请帮助理解
【问题讨论】:
你能在哪里解决这个问题? 我们的一些理解是不对的。 drools 中的无状态会话实际上是有状态会话的按请求实现。这意味着有状态支持的所有命令也支持无状态。 (我们最初认为无状态会话不支持modify
之类的命令)如果您想针对每个请求策略进行回答,则仅在jBPM
中可用
【参考方案1】:
在 kmodule.xml 中你可以尝试添加“prototype”范围,因为默认是“singleton”:
<ksession name="SessionName" type="stateful" default="false" clockType="realtime" scope="prototype"/>
【讨论】:
以上是关于每个请求的 Drools 有状态会话的主要内容,如果未能解决你的问题,请参考以下文章