Camel 2 中的 JCachePolicy

JCachePolicy in Camel 2

我想在我的 Camel 2.23.2 路由上实现一些内容缓存。在研究过程中,我遇到了 Camel 的 JCache 组件,它 according to the documentation 应该有一个 JCachePolicy 可以:

"The JCachePolicy is an interceptor around a route that caches the "result of the route" - the message body - after the route is completed. If next time the route is called with a "similar" Exchange, the cached value is used on the Exchange instead of executing the route."

这基本上正是我要找的。但是,事实证明此策略仅适用于 Camel 3.x 及更高版本。 所以我的问题是,如何在 Camel 2.23.2 中重新创建此功能?

解决方案非常简单。在 the Camel 3.x branch 中,策略包可用,其中只有两个文件。实际政策和处理者。

事实证明,在进行更多测试之前,这些文件只需稍加调整就可以很好地工作。

在策略中,您需要更改“wrap”和“beforeWrap”方法的方法定义。这些需要 routeContext,而不是 Route。但是从 RouteContext 移动到路由非常简单。 在处理器上,主要变化是为它扩展的“DelegateAsyncProcessor”使用正确的包。

通过这些更改,一切似乎都按记录工作。我在我的 pom 中使用了 ehcache spring boot starter,没有任何进一步的改变让它与 ehcache 一起工作,因为它是缓存管理器。

还有一点,当你想使用这个的时候,你想要缓存的模型需要是可序列化的。