0
我正在使用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上完全忽略在消息完全發送之前生成的消息?