2015-05-09 21 views
1

我剛開始使用Apache Camel,我很好奇異步http客戶端(AHC)看似違反直覺的默認行爲。在使用ActiveMQ中的消息時,我無法讓它以非阻塞的方式進行操作。Camel ApacheMQ - > AHC行爲(阻止?)

我的路線是這樣的:

@Component 
public class Broadcaster extends RouteBuilder { 

    @Override 
    public void configure() throws Exception { 
    errorHandler(deadLetterChannel("activemq:failed.messages")); 

    from("activemq:outbound.messages") 
    .setExchangePattern(ExchangePattern.InOnly) 
    .recipientList(simple("ahc:${in.header[PublishDestination]}")) 
    .end(); 
    } 
} 

我入隊的幾個消息,其中一半我發送到延遲的web服務器,另一半到正常的。我期望看到所有快速服務器立即消耗的正常消息,並且隨着時間的推移慢慢消息逐漸消失。然而,這是快速的Web服務器上觀察到的行爲:

00:24:02.585, <hello>World</hello> 
00:24:03.622, <hello>World</hello> 
00:24:04.640, <hello>World</hello> 
00:24:05.658, <hello>World</hello> 

正如你可以看到有對應於緩慢的服務器上的人爲延遲1秒每一個登錄請求之間正好一秒。基於路徑的時序,它看起來像JMS消費者正在等待AHC完成它消耗掉隊列中的下一條消息之前:

Processor         Elapsed (ms) 
[activemq://outbound.messages   ] [  1020] 
[setExchangePattern[InOnly]    ] [   0] 
[ahc:${in.header[PublishDestination]}} ] [  1018] 

我應該在這些情況下明確地使用異步生產者和寫回調的句柄,還是有什麼我失蹤?謝謝!

回答

1

那麼,我想RTFM的情況下,儘管我的ActiveMQ頁面在可用於端點配置的屬性方面留下了很多不足之處。應該有一個說明可以說絕大多數(所有?)JMS配置選項也可用於ActiveMQ組件。在任何情況下,解決方案是定義消費者,如下所示:

from("activemq:outbound.messages?asyncConsumer=true") 
+0

請參閱ActiveMQ頁面上的_options_部分,基本上是說在一行文本中。 >請參閱JMS組件上的選項,因爲所有這些選項也適用於此組件。 –

+0

謝謝,撇脂是一個糟糕的習慣:) – Kosta