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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top