2009-04-13 67 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实例。

该解决方案只允许与虚拟机进行通信,不会打开任何外部端口。我假设这是你要找的内容,因为你说你想要嵌入式进程队列。