我正在嘗試學習activemq +駱駝以便將其應用於真實世界。我需要消費一個隊列,處理消息並將其移動到另一個隊列。JMS隊列輪詢示例
我關心的表現。我需要每天處理至少100.000條消息。現在我不想處理垂直或水平縮放(我們不能花更多的錢,直到人們確信技術是好的)。
所以,我想到了開始幾個線程,它將輪詢隊列,消耗,處理和移動消息到其他隊列。線程的數量取決於硬件如何響應負載的增加。
我的第一個問題是:這是一個很好的方法(啓動paralel線程消耗隊列)?
我的第二個問題是:我從閱讀Camel In Action開始學習。我不知道我是否錯過了一些東西,但是我對如何建立消費者有點困惑。通過修改FtpToJMSExample書籍示例,我提出了代碼如下。在現實世界中,我不會爲每個線程創建連接。我將使用應用程序服務器(glassfish)提供的連接池。
public class JMSToJMSExample {
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");
context.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
context.addRoutes(new RouteBuilder() {
public void configure() {
from("jms:in")
.process(new CustomProcessor())
.to("jms:out");
} });
context.start();
Thread.sleep(10000);
context.stop();
}
}
它工作正常。但是,這本書稱之爲「投票」解決方案。我期待的是類似於while循環的東西,所以當隊列中有消息時,它會持續消耗。好的,這個例子是輪詢一個隊列,但我的觀點與上面的例子是,如果我減少睡眠時間,它會退出,而不處理它可能的所有消息。
但無論如何,我認爲最好是建立一個長時間運行的線程,而不是每次線程喚醒時都要求連接池給我一個連接。
請問,既然我在學習,你可以舉一些如何創建一個線程輪詢jms隊列直到它變空,而不是按時間/週期輪詢的例子嗎?
TIA,
鮑勃