如何解决Camunda dmnEngine 的无状态使用是线程安全的吗?
我有一个用例,我使用 Camunda (7.12) 进行无状态 DMN 评估。所以它只是一个用于映射值的大 DMN 表。该应用程序是用 Kotlin 中的 Spring Boot 编写的,并作为 REST 服务公开。 代码如下所示:
companion object {
private const val DMN_NAME = "mappingRules.dmn"
private const val DECISION_NAME = "mappingRules"
}
val dmnEngine: DmnEngine
val dmnTableStream: InputStream
val dmnDecision: DmnDecision
init {
dmnEngine = DmnEngineConfiguration.createDefaultDmnEngineConfiguration().buildEngine()
dmnTableStream = MyMappingService::class.java.classLoader.getResourceAsstream(DMN_NAME)
dmnDecision = dmnEngine.parseDecision(DECISION_NAME,dmnTableStream)
}
fun mapValue(source: String) {
val decisionResult: DmnDecisionTableResult = dmnEngine
.evaluateDecisionTable(dmnDecision,Variables.createVariables()
.putValue("source",source)
)
return decisionResult.firstResult.getValue("target") as String
}
mapValue
然后dmnEngine.evaluateDecisionTable
可能被多个线程并发执行,这个Camunda 方法线程安全吗?我在官方文档中找不到关于无状态 DMN 评估和线程安全的使用的信息。
解决方法
根据 Camunda 论坛中的回答,DmnEngine
和 DmnDecision
都应该是线程安全的:https://forum.camunda.org/t/re-use-caching-of-dmn-objects-in-multi-threaded-application/1576/2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。