2011-08-02 22 views
5

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

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

+0

是不是有没有人?我需要一些建议而不是完美的答案。 – Saurabh

回答

6

联邦快递的某些人在几年前参加的JavaOne会议上实际上呈现了类似的情况。

基本上,这个想法是,使用Drools Expert + Fusion对车辆位置数据执行CEP(复杂事件处理)。据我所知,车辆会周期性地(每隔几秒甚至几秒)发送GPS坐标给引擎(一个事件),然后这些引擎将被规则引擎消化,并且根据规则可以触发例如提高警报(“车辆停转”或“当然”)或发送通知(“车辆将在〜15分钟内到达目的地”)等某些动作。

(谷歌为"drools fusion cep vehicle tracking"揭示this演示文稿,其中应该给你一些细节,或至少提供一些见解。)

+0

感谢AlistairIsrael。看起来你分享的信息肯定会帮助我,因为它解决了同一个域名。 – Saurabh

2

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

我会建议你用车辆接收的所有数据作为对象,并将其存储在工作记忆中。

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

让Drools获得评估所需的数据并不是一个好习惯,但我看不出任何让Drools触发某些事件的问题,这些事件会将消息发送到车辆或其他系统。 (我想这应该发生异步,这样你就不会减慢Drools)事实上,Drools会让你连接一个eventlistener。

0

没有理由每15分钟运行一次。这会在触发器中引入延迟,并导致每15分钟的负载突发随后是空载。

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

您可以随心所欲地运行此操作。理想情况下,你不会等那么久,因为你等待的时间越长,你累积的工作就越多。

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

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

我认为你所考虑的所有方法都可以正常工作。