Search code examples
javaqueuejmsactivemq-classic

Get all delayed message from ActiveMQ Classic Scheduled tab


I am performing tests in which I need to extract all delayed messages (tab scheduled in ActiveMQ Classic gui). Is this possible in ActiveMQ Classic? I write tests in Java.

I expect to consume every delayed message (not consumed)

Destination management = session.createTopic(ScheduledMessage.AMQ_SCHEDULER_MANAGEMENT_DESTINATION);
MessageProducer mproducer = session.createProducer(management);
Message request = session.createMessage();
request.setStringProperty(ScheduledMessage.AMQ_SCHEDULER_ACTION, ScheduledMessage.AMQ_SCHEDULER_ACTION_BROWSE);
mproducer.send(request);

Destination browseDest = session.createTemporaryQueue();
MessageConsumer browser = session.createConsumer(browseDest);
Message scheduled = browser.receive(5000);

Solution

  • You need to create the destination and consumer where the broker will send the message to prior to sending the message to the scheduler management address so that you can assign the address where the messages are sent to the message's reply to destination.

    Destination browseDest = session.createTemporaryQueue();
    MessageConsumer browser = session.createConsumer(browseDest);
    
    Destination management = session.createTopic(ScheduledMessage.AMQ_SCHEDULER_MANAGEMENT_DESTINATION);
    MessageProducer mproducer = session.createProducer(management);
    Message request = session.createMessage();
    
    request.setJMSReplyTo(browseDest);
    request.setStringProperty(ScheduledMessage.AMQ_SCHEDULER_ACTION,
                              ScheduledMessage.AMQ_SCHEDULER_ACTION_BROWSE);
    
    mproducer.send(request);
    
    Message scheduled = browser.receive(5000);