Я использую IBM MQ для создания сообщений, получая их через пользователя на моем клиенте. Чтобы создать соединение, я использую JmsConnectionFactory
, а также предоставленные свойства для настройки соединения с сервером. Поэтому из того, что я понимаю, как потребитель, единственный способ распознать сообщения, созданные сервером, - это вызов onMessage
. В настоящее время я тестирую это, создавая местного производителя и местного потребителя и уверяя, что каждое сообщение, отправленное производителем, получает потребитель.Ошибка IBM MQ для отправки/получения всех сообщений JMS
Я бегу на следующие проблемы:
- Я не получаю все сообщения, полученные.
- В зависимости от размера сообщения, большее количество из них принимаются, если они меньше.
Вот код для создания производителя:
JmsConnectionFactory cf = ff.createConnectionFactory();
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, qm.getHost());
int port = ###;
cf.setIntProperty(WMQConstants.WMQ_PORT, port);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, qm.getChannel());
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, qm.getQueueManagerName());
Connection connection = cf.createConnection(qm.getUser().getUsername(), qm.getUser().getPassword());
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(qm.getDestinationName());
LOG.debug("Destination Created at " +qm.getDestinationName());
msgSender = session.createProducer(destination);
msgSender.setDeliveryMode(DeliveryMode.PERSISTENT);
И это, как производитель отправка сообщений:
/**
* msgSender is the MessageProducer object
**/
private void produceMessages(int numOfMessages) throws JMSException, InterruptedException {
for (int i = 0; i < numOfMessages; i++) {
String text = "Message #" +i;
TextMessage message = session.createTextMessage(text);
msgSender.send(message);
}
}
На стороне потребителя, я просто печать принятых сообщений и проверки визуально:
@Override
public void onMessage(Message m) {
System.out.println(((TextMessage)m).getText());
}
Я не полностью знаком с тем, как работает IBM MQ. Может ли причина отсутствия сообщений в MQ просто игнорировать сообщения, которые создаются до того, как сообщение будет полностью отправлено?