Newer
Older
java-lab / src / main / java / se / progic / javalab / AmqClient.java
@Marcus Bengtsson Marcus Bengtsson on 6 Nov 2 KB Session 1 cleanup
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);
        }
    }
}