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に存在する可能性がありますか?