0

我在现场机器人领域工作,我们有一个中央服务器跟踪与车辆状态、环境状态、任务、任务分组等有关的一大堆数据。有处理这些数据的不同部分的过程,以及需要在特定部分发生变化时更新的用户界面。

我想要的是一种系统连接到中央服务器并订阅部分数据的方式。他们将所有数据通过管道传输给他们,并在发生更改时发送任何更改。此外,我希望能够提名某些更新可以合并:如果车辆移动了 3 次,但连接的 UI 没有太多带宽,而不仅仅是发送最新的位置。

目前我正在考虑一个内存数据库,它跟踪客户端订阅查询并计算发送给他们的增量。是否有更好的方法或现有的解决方案来分发数据模型?

4

2 回答 2

2

您可能需要一个元组空间。在 java 中,有JavaSpaces,它是Jini的一部分。我不知道它是否支持开箱即用的更改通知,或者您是否必须自己添加某种通知。

于 2009-08-18T11:01:34.887 回答
0

在这种情况下,我可能会(有点)使用Apache ServiceMix。使用面向消息的中间件只会使您的项目受益。

从非常高级的角度描述我的解决方案:

在我看来,当稍微抽象一下问题时,我们谈论的是发生的事件,这些事件需要根据(业务)规则进行处理。根据这些业务规则,需要同步或异步通知其他通信伙伴。

因此,当事件发生时,您的各个站点可以向 ServiceMix的ActiveMQ组件发送相当简单的 JMS 消息。然后在ApacheCamel上运行的业务逻辑将读取这些消息并进行处理。Camel 组件为企业集成模式提供了丰富的功能集。在这里实现业务逻辑相当简单明了。需要通知的站可以订阅 JMS 队列或主题,具体取决于用例,或者通过自定义或许多现有连接器数据格式之一同步。提示:发送协议缓冲区通过 JMS 或 AMQP 可以相对容易地用 C 或 C++ 实现。这应该允许工作站上的高效代码,同时消除对 JVM 的依赖。

通过使用 ServiceMix 设置,您可以获得各种优势:

  • 使用 JMS 进行异步通信时,事件和计算数据的持久通知和订阅 - 如果设置正确,则不会丢失任何事件,这可能不是基于 RAM 的解决方案的情况。
  • 实战测试环境,随时可用
  • 易于维护:如果应用程序规划得当,可以在很少(几分之一秒)甚至没有停机时间的情况下推出业务逻辑更新。这是因为业务逻辑将作为OSGi 包实现,并且可以优雅地处理这些包的替换。
  • 易于开发:不需要开发整个应用程序,您只需要实现业务逻辑、将消息发送到 ActiveMQ 的软件和您的域模型。
  • 无缝集成到现有 SOA
  • 通过设计,复杂的问题被分解成各种更小的问题,这可能会增强稳定性并完美匹配敏捷开发过程
于 2015-11-13T18:32:31.903 回答