Пример производителя/потребителя ActiveMQ в процессе?

StackOverflow https://stackoverflow.com/questions/744077

  •  09-09-2019
  •  | 
  •  

Вопрос

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

configureBroker ()
broker.start ()

createProducer (broker)
producer.start ()

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

waitForSignal ()
signalProducerShutdown ()

waitForEmptyQueues ()
signalConsumerShutdown ()

broker.stop ()

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

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

Это было полезно?

Решение

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

Например,

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top