I'm using ActiveMQ Artemis 2.17.0. I want to change routing type exist queue via core API from Java client. I tried this:
...
QueueSession session = createSession(connection)
Message message = session.createMessage();
final QueueConfiguration queueConfiguration = new org.apache.activemq.artemis.api.core.QueueConfiguration('testQueue');
queueConfiguration.setRoutingType(org.apache.activemq.artemis.api.core.RoutingType.MULTICAST);
queueConfiguration.setAddress('testQueue');
queueConfiguration.setAutoCreateAddress(true);
JMSManagementHelper.putOperationInvocation(message, 'testQueue', 'updateQueue', queueConfiguration.toJSON());
Message reply = requestor.request(message);
I receive this error:
AMQ229069: no operation updateQueue/1
Also ClientSession
has methods createQueue
and deleteQueue
but not updateQueue
. How can I change a queue from the client API?
I found a solution. First, create an address with 2 routing-types, e.g.:
ClientSession session ...
...
session.createAddress(SimpleString.toSimpleString('testAddress'), EnumSet.allOf(RoutingType.class), false);
Next, create queue with this address:
final QueueConfiguration queueConfiguration = new QueueConfiguration('testQueue');
queueConfiguration.setRoutingType(RoutingType.ANYCAST);
queueConfiguration.setAddress('testAddress');
queueConfiguration.setAutoCreateAddress(false);
session.createQueue(queueConfiguration);
and exactly at this queue can change routing type
Queue managementQueue = session.createQueue(MANAGEMENT_QUEUE);
requestor = new QueueRequestor(session, managementQueue);
connection.start();
Message message = session.createMessage();
JMSManagementHelper.putOperationInvocation(message, 'broker', 'updateQueue', 'testQueue', 'MULTICAST', 2, false);
Message reply = requestor.request(message);