Search in sources :

Example 81 with ClientMessage

use of org.apache.activemq.artemis.api.core.client.ClientMessage 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 82 with ClientMessage

use of org.apache.activemq.artemis.api.core.client.ClientMessage 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 83 with ClientMessage

use of org.apache.activemq.artemis.api.core.client.ClientMessage 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)

Example 84 with ClientMessage

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

the class AckBatchSizeTest method getMessageEncodeSize.

/*ackbatchSize tests*/
/*
   * tests that wed don't acknowledge until the correct ackBatchSize is reached
   * */
private int getMessageEncodeSize(final SimpleString address) throws Exception {
    ServerLocator locator = createInVMNonHALocator();
    ClientSessionFactory cf = createSessionFactory(locator);
    ClientSession session = cf.createSession(false, true, true);
    ClientMessage message = session.createMessage(false);
    // we need to set the destination so we can calculate the encodesize correctly
    message.setAddress(address);
    int encodeSize = message.getEncodeSize();
    session.close();
    cf.close();
    return encodeSize;
}
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) ServerLocator(org.apache.activemq.artemis.api.core.client.ServerLocator)

Example 85 with ClientMessage

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

the class ActiveMQCrashTest method testHang.

@Test
public void testHang() throws Exception {
    Configuration configuration = createDefaultInVMConfig().setPersistenceEnabled(false);
    server = addServer(ActiveMQServers.newActiveMQServer(configuration));
    server.start();
    server.getRemotingService().addIncomingInterceptor(new AckInterceptor(server));
    // Force an ack at once - this means the send call will block
    locator.setConfirmationWindowSize(1);
    ClientSessionFactory clientSessionFactory = createSessionFactory(locator);
    ClientSession session = clientSessionFactory.createSession();
    session.setSendAcknowledgementHandler(new SendAcknowledgementHandler() {

        @Override
        public void sendAcknowledged(final Message message) {
            ackReceived = true;
        }
    });
    ClientProducer producer = session.createProducer("fooQueue");
    ClientMessage msg = session.createMessage(false);
    msg.putStringProperty("someKey", "someValue");
    producer.send(msg);
    Thread.sleep(250);
    Assert.assertFalse(ackReceived);
    session.close();
}
Also used : Configuration(org.apache.activemq.artemis.core.config.Configuration) 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) SendAcknowledgementHandler(org.apache.activemq.artemis.api.core.client.SendAcknowledgementHandler) ClientProducer(org.apache.activemq.artemis.api.core.client.ClientProducer) Test(org.junit.Test)

Aggregations

ClientMessage (org.apache.activemq.artemis.api.core.client.ClientMessage)889 ClientProducer (org.apache.activemq.artemis.api.core.client.ClientProducer)708 Test (org.junit.Test)647 ClientConsumer (org.apache.activemq.artemis.api.core.client.ClientConsumer)623 ClientSession (org.apache.activemq.artemis.api.core.client.ClientSession)606 SimpleString (org.apache.activemq.artemis.api.core.SimpleString)445 ClientSessionFactory (org.apache.activemq.artemis.api.core.client.ClientSessionFactory)363 ServerLocator (org.apache.activemq.artemis.api.core.client.ServerLocator)167 ActiveMQServer (org.apache.activemq.artemis.core.server.ActiveMQServer)140 AddressSettings (org.apache.activemq.artemis.core.settings.impl.AddressSettings)102 CountDownLatch (java.util.concurrent.CountDownLatch)99 Configuration (org.apache.activemq.artemis.core.config.Configuration)87 ActiveMQException (org.apache.activemq.artemis.api.core.ActiveMQException)85 Queue (org.apache.activemq.artemis.core.server.Queue)72 Xid (javax.transaction.xa.Xid)67 DivertConfiguration (org.apache.activemq.artemis.core.config.DivertConfiguration)63 StoreConfiguration (org.apache.activemq.artemis.core.config.StoreConfiguration)54 HashMap (java.util.HashMap)53 ArrayList (java.util.ArrayList)51 DatabaseStorageConfiguration (org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration)47