Stoan Stoan - 1 month ago 37
Java Question

How to pause a queue in Activemq

I need to pause a queue in Activemq 5.13.2 inside an application and according to this post http://stackoverflow.com/a/32165140/1458556 it's possible with version 5.12 but I don't know how to implement it. Any Java code samples would be great.

@Test
public void testPauseQueue() throws Exception {
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url);
MBeanServerConnection conn = jmxc.getMBeanServerConnection();



ObjectName queue = new ObjectName("org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=testq");
QueueViewMBean mbean = MBeanServerInvocationHandler.newProxyInstance(conn, queue,QueueViewMBean.class, true);
System.out.println(mbean.isPaused());

}


Exception

at za.co.fnb.cii.relandheir.batch.inputprocessor.service.MessengerServiceTest.testPauseQueue(MessengerServiceTest.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:292)
at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: javax.management.InstanceNotFoundException: org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=testq

Answer

Seems like the names have changed from

  ObjectName queue = new ObjectName("org.apache.activemq:BrokerName=localhost,Type=Queue,Destination=testq");

to

  ObjectName queue = new ObjectName("org.apache.activemq:brokerName=localhost,destinationName=testq,destinationType=Queue,type=Broker");

Then worked perfectly after the change.

I discovered the newer name format with the REST Management API http://activemq.apache.org/rest.html

http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost