2012-05-29 7 views
2

Я хочу создать простую потребительскую программу (в java), чтобы получить все сообщения, хранящиеся в субъекте ActiveMQ. У меня есть продюсер, который отправляет TextMessage в очередь.Как получить все выделенные сообщения в ActiveMQ?

Но я не знаю, как начать писать свой потребитель для получения старых сообщений и ждать нового.

Если у вас есть пример, спасибо!

Это мой продюсер: http://pastebin.com/uRy9D8mY

Это мой потребитель: http://pastebin.com/bZh4r66e

Когда я запускаю мой продюсер перед моим потребителем, а затем запустить потребитель, я не получил ничего. Когда я запускаю мой потребитель тогда мой продюсер, я добавляю 72 сообщений в очереди, но мой потребитель получил только 24 сообщение ...

ответ

3

Я предлагаю читать этот учебник (как Apache ActiveMQ) SUN Jms tutorial

Есть много способы написания программ JMS/ActiveMQ с использованием различных фреймворков, таких как Spring, или с помощью простой java.

По существу, написать класс слушателя, как это:

public class MyListener implements MessageListener{ 
    public void onMessage(Message message){ 
     // Read and handle message here. 
    } 
} 

Поскольку вы уже выпускаем сообщение, я предполагаю, что у вас есть подключение и управление.

session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
consumer = session.createConsumer("MyQueue"); 
listener = new MyListener(); 
consumer.setMessageListener(listener); 
connection.start(); 
// At this point, messages should arrive from the queue to your listener. 

Тогда есть какая-то ошибка код обработки не включен в данном примере, но вы должны быть в состоянии понять это с помощью учебника и JMS документации.

+0

Спасибо! Я следил за учебником Sun jms Tutorial, но у меня возникли две проблемы: я не могу получать сообщения, которые уже находятся в очереди, и когда я жду новых сообщений, я получаю только 24 на 72 сообщения. – kdelemme

+0

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

+0

Я добавляю код потребителя и производителя. Я использую ActiveMQ со стандартным conf. – kdelemme

1

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

  • В этом коде цикл while представляет собой бесконечный цикл, который будет перебирать все сообщения в очереди.
  • После того, как в очереди нет сообщений, он будет ждать 5 секунд, а затем автоматически остановит соединение и разрывает цикл.

Если вам нужен нескончаемый потребитель, который будет читать все сообщения, когда только что добавлен в очередь, затем удалите часть else, чтобы программа не завершилась.

ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616"); 
    Connection con = factory.createConnection(); 
    Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    Queue queue = session.createQueue("tmp_queue2"); 
    MessageConsumer consumer = session.createConsumer(queue); 
    con.start();  
    while (true) {  
     Message msg = consumer.receive(5000); 
     if (msg instanceof TextMessage) { 
      TextMessage tm = (TextMessage) msg; 
      System.out.println(tm.getText());  
     } 
     else{ 
      System.out.println("Queue Empty"); 
      con.stop(); 
      break; 
     } 
    } 

Надежда эта потребительская программа будет помогает людям, которые были новыми для ActiveMQ.

Смежные вопросы