use of org.apache.activemq.artemis.api.core.client.ClientConsumer in project activemq-artemis by apache.
the class LargeMessageTest method testPageOnLargeMessage.
protected void testPageOnLargeMessage(final boolean realFiles, final boolean sendBlocking) throws Exception {
Configuration config = createDefaultConfig(isNetty());
final int PAGE_MAX = 20 * 1024;
final int PAGE_SIZE = 10 * 1024;
HashMap<String, AddressSettings> map = new HashMap<>();
AddressSettings value = new AddressSettings();
map.put(ADDRESS.toString(), value);
ActiveMQServer server = createServer(realFiles, config, PAGE_SIZE, PAGE_MAX, map, storeType);
server.start();
final int numberOfBytes = 1024;
final int numberOfBytesBigMessage = 400000;
ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
if (sendBlocking) {
sf.getServerLocator().setBlockOnNonDurableSend(true).setBlockOnDurableSend(true).setBlockOnAcknowledge(true);
}
ClientSession session = sf.createSession(null, null, false, true, true, false, 0);
session.createQueue(ADDRESS, ADDRESS, null, true);
ClientProducer producer = session.createProducer(ADDRESS);
ClientMessage message = null;
for (int i = 0; i < 100; i++) {
message = session.createMessage(true);
// TODO: Why do I need to reset the writerIndex?
message.getBodyBuffer().writerIndex(0);
for (int j = 1; j <= numberOfBytes; j++) {
message.getBodyBuffer().writeInt(j);
}
producer.send(message);
}
ClientMessage clientFile = createLargeClientMessageStreaming(session, numberOfBytesBigMessage);
producer.send(clientFile);
session.close();
if (realFiles) {
server.stop();
server = createServer(true, config, PAGE_SIZE, PAGE_MAX, map, storeType);
server.start();
sf = createSessionFactory(locator);
}
session = sf.createSession(null, null, false, true, true, false, 0);
ClientConsumer consumer = session.createConsumer(ADDRESS);
session.start();
for (int i = 0; i < 100; i++) {
ClientMessage message2 = consumer.receive(LargeMessageTest.RECEIVE_WAIT_TIME);
Assert.assertNotNull(message2);
message2.acknowledge();
Assert.assertNotNull(message2);
message.getBodyBuffer().readerIndex(0);
for (int j = 1; j <= numberOfBytes; j++) {
Assert.assertEquals(j, message.getBodyBuffer().readInt());
}
}
consumer.close();
session.close();
session = sf.createSession(null, null, false, true, true, false, 0);
readMessage(session, ADDRESS, numberOfBytesBigMessage);
// printBuffer("message received : ", message2.getBody());
session.close();
}
use of org.apache.activemq.artemis.api.core.client.ClientConsumer in project activemq-artemis by apache.
the class LargeMessageTest method testTwoBindingsTwoStartedConsumers.
@Test
public void testTwoBindingsTwoStartedConsumers() throws Exception {
// there are two bindings.. one is ACKed, the other is not, the server is restarted
// The other binding is acked... The file must be deleted
ActiveMQServer server = createServer(true, isNetty(), storeType);
server.start();
SimpleString[] queue = new SimpleString[] { new SimpleString("queue1"), new SimpleString("queue2") };
ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
ClientSession session = sf.createSession(null, null, false, true, true, false, 0);
session.createQueue(ADDRESS, queue[0], null, true);
session.createQueue(ADDRESS, queue[1], null, true);
int numberOfBytes = 400000;
Message clientFile = createLargeClientMessageStreaming(session, numberOfBytes);
ClientProducer producer = session.createProducer(ADDRESS);
session.start();
producer.send(clientFile);
producer.close();
ClientConsumer consumer = session.createConsumer(queue[1]);
ClientMessage msg = consumer.receive(LargeMessageTest.RECEIVE_WAIT_TIME);
msg.getBodyBuffer().readByte();
Assert.assertNull(consumer.receiveImmediate());
Assert.assertNotNull(msg);
msg.acknowledge();
consumer.close();
log.debug("Stopping");
session.stop();
ClientConsumer consumer1 = session.createConsumer(queue[0]);
session.start();
msg = consumer1.receive(LargeMessageTest.RECEIVE_WAIT_TIME);
Assert.assertNotNull(msg);
msg.acknowledge();
consumer1.close();
session.commit();
session.close();
validateNoFilesOnLargeDir();
}
use of org.apache.activemq.artemis.api.core.client.ClientConsumer in project activemq-artemis by apache.
the class LargeMessageTest method testDLAOnExpiryNonDurableMessage.
@Test
public void testDLAOnExpiryNonDurableMessage() throws Exception {
final int messageSize = (int) (3.5 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
ClientSession session = null;
ActiveMQServer server = createServer(true, isNetty(), storeType);
server.start();
ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
SimpleString ADDRESS_DLA = ADDRESS.concat("-dla");
SimpleString ADDRESS_EXPIRY = ADDRESS.concat("-expiry");
AddressSettings addressSettings = new AddressSettings().setDeadLetterAddress(ADDRESS_DLA).setExpiryAddress(ADDRESS_EXPIRY).setMaxDeliveryAttempts(1);
server.getAddressSettingsRepository().addMatch("*", addressSettings);
session = sf.createSession(false, false, false);
session.createQueue(ADDRESS, ADDRESS, true);
session.createQueue(ADDRESS_DLA, ADDRESS_DLA, true);
session.createQueue(ADDRESS_EXPIRY, ADDRESS_EXPIRY, true);
ClientProducer producer = session.createProducer(ADDRESS);
Message clientFile = createLargeClientMessageStreaming(session, messageSize, false);
clientFile.setExpiration(System.currentTimeMillis());
producer.send(clientFile);
session.commit();
session.start();
ClientConsumer consumerExpired = session.createConsumer(ADDRESS);
// to kick expiry quicker than waiting reaper thread
Assert.assertNull(consumerExpired.receiveImmediate());
consumerExpired.close();
ClientConsumer consumerExpiry = session.createConsumer(ADDRESS_EXPIRY);
ClientMessage msg1 = consumerExpiry.receive(5000);
assertTrue(msg1.isLargeMessage());
Assert.assertNotNull(msg1);
msg1.acknowledge();
for (int j = 0; j < messageSize; j++) {
Assert.assertEquals(ActiveMQTestBase.getSamplebyte(j), msg1.getBodyBuffer().readByte());
}
session.rollback();
consumerExpiry.close();
for (int i = 0; i < 10; i++) {
consumerExpiry = session.createConsumer(ADDRESS_DLA);
msg1 = consumerExpiry.receive(5000);
Assert.assertNotNull(msg1);
msg1.acknowledge();
for (int j = 0; j < messageSize; j++) {
Assert.assertEquals(ActiveMQTestBase.getSamplebyte(j), msg1.getBodyBuffer().readByte());
}
session.rollback();
consumerExpiry.close();
}
session.close();
session = sf.createSession(false, false, false);
session.start();
consumerExpiry = session.createConsumer(ADDRESS_DLA);
msg1 = consumerExpiry.receive(5000);
Assert.assertNotNull(msg1);
msg1.acknowledge();
for (int i = 0; i < messageSize; i++) {
Assert.assertEquals(ActiveMQTestBase.getSamplebyte(i), msg1.getBodyBuffer().readByte());
}
session.commit();
consumerExpiry.close();
session.commit();
session.close();
server.stop();
server.start();
validateNoFilesOnLargeDir();
}
use of org.apache.activemq.artemis.api.core.client.ClientConsumer in project activemq-artemis by apache.
the class LargeMessageTest method testDLAOnExpiry.
@Test
public void testDLAOnExpiry() throws Exception {
final int messageSize = (int) (3.5 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
ClientSession session = null;
ActiveMQServer server = createServer(true, isNetty(), storeType);
server.start();
ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
SimpleString ADDRESS_DLA = ADDRESS.concat("-dla");
SimpleString ADDRESS_EXPIRY = ADDRESS.concat("-expiry");
AddressSettings addressSettings = new AddressSettings().setDeadLetterAddress(ADDRESS_DLA).setExpiryAddress(ADDRESS_EXPIRY).setMaxDeliveryAttempts(1);
server.getAddressSettingsRepository().addMatch("*", addressSettings);
session = sf.createSession(false, false, false);
session.createQueue(ADDRESS, ADDRESS, true);
session.createQueue(ADDRESS_DLA, ADDRESS_DLA, true);
session.createQueue(ADDRESS_EXPIRY, ADDRESS_EXPIRY, true);
ClientProducer producer = session.createProducer(ADDRESS);
Message clientFile = createLargeClientMessageStreaming(session, messageSize, true);
clientFile.setExpiration(System.currentTimeMillis());
producer.send(clientFile);
session.commit();
session.start();
ClientConsumer consumerExpired = session.createConsumer(ADDRESS);
// to kick expiry quicker than waiting reaper thread
Assert.assertNull(consumerExpired.receiveImmediate());
consumerExpired.close();
ClientConsumer consumerExpiry = session.createConsumer(ADDRESS_EXPIRY);
ClientMessage msg1 = consumerExpiry.receive(5000);
Assert.assertNotNull(msg1);
msg1.acknowledge();
for (int j = 0; j < messageSize; j++) {
Assert.assertEquals(ActiveMQTestBase.getSamplebyte(j), msg1.getBodyBuffer().readByte());
}
session.rollback();
consumerExpiry.close();
for (int i = 0; i < 10; i++) {
consumerExpiry = session.createConsumer(ADDRESS_DLA);
msg1 = consumerExpiry.receive(5000);
Assert.assertNotNull(msg1);
msg1.acknowledge();
for (int j = 0; j < messageSize; j++) {
Assert.assertEquals(ActiveMQTestBase.getSamplebyte(j), msg1.getBodyBuffer().readByte());
}
session.rollback();
consumerExpiry.close();
}
session.close();
server.stop();
server = createServer(true, isNetty(), storeType);
server.start();
sf = createSessionFactory(locator);
session = sf.createSession(false, false, false);
session.start();
consumerExpiry = session.createConsumer(ADDRESS_DLA);
msg1 = consumerExpiry.receive(5000);
Assert.assertNotNull(msg1);
msg1.acknowledge();
for (int i = 0; i < messageSize; i++) {
Assert.assertEquals(ActiveMQTestBase.getSamplebyte(i), msg1.getBodyBuffer().readByte());
}
session.commit();
consumerExpiry.close();
session.commit();
session.close();
validateNoFilesOnLargeDir();
}
use of org.apache.activemq.artemis.api.core.client.ClientConsumer in project activemq-artemis by apache.
the class LargeMessageTest method testDeliveryCount.
@Test
public void testDeliveryCount() throws Exception {
final int messageSize = (int) (3.5 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
ClientSession session = null;
ActiveMQServer server = createServer(true, isNetty(), storeType);
server.start();
ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
session = sf.createSession(false, false, false);
session.createQueue(ADDRESS, ADDRESS, true);
ClientProducer producer = session.createProducer(ADDRESS);
Message clientFile = createLargeClientMessageStreaming(session, messageSize, true);
producer.send(clientFile);
session.commit();
session.start();
ClientConsumer consumer = session.createConsumer(ADDRESS);
ClientMessage msg = consumer.receive(10000);
Assert.assertNotNull(msg);
msg.acknowledge();
Assert.assertEquals(1, msg.getDeliveryCount());
log.info("body buffer is " + msg.getBodyBuffer());
for (int i = 0; i < messageSize; i++) {
Assert.assertEquals(ActiveMQTestBase.getSamplebyte(i), msg.getBodyBuffer().readByte());
}
session.rollback();
session.close();
session = sf.createSession(false, false, false);
session.start();
consumer = session.createConsumer(ADDRESS);
msg = consumer.receive(10000);
Assert.assertNotNull(msg);
msg.acknowledge();
for (int i = 0; i < messageSize; i++) {
Assert.assertEquals(ActiveMQTestBase.getSamplebyte(i), msg.getBodyBuffer().readByte());
}
Assert.assertEquals(2, msg.getDeliveryCount());
msg.acknowledge();
consumer.close();
session.commit();
validateNoFilesOnLargeDir();
}
Aggregations