Пример действующего производителя / потребителя ActiveMQ? - PullRequest
2 голосов
/ 13 апреля 2009

Я исследую использование ActiveMQ в качестве встроенной очереди сообщений в моем приложение, но я немного застрял на том, как я запускаю такое приложение вверх. Я представляю это так (псевдокод, конечно):

configureBroker ()
broker.start ()

createProducer (broker)
producer.start ()

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

waitForSignal ()
signalProducerShutdown ()

waitForEmptyQueues ()
signalConsumerShutdown ()

broker.stop ()

Я пытался собрать простую версию этого, но я застрял на том, как написать производители и потребители таким образом, чтобы они работали вечно, или пока не сказали бросить. Каков наилучший способ сделать это? Я говорю конкретно об аспекте потоков; что мне нужно / нужно порождать в своем собственном потоке и т.д ...

Я совершенно новичок в приложениях на основе очереди сообщений, поэтому, пожалуйста, будьте подробны с вашими примерами.

1 Ответ

3 голосов
/ 03 декабря 2009

Когда вы указываете ActiveMQConnectionFactory, вы можете указать «vm: //», где name - это имя вашего брокера с именем intra-vm, и оно запустит брокера внутри виртуальной машины.

Например,

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

Оттуда вы можете создавать своих производителей или потребителей так же, как если бы это было по сети. Пока вы используете одно и то же имя для посредника, вы можете открывать несколько потоков / кодов / общаться с одним и тем же экземпляром виртуальной машины.

Это решение позволяет только связь с виртуальной машиной, оно не открывает никаких внешних портов. Я предполагаю, что это то, что вы искали, так как сказали, что хотите встроенные очереди в процессе.

...