Search in sources :

Example 56 with Queue

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

the class ActiveMQServerControlTest method testTotalMessageCount.

@Test
public void testTotalMessageCount() throws Exception {
    String random1 = RandomUtil.randomString();
    String random2 = RandomUtil.randomString();
    ActiveMQServerControl serverControl = createManagementControl();
    ServerLocator locator = createInVMNonHALocator();
    ClientSessionFactory csf = createSessionFactory(locator);
    ClientSession session = csf.createSession();
    session.createQueue(random1, RoutingType.ANYCAST, random1);
    session.createQueue(random2, RoutingType.ANYCAST, random2);
    ClientProducer producer1 = session.createProducer(random1);
    ClientProducer producer2 = session.createProducer(random2);
    ClientMessage message = session.createMessage(true);
    producer1.send(message);
    producer2.send(message);
    session.commit();
    // flush executors on queues so we can get precise number of messages
    Queue queue1 = server.locateQueue(SimpleString.toSimpleString(random1));
    queue1.flushExecutor();
    Queue queue2 = server.locateQueue(SimpleString.toSimpleString(random1));
    queue2.flushExecutor();
    assertEquals(2, serverControl.getTotalMessageCount());
    session.deleteQueue(random1);
    session.deleteQueue(random2);
    session.close();
    locator.close();
}
Also used : ActiveMQServerControl(org.apache.activemq.artemis.api.core.management.ActiveMQServerControl) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) ClientSessionFactory(org.apache.activemq.artemis.api.core.client.ClientSessionFactory) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) 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 57 with Queue

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

the class JmsConsumerTest method testIndividualACKMessageConsumer.

@Test
public void testIndividualACKMessageConsumer() throws Exception {
    Connection conn = cf.createConnection();
    Session session = conn.createSession(false, ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE);
    jBossQueue = ActiveMQJMSClient.createQueue(JmsConsumerTest.Q_NAME);
    MessageProducer producer = session.createProducer(jBossQueue);
    MessageConsumer consumer = session.createConsumer(jBossQueue);
    int noOfMessages = 100;
    for (int i = 0; i < noOfMessages; i++) {
        producer.setPriority(2);
        producer.send(session.createTextMessage("m" + i));
    }
    conn.start();
    final AtomicInteger errors = new AtomicInteger(0);
    final ReusableLatch latch = new ReusableLatch();
    latch.setCount(noOfMessages);
    class MessageAckEven implements MessageListener {

        int count = 0;

        @Override
        public void onMessage(Message msg) {
            try {
                TextMessage txtmsg = (TextMessage) msg;
                if (!txtmsg.getText().equals("m" + count)) {
                    errors.incrementAndGet();
                }
                if (count % 2 == 0) {
                    msg.acknowledge();
                }
                count++;
            } catch (Exception e) {
                errors.incrementAndGet();
            } finally {
                latch.countDown();
            }
        }
    }
    consumer.setMessageListener(new MessageAckEven());
    Assert.assertTrue(latch.await(5000));
    session.close();
    session = conn.createSession(false, ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE);
    consumer = session.createConsumer(jBossQueue);
    // Consume odd numbers first
    for (int i = 0; i < noOfMessages; i++) {
        if (i % 2 == 0) {
            continue;
        }
        TextMessage m = (TextMessage) consumer.receive(1000);
        Assert.assertNotNull(m);
        m.acknowledge();
        Assert.assertEquals("m" + i, m.getText());
    }
    SimpleString queueName = new SimpleString(JmsConsumerTest.Q_NAME);
    conn.close();
    Queue queue = server.locateQueue(queueName);
    Wait.assertEquals(0, queue::getDeliveringCount);
    Wait.assertEquals(0, queue::getMessageCount);
}
Also used : MessageConsumer(javax.jms.MessageConsumer) Message(javax.jms.Message) TextMessage(javax.jms.TextMessage) Connection(javax.jms.Connection) MessageListener(javax.jms.MessageListener) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) JMSException(javax.jms.JMSException) ReusableLatch(org.apache.activemq.artemis.utils.ReusableLatch) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) MessageProducer(javax.jms.MessageProducer) Queue(org.apache.activemq.artemis.core.server.Queue) TextMessage(javax.jms.TextMessage) Session(javax.jms.Session) Test(org.junit.Test)

Example 58 with Queue

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

the class JmsConsumerTest method testIndividualACK.

@Test
public void testIndividualACK() throws Exception {
    Connection conn = cf.createConnection();
    Session session = conn.createSession(false, ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE);
    jBossQueue = ActiveMQJMSClient.createQueue(JmsConsumerTest.Q_NAME);
    MessageProducer producer = session.createProducer(jBossQueue);
    MessageConsumer consumer = session.createConsumer(jBossQueue);
    int noOfMessages = 100;
    for (int i = 0; i < noOfMessages; i++) {
        producer.send(session.createTextMessage("m" + i));
    }
    conn.start();
    // Consume even numbers first
    for (int i = 0; i < noOfMessages; i++) {
        Message m = consumer.receive(500);
        Assert.assertNotNull(m);
        if (i % 2 == 0) {
            m.acknowledge();
        }
    }
    session.close();
    session = conn.createSession(false, ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE);
    consumer = session.createConsumer(jBossQueue);
    // Consume odd numbers first
    for (int i = 0; i < noOfMessages; i++) {
        if (i % 2 == 0) {
            continue;
        }
        TextMessage m = (TextMessage) consumer.receive(1000);
        Assert.assertNotNull(m);
        m.acknowledge();
        Assert.assertEquals("m" + i, m.getText());
    }
    SimpleString queueName = new SimpleString(JmsConsumerTest.Q_NAME);
    conn.close();
    Assert.assertEquals(0, ((Queue) server.getPostOffice().getBinding(queueName).getBindable()).getDeliveringCount());
    Assert.assertEquals(0, getMessageCount((Queue) server.getPostOffice().getBinding(queueName).getBindable()));
}
Also used : MessageConsumer(javax.jms.MessageConsumer) Message(javax.jms.Message) TextMessage(javax.jms.TextMessage) Connection(javax.jms.Connection) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) MessageProducer(javax.jms.MessageProducer) Queue(org.apache.activemq.artemis.core.server.Queue) TextMessage(javax.jms.TextMessage) Session(javax.jms.Session) Test(org.junit.Test)

Example 59 with Queue

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

the class JmsConsumerTest method testPreCommitAcksSetOnConnectionFactory.

@Test
public void testPreCommitAcksSetOnConnectionFactory() throws Exception {
    ((ActiveMQConnectionFactory) cf).setPreAcknowledge(true);
    conn = cf.createConnection();
    Session session = conn.createSession(false, Session.CLIENT_ACKNOWLEDGE);
    jBossQueue = ActiveMQJMSClient.createQueue(JmsConsumerTest.Q_NAME);
    MessageProducer producer = session.createProducer(jBossQueue);
    MessageConsumer consumer = session.createConsumer(jBossQueue);
    int noOfMessages = 100;
    for (int i = 0; i < noOfMessages; i++) {
        producer.send(session.createTextMessage("m" + i));
    }
    conn.start();
    for (int i = 0; i < noOfMessages; i++) {
        Message m = consumer.receive(500);
        Assert.assertNotNull(m);
    }
    // Messages should all have been acked since we set pre ack on the cf
    SimpleString queueName = new SimpleString(JmsConsumerTest.Q_NAME);
    Queue queue = server.locateQueue(queueName);
    Wait.assertEquals(0, queue::getDeliveringCount);
    Wait.assertEquals(0, queue::getMessageCount);
}
Also used : ActiveMQConnectionFactory(org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory) MessageConsumer(javax.jms.MessageConsumer) Message(javax.jms.Message) TextMessage(javax.jms.TextMessage) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) MessageProducer(javax.jms.MessageProducer) Queue(org.apache.activemq.artemis.core.server.Queue) Session(javax.jms.Session) Test(org.junit.Test)

Example 60 with Queue

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

the class JmsConsumerTest method testPreCommitAcks.

@Test
public void testPreCommitAcks() throws Exception {
    conn = cf.createConnection();
    Session session = conn.createSession(false, ActiveMQJMSConstants.PRE_ACKNOWLEDGE);
    jBossQueue = ActiveMQJMSClient.createQueue(JmsConsumerTest.Q_NAME);
    MessageProducer producer = session.createProducer(jBossQueue);
    MessageConsumer consumer = session.createConsumer(jBossQueue);
    int noOfMessages = 100;
    for (int i = 0; i < noOfMessages; i++) {
        producer.send(session.createTextMessage("m" + i));
    }
    conn.start();
    for (int i = 0; i < noOfMessages; i++) {
        Message m = consumer.receive(500);
        Assert.assertNotNull(m);
    }
    SimpleString queueName = new SimpleString(JmsConsumerTest.Q_NAME);
    Assert.assertEquals(0, getMessageCount((Queue) server.getPostOffice().getBinding(queueName).getBindable()));
    Assert.assertEquals(0, getMessageCount((Queue) server.getPostOffice().getBinding(queueName).getBindable()));
}
Also used : MessageConsumer(javax.jms.MessageConsumer) Message(javax.jms.Message) TextMessage(javax.jms.TextMessage) SimpleString(org.apache.activemq.artemis.api.core.SimpleString) MessageProducer(javax.jms.MessageProducer) Queue(org.apache.activemq.artemis.core.server.Queue) Session(javax.jms.Session) 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