使用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&amp;throwExceptionOnFailure=false" /> 
    <to uri="http://server2:9090?bridgeEndpoint=true&amp;throwExceptionOnFailure=false" /> 
    <to uri="http://server3:9090?bridgeEndpoint=true&amp;throwExceptionOnFailure=false" /> 
</loadBalance> 

现在我想要实现使用Memcached的http请求缓存。为此,我尝试使用RoutePolicy。当有缓存命中时,是否有可能中断交换并从onExchangeBegin返回,而不会触及http端点?或者是否有更好的方法来使用Memcached实现对http请求的缓存?

我尝试了camel-cache组件,但是我们不能使用EHCache,因为我们已经在我们的项目中使用了Memcached。

+0

您的客户是直接访问servlet还是通过反向代理访问? – Ralf

+0

这是可能的两种方式。 – Joewyn

+0

如果您可以通过反向代理强制访问,那么可能是实现HTTP响应缓存的更好的地方。我认为你会获得更好的性能,因为如果你有缓存命中,你甚至不会去Java层。 – Ralf

可以标记交换停止,通过设置该属性

exchange.setProperty(Exchange.ROUTE_STOP, true); 

(这是如果你使用<停止/>是如何工作的路线)

...然后路由引擎不会继续路由交换机,并且消费者将能够尽快使用交换机作为响应。