jms browser implemented
This commit is contained in:
parent
e7d9acf13b
commit
26b6354875
@ -1,5 +1,28 @@
|
|||||||
package cz.moneta.test.harness.connectors.messaging;
|
package cz.moneta.test.harness.connectors.messaging;
|
||||||
|
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
import javax.jms.BytesMessage;
|
||||||
|
import javax.jms.JMSConsumer;
|
||||||
|
import javax.jms.JMSContext;
|
||||||
|
import javax.jms.JMSException;
|
||||||
|
import javax.jms.JMSRuntimeException;
|
||||||
|
import javax.jms.Message;
|
||||||
|
import javax.jms.TextMessage;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.ibm.mq.jms.MQConnectionFactory;
|
||||||
|
import com.ibm.msg.client.wmq.WMQConstants;
|
||||||
|
|
||||||
import cz.moneta.test.harness.connectors.Connector;
|
import cz.moneta.test.harness.connectors.Connector;
|
||||||
import cz.moneta.test.harness.messaging.MessageContentType;
|
import cz.moneta.test.harness.messaging.MessageContentType;
|
||||||
import cz.moneta.test.harness.messaging.MqMessageFormat;
|
import cz.moneta.test.harness.messaging.MqMessageFormat;
|
||||||
@ -9,22 +32,6 @@ import cz.moneta.test.harness.messaging.exception.MessagingDestinationException;
|
|||||||
import cz.moneta.test.harness.messaging.exception.MessagingTimeoutException;
|
import cz.moneta.test.harness.messaging.exception.MessagingTimeoutException;
|
||||||
import cz.moneta.test.harness.support.messaging.ImqRequest;
|
import cz.moneta.test.harness.support.messaging.ImqRequest;
|
||||||
|
|
||||||
import com.ibm.mq.jms.MQConnectionFactory;
|
|
||||||
import com.ibm.msg.client.wmq.WMQConstants;
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
|
|
||||||
import javax.jms.*;
|
|
||||||
import java.nio.charset.Charset;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* IBM MQ connector using JMS client with Jakarta JMS API. Supports
|
* IBM MQ connector using JMS client with Jakarta JMS API. Supports
|
||||||
* multi-instance Queue Manager, SSL/TLS, and multiple message formats.
|
* multi-instance Queue Manager, SSL/TLS, and multiple message formats.
|
||||||
@ -277,36 +284,27 @@ public class IbmMqConnector implements Connector {
|
|||||||
public List<ReceivedMessage> browse(String queueName, String messageSelector, MqMessageFormat format,
|
public List<ReceivedMessage> browse(String queueName, String messageSelector, MqMessageFormat format,
|
||||||
int maxMessages) {
|
int maxMessages) {
|
||||||
List<ReceivedMessage> messages = new ArrayList<>();
|
List<ReceivedMessage> messages = new ArrayList<>();
|
||||||
|
|
||||||
javax.jms.Queue queue = getQueue(queueName);
|
javax.jms.Queue queue = getQueue(queueName);
|
||||||
MessageConsumer consumer = (MessageConsumer) (messageSelector == null || messageSelector.isBlank()
|
|
||||||
? jmsContext.createConsumer(queue)
|
|
||||||
: jmsContext.createConsumer(queue, messageSelector));
|
|
||||||
|
|
||||||
|
try (javax.jms.QueueBrowser browser = (messageSelector == null || messageSelector.isBlank())
|
||||||
|
? jmsContext.createBrowser(queue)
|
||||||
|
: jmsContext.createBrowser(queue, messageSelector)) {
|
||||||
|
|
||||||
|
Enumeration<?> enumeration = browser.getEnumeration();
|
||||||
int count = 0;
|
int count = 0;
|
||||||
try {
|
|
||||||
while (count < maxMessages) {
|
|
||||||
Message message = consumer.receiveNoWait();
|
|
||||||
|
|
||||||
if (message == null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
while (enumeration.hasMoreElements() && count < maxMessages) {
|
||||||
|
Message message = (Message) enumeration.nextElement();
|
||||||
|
if (message != null) {
|
||||||
ReceivedMessage received = decodeMessage(message, queueName, format);
|
ReceivedMessage received = decodeMessage(message, queueName, format);
|
||||||
messages.add(received);
|
messages.add(received);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return messages;
|
return messages;
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new MessagingDestinationException("Failed to browse queue: " + queueName, e);
|
|
||||||
} finally {
|
|
||||||
try {
|
|
||||||
consumer.close();
|
|
||||||
} catch (JMSException e) {
|
} catch (JMSException e) {
|
||||||
LOG.warn("Failed to close consumer", e);
|
throw new MessagingDestinationException("Failed to browse queue: " + queueName, e);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,19 @@
|
|||||||
|
package cz.moneta.test.system.messaging;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import cz.moneta.test.harness.annotations.TestCase;
|
||||||
|
import cz.moneta.test.harness.annotations.TestScenario;
|
||||||
|
import cz.moneta.test.harness.endpoints.imq.ImqFirstVisionQueue;
|
||||||
|
import cz.moneta.test.harness.messaging.ReceivedMessage;
|
||||||
|
|
||||||
|
@TestScenario(name = "IBM MQ Browse Test")
|
||||||
|
public class ImqBrowseTest {
|
||||||
|
|
||||||
|
@TestCase(name = "Browse messages in queue")
|
||||||
|
public void browseMessagesInQueue(cz.moneta.test.dsl.Harness harness) {
|
||||||
|
List<ReceivedMessage> peeked = harness.withImqFirstVision().fromQueue(ImqFirstVisionQueue.PAYMENT_NOTIFICATIONS)
|
||||||
|
.browse(10);
|
||||||
|
assert !peeked.isEmpty() : "Expected to find messages in the queue, but it was empty.";
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user