Search in sources :

Example 51 with ClientSessionFactory

use of org.apache.activemq.artemis.api.core.client.ClientSessionFactory in project activemq-artemis by apache.

the class LargeMessageCompressTest method testLargeMessageCompression3.

@Test
public void testLargeMessageCompression3() throws Exception {
    final int messageSize = (int) (3.5 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
    ActiveMQServer server = createServer(true, isNetty());
    server.start();
    ClientSessionFactory sf = createSessionFactory(locator);
    ClientSession session = addClientSession(sf.createSession(false, false, false));
    session.createTemporaryQueue(ADDRESS, ADDRESS);
    ClientProducer producer = session.createProducer(ADDRESS);
    Message clientFile = createLargeClientMessageStreaming(session, messageSize, true);
    producer.send(clientFile);
    session.commit();
    session.start();
    ClientConsumer consumer = session.createConsumer(ADDRESS);
    ClientMessage msg1 = consumer.receive(1000);
    Assert.assertNotNull(msg1);
    String testDir = getTestDir();
    File testFile = new File(testDir, "async_large_message");
    FileOutputStream output = new FileOutputStream(testFile);
    msg1.saveToOutputStream(output);
    msg1.acknowledge();
    output.close();
    session.commit();
    consumer.close();
    session.close();
    // verify
    FileInputStream input = new FileInputStream(testFile);
    for (int i = 0; i < messageSize; i++) {
        byte b = (byte) input.read();
        assertEquals("position = " + i, getSamplebyte(i), b);
    }
    input.close();
    testFile.delete();
    validateNoFilesOnLargeDir();
}
Also used : ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) Message(org.apache.activemq.artemis.api.core.Message) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) FileInputStream(java.io.FileInputStream) ActiveMQServer(org.apache.activemq.artemis.core.server.ActiveMQServer) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) FileOutputStream(java.io.FileOutputStream) ClientSessionFactory(org.apache.activemq.artemis.api.core.client.ClientSessionFactory) ClientConsumer(org.apache.activemq.artemis.api.core.client.ClientConsumer) ClientProducer(org.apache.activemq.artemis.api.core.client.ClientProducer) File(java.io.File) Test(org.junit.Test)

Example 52 with ClientSessionFactory

use of org.apache.activemq.artemis.api.core.client.ClientSessionFactory in project activemq-artemis by apache.

the class LargeMessageCompressTest method testLargeMessageCompression.

@Test
public void testLargeMessageCompression() throws Exception {
    final int messageSize = (int) (3.5 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
    ActiveMQServer server = createServer(true, isNetty());
    server.start();
    ClientSessionFactory sf = createSessionFactory(locator);
    ClientSession session = addClientSession(sf.createSession(false, false, false));
    session.createTemporaryQueue(ADDRESS, ADDRESS);
    ClientProducer producer = session.createProducer(ADDRESS);
    Message clientFile = createLargeClientMessageStreaming(session, messageSize, true);
    producer.send(clientFile);
    session.commit();
    session.start();
    ClientConsumer consumer = session.createConsumer(ADDRESS);
    ClientMessage msg1 = consumer.receive(1000);
    Assert.assertNotNull(msg1);
    for (int i = 0; i < messageSize; i++) {
        byte b = msg1.getBodyBuffer().readByte();
        assertEquals("position = " + i, getSamplebyte(i), b);
    }
    msg1.acknowledge();
    session.commit();
    consumer.close();
    session.close();
    validateNoFilesOnLargeDir();
}
Also used : ActiveMQServer(org.apache.activemq.artemis.core.server.ActiveMQServer) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) Message(org.apache.activemq.artemis.api.core.Message) 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) Test(org.junit.Test)

Example 53 with ClientSessionFactory

use of org.apache.activemq.artemis.api.core.client.ClientSessionFactory in project activemq-artemis by apache.

the class LargeMessageCompressTest method testHugeStreamingSpacesCompressed.

// This test will send 1 Gig of spaces. There shouldn't be enough memory to uncompress the file in memory
// but this will make sure we can work through compressed channels on saving it to stream
@Test
public void testHugeStreamingSpacesCompressed() throws Exception {
    final long messageSize = 1024L * 1024L;
    System.out.println("Message size = " + messageSize);
    ActiveMQServer server = createServer(true, isNetty());
    server.start();
    // big enough to hold the whole message compressed on a single message (about 1M on our tests)
    locator.setMinLargeMessageSize(100 * 1024 * 1024);
    ClientSessionFactory sf = createSessionFactory(locator);
    ClientSession session = addClientSession(sf.createSession(false, false, false));
    session.createQueue(ADDRESS, ADDRESS, null, true);
    ClientProducer producer = session.createProducer(ADDRESS);
    ClientMessage clientMessage = session.createMessage(true);
    clientMessage.setBodyInputStream(new InputStream() {

        private long count;

        private boolean closed = false;

        @Override
        public void close() throws IOException {
            super.close();
            closed = true;
        }

        @Override
        public int read() throws IOException {
            if (closed) {
                throw new IOException("Stream was closed");
            }
            if (count++ < messageSize) {
                return ' ';
            } else {
                return -1;
            }
        }
    });
    producer.send(clientMessage);
    session.commit();
    // this is to make sure the message was sent as a regular message (not taking a file on server)
    validateNoFilesOnLargeDir();
    session.start();
    ClientConsumer consumer = session.createConsumer(ADDRESS);
    ClientMessage msg1 = consumer.receive(1000);
    Assert.assertNotNull(msg1);
    final AtomicLong numberOfSpaces = new AtomicLong();
    msg1.saveToOutputStream(new OutputStream() {

        @Override
        public void write(int content) {
            if (content == ' ') {
                numberOfSpaces.incrementAndGet();
            }
        }
    });
    assertEquals(messageSize, numberOfSpaces.get());
    msg1.acknowledge();
    session.commit();
    session.close();
}
Also used : FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) IOException(java.io.IOException) ActiveMQServer(org.apache.activemq.artemis.core.server.ActiveMQServer) AtomicLong(java.util.concurrent.atomic.AtomicLong) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) ClientSessionFactory(org.apache.activemq.artemis.api.core.client.ClientSessionFactory) ClientConsumer(org.apache.activemq.artemis.api.core.client.ClientConsumer) ClientProducer(org.apache.activemq.artemis.api.core.client.ClientProducer) Test(org.junit.Test)

Example 54 with ClientSessionFactory

use of org.apache.activemq.artemis.api.core.client.ClientSessionFactory in project activemq-artemis by apache.

the class MessageConcurrencyTest method testMessageConcurrencyAfterConsumption.

// Test that a created message can be sent via multiple producers after being consumed from a single consumer
@Test
public void testMessageConcurrencyAfterConsumption() throws Exception {
    ClientSessionFactory sf = createSessionFactory(locator);
    ClientSession consumeSession = sf.createSession();
    final ClientProducer mainProducer = consumeSession.createProducer(ADDRESS);
    consumeSession.createQueue(ADDRESS, QUEUE_NAME);
    ClientConsumer consumer = consumeSession.createConsumer(QUEUE_NAME);
    consumeSession.start();
    Set<ClientSession> sendSessions = new HashSet<>();
    final Set<Sender> senders = new HashSet<>();
    final int numSessions = 100;
    final int numMessages = 1000;
    for (int i = 0; i < numSessions; i++) {
        ClientSession sendSession = sf.createSession();
        sendSessions.add(sendSession);
        ClientProducer producer = sendSession.createProducer(ADDRESS);
        Sender sender = new Sender(numMessages, producer);
        senders.add(sender);
        sender.start();
    }
    consumer.setMessageHandler(new MessageHandler() {

        @Override
        public void onMessage(ClientMessage message) {
            for (Sender sender : senders) {
                sender.queue.add(message);
            }
        }
    });
    for (int i = 0; i < numMessages; i++) {
        byte[] body = RandomUtil.randomBytes(1000);
        ClientMessage message = consumeSession.createMessage(false);
        message.getBodyBuffer().writeBytes(body);
        mainProducer.send(message);
    }
    for (Sender sender : senders) {
        sender.join();
        assertFalse(sender.failed);
    }
    for (ClientSession sendSession : sendSessions) {
        sendSession.close();
    }
    consumer.close();
    consumeSession.deleteQueue(QUEUE_NAME);
    consumeSession.close();
    sf.close();
}
Also used : MessageHandler(org.apache.activemq.artemis.api.core.client.MessageHandler) ClientMessage(org.apache.activemq.artemis.api.core.client.ClientMessage) ClientSession(org.apache.activemq.artemis.api.core.client.ClientSession) ClientSessionFactory(org.apache.activemq.artemis.api.core.client.ClientSessionFactory) ClientConsumer(org.apache.activemq.artemis.api.core.client.ClientConsumer) ClientProducer(org.apache.activemq.artemis.api.core.client.ClientProducer) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 55 with ClientSessionFactory

use of org.apache.activemq.artemis.api.core.client.ClientSessionFactory in project activemq-artemis by apache.

the class AckBatchSizeTest method testAckBatchSizeZero.

/*
   * tests that when the ackBatchSize is 0 we ack every message directly
   * */
@Test
public void testAckBatchSizeZero() throws Exception {
    ActiveMQServer server = createServer(false);
    server.start();
    ServerLocator locator = createInVMNonHALocator().setAckBatchSize(0).setBlockOnAcknowledge(true);
    ClientSessionFactory cf = createSessionFactory(locator);
    ClientSession sendSession = cf.createSession(false, true, true);
    int numMessages = 100;
    ClientSession session = cf.createSession(false, true, true);
    session.createQueue(addressA, queueA, false);
    ClientProducer cp = sendSession.createProducer(addressA);
    for (int i = 0; i < numMessages; i++) {
        cp.send(sendSession.createMessage(false));
    }
    ClientConsumer consumer = session.createConsumer(queueA);
    session.start();
    Queue q = (Queue) server.getPostOffice().getBinding(queueA).getBindable();
    ClientMessage[] messages = new ClientMessage[numMessages];
    for (int i = 0; i < numMessages; i++) {
        messages[i] = consumer.receive(5000);
        Assert.assertNotNull(messages[i]);
    }
    for (int i = 0; i < numMessages; i++) {
        messages[i].acknowledge();
        Assert.assertEquals(numMessages - i - 1, q.getDeliveringCount());
    }
    sendSession.close();
    session.close();
}
Also used : ActiveMQServer(org.apache.activemq.artemis.core.server.ActiveMQServer) 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

ClientSessionFactory (org.apache.activemq.artemis.api.core.client.ClientSessionFactory)601 ClientSession (org.apache.activemq.artemis.api.core.client.ClientSession)518 Test (org.junit.Test)464 ClientProducer (org.apache.activemq.artemis.api.core.client.ClientProducer)395 ClientMessage (org.apache.activemq.artemis.api.core.client.ClientMessage)372 ClientConsumer (org.apache.activemq.artemis.api.core.client.ClientConsumer)350 ServerLocator (org.apache.activemq.artemis.api.core.client.ServerLocator)277 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)254 ActiveMQServer (org.apache.activemq.artemis.core.server.ActiveMQServer)206 ActiveMQException (org.apache.activemq.artemis.api.core.ActiveMQException)108 Configuration (org.apache.activemq.artemis.core.config.Configuration)78 AddressSettings (org.apache.activemq.artemis.core.settings.impl.AddressSettings)65 TransportConfiguration (org.apache.activemq.artemis.api.core.TransportConfiguration)63 CountDownLatch (java.util.concurrent.CountDownLatch)54 Queue (org.apache.activemq.artemis.core.server.Queue)49 ArrayList (java.util.ArrayList)44 HashMap (java.util.HashMap)43 HashSet (java.util.HashSet)42 ActiveMQJAASSecurityManager (org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager)42 Message (org.apache.activemq.artemis.api.core.Message)41