package se.progic.javalab;
import java.util.Optional;
import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
import org.apache.activemq.artemis.api.core.client.ClientMessage;
import org.apache.activemq.artemis.api.core.client.ClientRequestor;
import org.apache.activemq.artemis.api.core.client.ClientSession;
import org.apache.activemq.artemis.api.core.client.ClientSessionFactory;
import org.apache.activemq.artemis.api.core.client.ServerLocator;
import org.apache.activemq.artemis.api.core.management.ManagementHelper;
import org.apache.activemq.artemis.api.core.management.ResourceNames;
public class AmqClient {
public static final String REQUEST_ADDRESS = "activemq.management";
public static final String LIST_QUEUES_OPERATION = "listQueues";
public String createConnectionString(final String... urls) {
return Optional.ofNullable(urls)
.filter(ss -> ss.length > 0)
.map(ss -> String.format("(%s)", String.join(",", ss)))
.orElseThrow(() -> new CliException("URL's must not be empty"));
}
public String listQueues(final String connectionString, final String username, final String password) {
try (final ServerLocator locator = ActiveMQClient.createServerLocator(connectionString);
final ClientSessionFactory sessionFactory = locator.createSessionFactory();
final ClientSession session = sessionFactory.createSession(username,
password,
false,
true,
true,
false,
0);
final ClientRequestor requestor = new ClientRequestor(session, REQUEST_ADDRESS)) {
session.start();
final ClientMessage queueInfoReq = session.createMessage(false);
ManagementHelper.putOperationInvocation(queueInfoReq,
ResourceNames.BROKER,
LIST_QUEUES_OPERATION,
null,
1,
Long.MAX_VALUE);
final ClientMessage response = requestor.request(queueInfoReq);
return (String) ManagementHelper.getResult(response);
} catch (final Exception e) {
throw new CliException(e);
}
}
}