Search in sources :

Example 26 with Queue

use of org.apache.activemq.artemis.core.server.Queue in project activemq-artemis by apache.

the class JMSQueueBrowserTest method testBrowseAllInQueueTxSession.

@Test(timeout = 40000)
public void testBrowseAllInQueueTxSession() throws Exception {
    Connection connection = createConnection();
    connection.start();
    Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
    assertNotNull(session);
    javax.jms.Queue queue = session.createQueue(getQueueName());
    sendMessages(name.getMethodName(), 5, false);
    Queue queueView = getProxyToQueue(getQueueName());
    Wait.assertEquals(5, queueView::getMessageCount);
    QueueBrowser browser = session.createBrowser(queue);
    assertNotNull(browser);
    Enumeration<?> enumeration = browser.getEnumeration();
    int count = 0;
    while (enumeration.hasMoreElements()) {
        Message msg = (Message) enumeration.nextElement();
        assertNotNull(msg);
        LOG.debug("Recv: {}", msg);
        count++;
    }
    assertFalse(enumeration.hasMoreElements());
    assertEquals(5, count);
}
Also used : TextMessage(javax.jms.TextMessage) Message(javax.jms.Message) Connection(javax.jms.Connection) JmsConnection(org.apache.qpid.jms.JmsConnection) Queue(org.apache.activemq.artemis.core.server.Queue) QueueBrowser(javax.jms.QueueBrowser) Session(javax.jms.Session) Test(org.junit.Test)

Example 27 with Queue

use of org.apache.activemq.artemis.core.server.Queue in project activemq-artemis by apache.

the class JMSQueueBrowserTest method testQueueBrowserInTxSessionLeavesOtherWorkUnaffected.

@Test(timeout = 40000)
public void testQueueBrowserInTxSessionLeavesOtherWorkUnaffected() throws Exception {
    Connection connection = createConnection();
    connection.start();
    Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
    assertNotNull(session);
    javax.jms.Queue queue = session.createQueue(getQueueName());
    sendMessages(name.getMethodName(), 5, false);
    Queue queueView = getProxyToQueue(getQueueName());
    Wait.assertEquals(5, queueView::getMessageCount);
    // Send some TX work but don't commit.
    MessageProducer txProducer = session.createProducer(queue);
    for (int i = 0; i < 5; ++i) {
        txProducer.send(session.createMessage());
    }
    assertEquals(5, queueView.getMessageCount());
    QueueBrowser browser = session.createBrowser(queue);
    assertNotNull(browser);
    Enumeration<?> enumeration = browser.getEnumeration();
    int count = 0;
    while (enumeration.hasMoreElements()) {
        Message msg = (Message) enumeration.nextElement();
        assertNotNull(msg);
        LOG.debug("Recv: {}", msg);
        count++;
    }
    assertFalse(enumeration.hasMoreElements());
    assertEquals(5, count);
    browser.close();
    // Now check that all browser work did not affect the session transaction.
    assertEquals(5, queueView.getMessageCount());
    session.commit();
    assertEquals(10, queueView.getMessageCount());
}
Also used : TextMessage(javax.jms.TextMessage) Message(javax.jms.Message) Connection(javax.jms.Connection) JmsConnection(org.apache.qpid.jms.JmsConnection) MessageProducer(javax.jms.MessageProducer) Queue(org.apache.activemq.artemis.core.server.Queue) QueueBrowser(javax.jms.QueueBrowser) Session(javax.jms.Session) Test(org.junit.Test)

Example 28 with Queue

use of org.apache.activemq.artemis.core.server.Queue in project activemq-artemis by apache.

the class JMSQueueBrowserTest method testCreateQueueBrowser.

@Test(timeout = 40000)
public void testCreateQueueBrowser() throws Exception {
    Connection connection = createConnection();
    connection.start();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    assertNotNull(session);
    javax.jms.Queue queue = session.createQueue(getQueueName());
    session.createConsumer(queue).close();
    QueueBrowser browser = session.createBrowser(queue);
    assertNotNull(browser);
    Queue queueView = getProxyToQueue(getQueueName());
    assertEquals(0, queueView.getMessageCount());
}
Also used : Connection(javax.jms.Connection) JmsConnection(org.apache.qpid.jms.JmsConnection) Queue(org.apache.activemq.artemis.core.server.Queue) QueueBrowser(javax.jms.QueueBrowser) Session(javax.jms.Session) Test(org.junit.Test)

Example 29 with Queue

use of org.apache.activemq.artemis.core.server.Queue in project activemq-artemis by apache.

the class ExpireTestOnRestartTest method testRestartWithExpire.

// The biggest problem on this test was the exceptions that happened. I couldn't find any wrong state beyond the exceptions
@Test
public void testRestartWithExpire() throws Exception {
    int NUMBER_OF_EXPIRED_MESSAGES = 1000;
    ServerLocator locator = createInVMNonHALocator();
    locator.setBlockOnDurableSend(false);
    ClientSessionFactory factory = locator.createSessionFactory();
    ClientSession session = factory.createSession(true, true);
    session.createQueue("test", "test", true);
    session.createQueue("exp", "exp", true);
    ClientProducer prod = session.createProducer("test");
    for (int i = 0; i < 10; i++) {
        ClientMessage message = session.createMessage(true);
        message.getBodyBuffer().writeBytes(new byte[1024 * 10]);
        prod.send(message);
    }
    for (int i = 0; i < NUMBER_OF_EXPIRED_MESSAGES; i++) {
        ClientMessage message = session.createMessage(true);
        message.putIntProperty("i", i);
        message.getBodyBuffer().writeBytes(new byte[1024 * 10]);
        message.setExpiration(System.currentTimeMillis() + 5000);
        prod.send(message);
    }
    session.commit();
    session.close();
    server.stop();
    server.getConfiguration().setMessageExpiryScanPeriod(1);
    // enough time for expiration of the messages
    Thread.sleep(5500);
    server.start();
    Queue queue = server.locateQueue(SimpleString.toSimpleString("test"));
    factory = locator.createSessionFactory();
    session = factory.createSession(false, false);
    ClientConsumer cons = session.createConsumer("test");
    session.start();
    for (int i = 0; i < 10; i++) {
        ClientMessage msg = cons.receive(5000);
        assertNotNull(msg);
        msg.acknowledge();
    }
    assertNull(cons.receiveImmediate());
    cons.close();
    long timeout = System.currentTimeMillis() + 60000;
    while (queue.getPageSubscription().getPagingStore().isPaging() && timeout > System.currentTimeMillis()) {
        Thread.sleep(1);
    }
    assertFalse(queue.getPageSubscription().getPagingStore().isPaging());
    cons = session.createConsumer("exp");
    for (int i = 0; i < NUMBER_OF_EXPIRED_MESSAGES; i++) {
        ClientMessage msg = cons.receive(5000);
        assertNotNull(msg);
        msg.acknowledge();
    }
    session.commit();
    int extras = 0;
    ClientMessage msg;
    while ((msg = cons.receiveImmediate()) != null) {
        System.out.println(msg);
        extras++;
    }
    assertEquals("Received extra messages on expire address", 0, extras);
    session.commit();
    session.close();
    locator.close();
}
Also used : ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) ClientSessionFactory(org.apache.activemq.artemis.api.core.client.ClientSessionFactory) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) ClientConsumer(org.apache.activemq.artemis.api.core.client.ClientConsumer) ClientProducer(org.apache.activemq.artemis.api.core.client.ClientProducer) Queue(org.apache.activemq.artemis.core.server.Queue) ServerLocator(org.apache.activemq.artemis.api.core.client.ServerLocator) Test(org.junit.Test)

Example 30 with Queue

use of org.apache.activemq.artemis.core.server.Queue in project activemq-artemis by apache.

the class ExpiryLargeMessageTest method testExpiryMessagesThenDLQ.

// Attributes ----------------------------------------------------
// Static --------------------------------------------------------
// Constructors --------------------------------------------------
// Public --------------------------------------------------------
@Test
public void testExpiryMessagesThenDLQ() throws Exception {
    ActiveMQServer server = createServer(true);
    server.getConfiguration().setMessageExpiryScanPeriod(600000);
    AddressSettings setting = new AddressSettings().setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE).setMaxDeliveryAttempts(5).setMaxSizeBytes(50 * 1024).setPageSizeBytes(10 * 1024).setExpiryAddress(EXPIRY).setDeadLetterAddress(DLQ);
    server.getAddressSettingsRepository().addMatch(MY_QUEUE.toString(), setting);
    server.getAddressSettingsRepository().addMatch(EXPIRY.toString(), setting);
    server.start();
    server.createQueue(EXPIRY, RoutingType.ANYCAST, EXPIRY, null, true, false);
    server.createQueue(DLQ, RoutingType.ANYCAST, DLQ, null, true, false);
    server.createQueue(MY_QUEUE, RoutingType.ANYCAST, MY_QUEUE, null, true, false);
    ServerLocator locator = createInVMNonHALocator();
    ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
    ClientSession session = sf.createSession(true, true, 0);
    byte[] bufferSample = new byte[messageSize];
    for (int i = 0; i < bufferSample.length; i++) {
        bufferSample[i] = getSamplebyte(i);
    }
    ClientProducer producer = session.createProducer(MY_QUEUE);
    long timeToExpiry = System.currentTimeMillis() + 1000;
    for (int i = 0; i < numberOfMessages; i++) {
        ClientMessage message = session.createMessage(true);
        message.putIntProperty("count", i);
        // Send a few regular messages first, then all is just large messages
        if (i % 2 == 0) {
            message.putBooleanProperty("tst-large", false);
            message.getBodyBuffer().writeBytes(bufferSample);
        } else {
            message.putBooleanProperty("tst-large", true);
            message.setBodyInputStream(createFakeLargeStream(messageSize));
        }
        message.setExpiration(timeToExpiry);
        producer.send(message);
    }
    session.close();
    server.stop();
    server.start();
    Queue queueExpiry = server.locateQueue(EXPIRY);
    Queue myQueue = server.locateQueue(MY_QUEUE);
    sf = createSessionFactory(locator);
    Thread.sleep(1500);
    long timeout = System.currentTimeMillis() + 5000;
    while (timeout > System.currentTimeMillis() && getMessageCount(queueExpiry) != numberOfMessages) {
        // What the Expiry Scan would be doing
        myQueue.expireReferences();
        Thread.sleep(50);
    }
    assertEquals(50, getMessageCount(queueExpiry));
    session = sf.createSession(false, false);
    ClientConsumer cons = session.createConsumer(EXPIRY);
    session.start();
    // Consume half of the messages to make sure all the messages are paging (on the second try)
    for (int i = 0; i < numberOfMessages / 2; i++) {
        ClientMessage msg = cons.receive(5000);
        assertNotNull(msg);
        msg.acknowledge();
    }
    session.commit();
    cons.close();
    for (int rep = 0; rep < 6; rep++) {
        cons = session.createConsumer(EXPIRY);
        session.start();
        log.info("Trying " + rep);
        for (int i = 0; i < numberOfMessages / 2; i++) {
            ClientMessage message = cons.receive(5000);
            assertNotNull(message);
            if (i % 10 == 0) {
                System.out.println("Received " + i);
            }
            for (int location = 0; location < messageSize; location++) {
                assertEquals(getSamplebyte(location), message.getBodyBuffer().readByte());
            }
            message.acknowledge();
        }
        session.rollback();
        cons.close();
        session.close();
        sf.close();
        if (rep == 0) {
            // restart the server at the first try
            server.stop();
            server.start();
        }
        sf = createSessionFactory(locator);
        session = sf.createSession(false, false);
        session.start();
    }
    cons = session.createConsumer(EXPIRY);
    session.start();
    assertNull(cons.receiveImmediate());
    cons.close();
    session.close();
    sf.close();
    for (int rep = 0; rep < 2; rep++) {
        sf = createSessionFactory(locator);
        session = sf.createSession(false, false);
        cons = session.createConsumer(DLQ);
        session.start();
        for (int i = 0; i < numberOfMessages / 2; i++) {
            ClientMessage message = cons.receive(5000);
            assertNotNull(message);
            if (i % 10 == 0) {
                System.out.println("Received " + i);
            }
            for (int location = 0; location < messageSize; location++) {
                assertEquals(getSamplebyte(location), message.getBodyBuffer().readByte());
            }
            message.acknowledge();
        }
        if (rep == 0) {
            session.rollback();
            session.close();
            sf.close();
            server.stop();
            server.start();
        }
    }
    session.commit();
    assertNull(cons.receiveImmediate());
    session.close();
    sf.close();
    locator.close();
    validateNoFilesOnLargeDir();
}
Also used : ActiveMQServer(org.apache.activemq.artemis.core.server.ActiveMQServer) AddressSettings(org.apache.activemq.artemis.core.settings.impl.AddressSettings) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) ClientSessionFactory(org.apache.activemq.artemis.api.core.client.ClientSessionFactory) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) ClientConsumer(org.apache.activemq.artemis.api.core.client.ClientConsumer) ClientProducer(org.apache.activemq.artemis.api.core.client.ClientProducer) Queue(org.apache.activemq.artemis.core.server.Queue) ServerLocator(org.apache.activemq.artemis.api.core.client.ServerLocator) Test(org.junit.Test)

Aggregations

Queue (org.apache.activemq.artemis.core.server.Queue)275 Test (org.junit.Test)193 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)128 ClientSession (org.apache.activemq.artemis.api.core.client.ClientSession)89 ClientProducer (org.apache.activemq.artemis.api.core.client.ClientProducer)85 ClientMessage (org.apache.activemq.artemis.api.core.client.ClientMessage)75 AmqpClient (org.apache.activemq.transport.amqp.client.AmqpClient)70 AmqpConnection (org.apache.activemq.transport.amqp.client.AmqpConnection)70 AmqpSession (org.apache.activemq.transport.amqp.client.AmqpSession)70 ClientConsumer (org.apache.activemq.artemis.api.core.client.ClientConsumer)64 AmqpReceiver (org.apache.activemq.transport.amqp.client.AmqpReceiver)59 AmqpMessage (org.apache.activemq.transport.amqp.client.AmqpMessage)56 ClientSessionFactory (org.apache.activemq.artemis.api.core.client.ClientSessionFactory)49 AmqpSender (org.apache.activemq.transport.amqp.client.AmqpSender)47 Session (javax.jms.Session)36 Connection (javax.jms.Connection)32 Configuration (org.apache.activemq.artemis.core.config.Configuration)31 ActiveMQServer (org.apache.activemq.artemis.core.server.ActiveMQServer)30 AddressSettings (org.apache.activemq.artemis.core.settings.impl.AddressSettings)27 TextMessage (javax.jms.TextMessage)25