与GPS设备通信时实施规则检查的最佳方式

时间:2011-08-02 09:08:47

标签: java drools

我们正在开发车辆跟踪系统。像每个VTS一样,我们在车辆中安装了GPS设备,这些设备不断向服务器发送位置信息。在服务器上,我们的TCP通信器进程不断读取该数据并将其保存到数据库中   现在,我们需要检查一些规则来触发车辆的警报,例如,当车辆到达特定位置时,如果车辆超过特定的速度限制等,我们需要警报。   能否请您建议实施它的最佳方法?   我们已经想到了实现它的一些方法,   1.我们的TCP通信器在收到位置时,应检查警报。   2.将有一个流程每15分钟运行一次,并在15分钟内检查位置详细信息以进行提醒。

我正在寻找实施它的建议,逻辑方面以及技术方面。例如我们是否应该使用Drools?等等。

3 个答案:

答案 0 :(得分:6)

联邦快递的某些人在几年前参加的JavaOne会议上实际上提出了类似的内容。

基本上,我的想法是,使用Drools Expert + Fusion对车辆位置数据执行CEP(复杂事件处理)。

据我所知,车辆会定期(每隔几秒钟)将GPS坐标发送到引擎(事件),然后由规则引擎消化,并根据规则触发确定诸如提醒警报(“车辆停滞”或“不在路上”)或发送通知(“车辆将在约15分钟内到达目的地”)等行动。

(Google "drools fusion cep vehicle tracking"发布this演示文稿,该内容可为您提供更多详细信息或至少提供一些见解。)

答案 1 :(得分:2)

Drools工作的方式是,你在Drools的“工作记忆”中填写了很多对象。当您填写对象时,Drools将找出哪些规则“触发”对象并将对象存储在Rete-Tree中。当您完成将对象放入内存并触发所有规则后,Drools将处理您编写的与规则对应的代码。

我建议您制作一个对象,其中包含从规则中获取的所有数据,并将其放入工作记忆中。

在Drools中你应该制定许多小规则,每个规则只检查一件事并对结果采取行动。

让Drools获得评估所需的数据并不是一个好习惯,但是我不能看到让Drools触发某些事件的任何问题,这些事件会向车辆或其他系统发送消息。 (我想这应该是异步的,所以你不要放慢Drools的速度)事实上,Drools会让你联系一个eventlistener。

答案 2 :(得分:0)

没有理由每15分钟跑一次。这将引入触发器的延迟,并且每15分钟就会导致负载突发,然后是无负载时段。

您可以在数据库中拥有新警报规则和新位置数据的标志。扫描事件时,可以使用两遍方法。检查所有位置数据的所有新规则,并将其标记为新的。然后根据现有规则检查所有新位置数据,并将其标记为不再是新的。

您可以根据需要随时运行。理想情况下,你不会等那么久,因为你等待的时间越长,你积累的工作就越多。

至于让TCP通信器检查数据库定期接近扫描的相关警报,主要优点是警报是即时的。缺点是警报处理会减慢TCP通信器路径,并且您将被锁定为“一次更新意味着一次检查警报”模型。

在“扫描数据库”方法中,如果负载过高,您最多只能在高频更新源的每次更新中检查警报。这自然会通过减少所需的工作量来处理负载,但可能会导致错过警报。

我认为您正在考虑的所有方法都可以正常使用。