2009-04-13 4 views
2

Ich untersuche mit ActiveMQ als eingebettete in-Prozess-Nachrichtenwarteschlange in meiner Anwendung, aber ich bin ein bisschen fest, wie ich gehe über eine solche Anwendung starten. Ich sehe es wie so (Pseudo-Code, natürlich):In-Prozess ActiveMQ Produzent/Verbraucher Beispiel?

configureBroker() 
broker.start() 

createProducer (broker) 
producer.start() 

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

waitForSignal() 
signalProducerShutdown() 

waitForEmptyQueues() 
signalConsumerShutdown() 

broker.stop() 

Ich habe versucht, eine einfache Version davon zu montieren, aber ich bin fest, wie die Produzenten und Konsumenten so schreiben, wie um sie für immer arbeiten zu lassen, oder bis gesagt, um zu beenden. Was ist der beste Weg, dies zu tun? Ich spreche speziell über den Threading-Aspekt; Was brauche ich/möchte ich in einem eigenen Thread spawnen?

Ich bin völlig neu in Nachrichtenwarteschlangen-basierten Anwendungen, also seien Sie bitte ausführlich mit Ihren Beispielen.

Antwort

3

Wenn Sie die ActiveMQConnectionFactory angeben, können Sie "vm: //" angeben, wobei name der intra-vm-spezifische Name Ihres Brokers ist und der Broker innerhalb der VM gestartet wird.

Zum Beispiel

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

Von dort können Sie Ihre Produzenten oder Konsumenten das gleiche schaffen, als ob es über das Netzwerk war. Solange Sie denselben Namen für den Broker verwenden, können Sie mehrere Threads/Code mit derselben VM-Instanz öffnen/sprechen.

Diese Lösung ermöglicht nur die Kommunikation mit der VM, sie öffnet keine externen Ports. Ich gehe davon aus, dass Sie das suchen, seit Sie gesagt haben, dass Sie eingebettete Queue-Prozesse wünschen.