In-process ActiveMQ produttore / consumatore esempio?
Domanda
Sto indagando utilizzando ActiveMQ come una coda di messaggio incorporato in-process nel mio applicazione, ma io sono un po 'bloccato su come posso fare per iniziare una tale domanda su. Mi immagino che in questo modo (pseudocodice, ovviamente):
configureBroker ()
broker.start ()
createProducer (broker)
producer.start ()
for each desired consumer
createConsumer (broker)
consumer.start ()
waitForSignal ()
signalProducerShutdown ()
waitForEmptyQueues ()
signalConsumerShutdown ()
broker.stop ()
Ho provato a montare una semplice versione di questo, ma io sono bloccato su come scrivere i produttori ed i consumatori in un modo tale da farli lavorare per sempre, o fino a quando ha detto di smettere. Qual è il modo migliore per farlo? Sto parlando in particolare circa l'aspetto threading; che cosa ho bisogno / voglia di deporre le uova fuori nel proprio thread, ecc ...
Sono completamente nuovo per le applicazioni basate su coda di messaggi, quindi cerca di essere prolisso con i tuoi esempi.
Soluzione
Quando si specifica l'ActiveMQConnectionFactory, è possibile specificare "vm: //", dove nome è il nome specifico intra-VM del vostro broker e inizierà il broker all'interno della VM.
Ad esempio,
String broker = "vm://stackOverflowTest";
ActiveMQConnectionFactory connectionFactory =
new ActiveMQConnectionFactory(broker);
Connection amqcon = connectionFactory.createConnection();
amqcon.start();
Da lì è possibile creare i produttori o consumatori lo stesso come se fosse sulla rete. Finché si utilizza lo stesso nome per il broker, è possibile avere più thread / codice open / parlare alla stessa istanza VM.
Questa soluzione consente solo la comunicazione con la VM, esso non apre alcuna porta esterni. Sto assumendo questo è ciò che stavate cercando da quando hai detto che volevi incorporati, le code in-process.