2011-05-18 167 views
1

我想使用一些機制來做這樣的事情 - 我有一個應用程序服務器獲取處理訂單的請求。一個請求可以有一個訂單或兩個訂單。爲了處理訂單,應用程序需要打電話給外部供應商,供應商可以一次處理最多5個訂單。我想創建一個組件,最多可以批量處理5個訂單(如果可用),並向供應商發出一個請求,然後當我收到響應時,將響應重新分配給適當的請求。在第一個請求到達之前,組件會等待2秒鐘,然後才發出批量請求。使用java排隊和批量請求

我想過使用JMS,但在JMS中,消費者一旦到達並且消費者一次處理一條消息,就會處理消息(訂單)。我正在考慮使用常規隊列(ArrayBlockingQueue)並在使用ScheduledTimerTask進行觸發前對訂單進行批處理。有沒有人有任何想法 - 預先感謝。

+0

您是否嘗試實施此解決方案?你有沒有遇到任何具體問題? – Olaf 2011-05-18 15:01:04

回答

1

你所描述的大部分可以用Apache Camel完成。它可以配置爲調節,批量轉發請求。

Aggregator做什麼「爲X的消息最長等待再往前要求」

+0

感謝您的回覆。我從來沒有使用Apache Camel,我聽說這種ESB類型的解決方案很慢 - 你是否知道任何性能問題。你知道是否可以用Mule做同樣的事情 - 他們正在考慮在我們公司使用Mule做其他事情。我想他們可能不想同時支持駱駝和騾。 – user759326 2011-05-18 23:03:14

+0

我從來沒有聽說有人說駱駝很慢,但聽說你問這件事在這種情況下聽起來有點奇怪。如果在發送請求之前等待一定數量的消息(在延遲的情況下,而不是吞吐量),則一切都將「慢」 – Kaj 2011-05-19 06:14:01

0

沒有什麼使用JMS阻止你。只需對從隊列中提取的操作設置超時時間,並且當您有5條消息或超時時間時,即可處理該批處理。

+0

如果我使用JMS,我認爲每個消息都將由單獨的消費者處理,具體取決於許多我配置。如果我在消費者中設置了超時,如果它沒有收到第二條消息並且另一位消費者收到它,它會有什麼幫助 – user759326 2011-05-18 16:46:22

+0

例如,查看http://static.springsource.org/spring/docs/中的jmsTemplate 3.1.0.M1/javadoc-api /讓一些代碼調用receive方法5次,收集某種集合中的消息,做一批,然後調用api – Buhb 2011-05-18 18:03:29