2013-12-17 181 views
2

我正在使用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

回答

3

可以標記交換停止,通過設置該屬性

exchange.setProperty(Exchange.ROUTE_STOP, true); 

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

...然後路由引擎不會繼續路由交換機,並且消費者將能夠儘快使用交換機作爲響應。