Je veux lire 10000 messages de Websphere MQ dans des groupes dans l'ordre séquentiel, j'utilise le code ci-dessous pour faire la même chose, mais il prend beaucoup de temps pour lire tous les messages. Même j'ai essayé d'utiliser des concepts multi-thread, mais parfois 2 threads consomment le même groupe et la condition de course qui se passe. Voici l'extrait de code ci-dessous. J'essaie d'utiliser 3 threads pour lire séquentiellement 10 000 messages de MQ, mais deux de mes threads accèdent au même groupe à la fois. Comment éviter cela? Quelle est la meilleure façon de lire un grand volume de messages en séquentiel? Mon exigence est que je veux lire 10000 messages séquentiellement. S'il vous plaît aider.comment lire un grand volume de messages de Websphere MQ
MQConnectionFactory factory = new MQConnectionFactory();
factory.setQueueManager("QM_host")
MQQueue destination = new MQQueue("default");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
MessageConsumer lastMessageConsumer =
session.createConsumer(destination, "JMS_IBM_Last_Msg_In_Group=TRUE");
TextMessage lastMessage = (TextMessage) lastMessageConsumer.receiveNoWait();
lastMessageConsumer.close();
if (lastMessage != null) {
int groupSize = lastMessage.getIntProperty("JMSXGroupSeq");
String groupId = lastMessage.getStringProperty("JMSXGroupID");
boolean failed = false;
for (int i = 1; (i < groupSize) && !failed; i++) {
MessageConsumer consumer = session.createConsumer(destination,
"JMSXGroupID='" + groupId + "'AND JMSXGroupSeq=" + i);
TextMessage message = (TextMessage)consumer.receiveNoWait();
if (message != null) {
System.out.println(message.getText());
} else {
failed = true;
}
consumer.close();
}
if (failed) {
session.rollback();
} else {
System.out.println(lastMessage.getText());
session.commit();
}
}
connection.close();