我有两个系统,称它们为A和B. 当A,A中的某些重要对象更改通过Apache Camel发送给B时。 但是,我遇到了一种情况,当A实际上有对象的更改日志,而B必须只反映对象的实际状态。 此外,A中的更改日志可以包含“将来”记录。这意味着,对象的状态改变将在未来的某个时刻进行。 系统A的用户可以编辑此更改日志,删除更改记录,添加带有任何时间戳记(过去和未来)的新更改记录,甚至更新现有更改。 当然,A将这些更改记录发送给B,但B只需要对象的实际状态。在Apache Camel中将更改日志转换为实际状态
请注意,我可以从A查询对象,但A是性能关键系统,因此我不会查询某些内容,因为它可能会导致额外的负载。 此外,从A查询数据的API过于复杂,我希望尽可能避免使用它。
我可以在这里看到两个问题。 首先是实现更改日志记录中的特定更改是否可能导致更改实际状态。 我打算将更改日志存储在中间数据库中。 随着更改日志记录的到来,我将在中间数据库中添加/删除/更新它,然后计算对象的实际状态并将此状态发送给B.
其次是跟踪更改计划。 除了在固定的时间间隔内运行定期作业(比如15分钟),我无法发明任何东西。 此作业将扫描从上次调用到当前调用的时间间隔内的所有记录。
我喜欢Apache Camel for是基于组件的方法,当您只需要连接端点并获得所有工作,只需少量编码即可。 在Apache Camel和EIP中,这个问题是否有预先存在的原语?
你说API查询来自A的数据过于复杂。你打算如何从A获取数据? A有没有推送机制?你打算直接访问A的仓库吗?你打算修改A吗?如果是这样,为什么不添加更好的API来查询缓存机制来保护性能? – Sergey 2014-10-10 07:00:09
当A检测到某个实体发生了变化时,它会将其序列化为XML并将其写入文件系统中的文件中。我使用以下消费者:'<从uri =“ftp://路径到目录”>'。另外,A有一个推送所有数据的机制,我将用它来初始加载数据。我没有A的代码,我也不能影响它的查询API,也不能缓存缓存。此外,这也是一个政策问题:如果我能证明这辆公交车不会影响A的性能,那么说服A的车主更容易接受集成巴士。 – 2014-10-10 07:10:40
你的情况不是微不足道的,我不相信你可以找到任何银弹解决方案。最接近的组件AFAIK是http://camel.apache.org/cache.html。如果不适合,您可以随时使用基于数据库的解决方案,使用Camel提供的所有额外服务,例如交易,监控等 – Sergey 2014-10-10 08:13:39