Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建规则引擎的最佳设计模式_Java_Design Patterns_Rule Engine_Stream Processing - Fatal编程技术网

Java 创建规则引擎的最佳设计模式

Java 创建规则引擎的最佳设计模式,java,design-patterns,rule-engine,stream-processing,Java,Design Patterns,Rule Engine,Stream Processing,假设我必须设计一个规则引擎,其中根据静态配置规则,责任链在运行时发生变化。实现这个问题的最佳设计模式是什么 例如,g。根据某些配置,流中的一组事件可以(1)过滤,(2)划分为子集(3)修改 对于每个流,客户可以选择3个流中的所有流,或者三个流中的一些流,或者三个流中的任何一个流 因此,我的程序集管道应该在运行时根据每个流的配置进行配置 实现这一目标的最佳设计模式是什么?我不确定我是否理解您的用例,但有些开源项目似乎正是您所需要的 首先,您有,它允许您配置路由(静态和/或动态)。通过这种方式,您可

假设我必须设计一个规则引擎,其中根据静态配置规则,责任链在运行时发生变化。实现这个问题的最佳设计模式是什么

例如,g。根据某些配置,流中的一组事件可以(1)过滤,(2)划分为子集(3)修改

对于每个流,客户可以选择3个流中的所有流,或者三个流中的一些流,或者三个流中的任何一个流

因此,我的程序集管道应该在运行时根据每个流的配置进行配置


实现这一目标的最佳设计模式是什么?

我不确定我是否理解您的用例,但有些开源项目似乎正是您所需要的

首先,您有,它允许您配置路由(静态和/或动态)。通过这种方式,您可以根据配置的路由通过管道的每个组件路由事件流

作为Camel的替代或补充,和是两个进行复杂事件处理(即事件过滤、关联、分离等)的开源项目。它们都支持动态添加/删除规则/查询。因此,您不必更改路由,例如,您可以将一条路由设置为Drools/Esper会话,而只需根据配置添加/删除规则/查询,即可完成所需操作


在我看来,您不需要创建“规则引擎”。你可以使用现有的东西。

你似乎陷入了一个陷阱,认为一切都是由设计模式解决的。告诉我们您提出了什么设计……我正在考虑使用一个规则引擎对象,它将所有流传递给队列。链中的第一个是过滤,第二个是修改,第三个是分区。如果没有为流配置特定的操作,它只会将流传递到管道中的下一个。这意味着我总是静态地为所有3个操作配置规则引擎。想知道是否有一种方法可以为流配置装配线,并根据需要为该特定操作动态地拾取和选择操作stream@MitchWheat:这不是陷阱,它本身就是一种设计模式:设计模式。