2014-08-28 116 views
0

我在調查Camel是否滿足以下要求。要求是:傳入隊列上的消息順序應該與傳出隊列上的消息順序匹配。Apache Camel轉發和消息順序

我認爲這個問題歸結爲Camel如何將消息從傳入隊列轉發到傳出隊列的內部。

在簡單的例子,其中路徑看起來像這樣:

from("incomingQueue").to("outgoingQueue); 

和incomingQueue的有4個消息以開始與(已到達的順序):消息1,消息2,消息3,消息4。

有沒有保證或選擇告訴駱駝轉發郵件的方式保持原來的收貨順序?所以如果一個監聽者正在監聽外出隊列,它將接收到消息1,然後是消息2,然後是消息3,然後是消息4(假設一個線程接收器)。

感謝您的幫助。

回答

1

是的,如果你在路由上有一個單線程使用者,那麼它將一次移動一個消息在一個隊列中的順序。

+0

感謝您的答案克勞斯。所以駱駝作爲一個路由引擎可以保證在兩個端點之間移動消息(在我的情況下是隊列)保持源和目的地之間消息的順序。 Camel是否使用單個線程在兩個端點之間移動消息?它是可配置的嗎?你能指點我一個參考嗎? – techathon 2014-08-31 18:22:20

2

排隊先進先出。因此,在單線程的過程中,隊列#2將以與隊列#1相同的順序接收消息。如果您願意,大多數端點都可以將消費者減少到1。

如果您想讓消費者數量增加,那麼您可以在將消息放入隊列#2之前使用resequencer。在將消息放入隊列#1之前,您可以使用序列號填充標頭,然後隊列#2之前的再編程器將確保它們被重新排序

+0

謝謝達科他州。我明白隊列是第一次進入。我的問題主要是Camel作爲路由引擎如何在端點/隊列之間移動消息,以及路由本身是單線程還是多線程。我所見過的所有選項都與許多端點相關,如parallelProcessing(並行發送消息到許多端點)。我沒有看到從一個端點向另一個端點發送消息的並行處理選項(不包括類似splitter EIP的東西)。 – techathon 2014-08-31 18:21:34

+0

據我所知,路由默認是單線程的(由於消費者端點配置)。即使具有線程池的組件也默認爲1個併發使用者。如果您正在使用JMS組件(如上面的activeMQ),則可以通過在uri中設置concurrentConsumer參數來覆蓋此組件。這一切都取決於您使用的端點。 – 2014-09-03 15:35:35