Pregunta

Estoy investigando el uso de ActiveMQ como una cola de mensajes en proceso incrustado en mi aplicación, pero estoy un poco atascado en cómo hago para iniciar una aplicación, tales arriba. Me imagino que como tal (pseudocódigo, por supuesto):

configureBroker ()
broker.start ()

createProducer (broker)
producer.start ()

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

waitForSignal ()
signalProducerShutdown ()

waitForEmptyQueues ()
signalConsumerShutdown ()

broker.stop ()

He tratado de montar una versión simple de esto, pero estoy atascado en la forma de escribir los productores y consumidores de una manera tal que haga que trabajen para siempre, o hasta que se le para dejar de fumar. ¿Cuál es la mejor manera de hacer esto? Estoy hablando específicamente sobre el aspecto de roscado; ¿qué necesito / quiero para desovar fuera en su propio hilo, etc ...

Estoy completamente nuevo para las aplicaciones basadas en la cola de mensajes, así que por favor sea lo más detallada con sus ejemplos.

¿Fue útil?

Solución

Cuando se especifica el ActiveMQConnectionFactory, puede especificar "vm: //", donde nombre es el nombre específico dentro de la máquina virtual de su corredor y se iniciará el corredor dentro de la máquina virtual.

Por ejemplo,

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

Desde allí se puede crear sus productores o consumidores de la misma como si fuera por la red. Como siempre y cuando utilice el mismo nombre para el corredor, puede tener múltiples hilos / código abierto / hablar a la misma instancia de VM.

Esta solución sólo permite la comunicación con la máquina virtual, no se abre ninguna puertos externos. Estoy asumiendo que esto es lo que estabas buscando, ya que dijo que quería incrustado, colas en proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top