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();
}
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();
}
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();
}
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;
}
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();
}
Aggregations