use of org.apache.activemq.artemis.api.core.Message in project activemq-artemis by apache.
the class LargeMessageTest method testCloseConsumer.
@Test
public void testCloseConsumer() 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 = 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);
msg1.acknowledge();
session.commit();
Assert.assertNotNull(msg1);
consumer.close();
try {
msg1.getBodyBuffer().readByte();
Assert.fail("Exception was expected");
} catch (final Exception ignored) {
// empty on purpose
}
session.close();
validateNoFilesOnLargeDir();
}
use of org.apache.activemq.artemis.api.core.Message in project activemq-artemis by apache.
the class LargeMessageTest method internalTestRollbackPartiallyConsumedBuffer.
private void internalTestRollbackPartiallyConsumedBuffer(final boolean redeliveryDelay) throws Exception {
final int messageSize = largeMessageSize;
final ClientSession session;
ActiveMQServer server = createServer(true, isNetty(), storeType);
AddressSettings settings = new AddressSettings();
if (redeliveryDelay) {
settings.setRedeliveryDelay(100);
if (locator.isCompressLargeMessage()) {
locator.setConsumerWindowSize(0);
}
}
settings.setMaxDeliveryAttempts(-1);
server.getAddressSettingsRepository().addMatch("#", settings);
server.start();
ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
session = sf.createSession(false, false, false);
session.createQueue(ADDRESS, ADDRESS, true);
ClientProducer producer = session.createProducer(ADDRESS);
for (int i = 0; i < 20; i++) {
Message clientFile = createLargeClientMessageStreaming(session, messageSize, true);
clientFile.putIntProperty("value", i);
producer.send(clientFile);
}
session.commit();
session.start();
final CountDownLatch latch = new CountDownLatch(1);
final AtomicInteger errors = new AtomicInteger(0);
ClientConsumer consumer = session.createConsumer(ADDRESS);
consumer.setMessageHandler(new MessageHandler() {
int counter = 0;
@Override
public void onMessage(ClientMessage message) {
message.getBodyBuffer().readByte();
// System.out.println("message:" + message);
try {
if (counter++ < 20) {
Thread.sleep(100);
// System.out.println("Rollback");
message.acknowledge();
session.rollback();
} else {
message.acknowledge();
session.commit();
}
if (counter == 40) {
latch.countDown();
}
} catch (Exception e) {
latch.countDown();
e.printStackTrace();
errors.incrementAndGet();
}
}
});
assertTrue(latch.await(40, TimeUnit.SECONDS));
consumer.close();
session.close();
validateNoFilesOnLargeDir();
}
use of org.apache.activemq.artemis.api.core.Message in project activemq-artemis by apache.
the class LargeMessageTest method testDeleteOnNoBinding.
@Test
public void testDeleteOnNoBinding() throws Exception {
final int messageSize = (int) (3.5 * ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
ActiveMQServer server = createServer(true, isNetty(), storeType);
server.start();
ClientSessionFactory sf = addSessionFactory(createSessionFactory(locator));
ClientSession session = addClientSession(sf.createSession(false, true, false));
ClientProducer producer = session.createProducer(UUID.randomUUID().toString());
Message clientFile = createLargeClientMessageStreaming(session, messageSize, true);
producer.send(clientFile);
session.close();
validateNoFilesOnLargeDir();
}
use of org.apache.activemq.artemis.api.core.Message 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.Message 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();
}
Aggregations