2009-04-13 104 views
2

我正在研究在我的 應用程序中使用ActiveMQ作爲嵌入式進程內消息隊列,但我對如何着手啓動這樣的應用程序 起了一點作用。我想象它像這樣(僞代碼,當然):進行中的ActiveMQ生產者/消費者的例子?

configureBroker() 
broker.start() 

createProducer (broker) 
producer.start() 

for each desired consumer 
    createConsumer (broker) 
    consumer.start() 

waitForSignal() 
signalProducerShutdown() 

waitForEmptyQueues() 
signalConsumerShutdown() 

broker.stop() 

我試着組裝的這一個簡單的版本,但我卡在如何寫 的生產者和消費者以這樣一種方式讓他們永遠工作,或 直到被告知退出。做這個的最好方式是什麼?我具體講講線程方面的問題;我需要/想要在自己的線程中產生什麼,等等......

我完全不熟悉基於消息隊列的應用程序,因此請對您的示例進行詳細說明。

回答

3

當您指定ActiveMQConnectionFactory時,您可以指定「vm://」,其中name是代理的特定於虛擬機內部的名稱,它將啓動虛擬機內的代理。

例如,

String broker = "vm://stackOverflowTest"; 
ActiveMQConnectionFactory connectionFactory = 
     new ActiveMQConnectionFactory(broker); 
Connection amqcon = connectionFactory.createConnection(); 
amqcon.start(); 

從那裏,你可以創建你的生產者或消費者一樣的,如果它是在網絡上。只要您爲代理使用相同的名稱,就可以將多個線程/代碼打開/討論到同一個VM實例。

該解決方案只允許與虛擬機進行通信,不會打開任何外部端口。我假設這是你要找的內容,因爲你說你想要嵌入式進程隊列。