使用apache缓存http请求骆驼
问题描述:
我正在使用apache camel 2.12.2为http请求构建一个负载均衡器。为此,我现在用骆驼的servlet,骆驼HTTP组件和我的路由定义是这样的:使用apache缓存http请求骆驼
<from uri="servlet:///my/path?matchOnUriPrefix=true" />
<loadBalance inheritErrorHandler="false">
<failover roundRobin="true" maximumFailoverAttempts="2">
<exception>java.io.IOException</exception>
</failover>
<to uri="http://server1:9090?bridgeEndpoint=true&throwExceptionOnFailure=false" />
<to uri="http://server2:9090?bridgeEndpoint=true&throwExceptionOnFailure=false" />
<to uri="http://server3:9090?bridgeEndpoint=true&throwExceptionOnFailure=false" />
</loadBalance>
现在我想要实现使用Memcached的http请求缓存。为此,我尝试使用RoutePolicy。当有缓存命中时,是否有可能中断交换并从onExchangeBegin返回,而不会触及http端点?或者是否有更好的方法来使用Memcached实现对http请求的缓存?
我尝试了camel-cache组件,但是我们不能使用EHCache,因为我们已经在我们的项目中使用了Memcached。
答
可以标记交换停止,通过设置该属性
exchange.setProperty(Exchange.ROUTE_STOP, true);
(这是如果你使用<停止/>是如何工作的路线)
...然后路由引擎不会继续路由交换机,并且消费者将能够尽快使用交换机作为响应。
您的客户是直接访问servlet还是通过反向代理访问? – Ralf
这是可能的两种方式。 – Joewyn
如果您可以通过反向代理强制访问,那么可能是实现HTTP响应缓存的更好的地方。我认为你会获得更好的性能,因为如果你有缓存命中,你甚至不会去Java层。 – Ralf