我必须实现一种方法,其中将有一个侦听器,它将从队列中读取消息,然后它将这些消息发送到表中。现在我关心的是可以有1条消息或10条消息。我必须逐个阅读它们并将这些消息转储到表中;我已经实现了它,但我怀疑我放的条件不正确。你能告诉我们下面的条件是否合适。
@Transactional(rollbackFor = { Throwable.class })
public String dumpMesagesFromabcQueue() {
String tibcoQueueName = configuration.getSpecificConfiguration(Constants.DFR_QUEUE);
jmsTemplate.setDefaultDestinationName(tibcoQueueName);
jmsTemplate.setPubSubDomain(false);
try {
while (tibcoUtility.getQueueMessagePendingCount(tibcoQueueName) != 0) {
Message message = jmsTemplate.receive();
String messageType = null;
String cashFlowMesg = null;
if (message instanceof ObjectMessage) {
try {
ObjectMessage objMessage = (ObjectMessage) message;
String[] messageArray = (String[]) objMessage.getObject();
cashFlowMesg = messageArray[0];
messageType = messageArray[1];
abcHelper.ttt(rrr, null, ddd, eee, rrrrrr, trw, tyi, new Throwable(ero));
} catch (JMSException e) {
logger.error(" Error retriving messages from error queue to ttt queu ", e);
throw new RuntimeException(e);
}
}
}
} catch (TibjmsAdminException exp) {
String err = "<font color=red><b>Error encountered while processing queue ";
err += exp.toString();
err += "</b></font>";
return err;
}
return "<font color=blue><b>Messages consumed successfully </b></font>";
}
答案 0 :(得分:0)
我觉得这很简单。免责声明:我为JEE / Oracle AQ开发了许多JMS程序,但我没有使用过Tibco / Spring的JMSTemplate。
此方法将负责处理具有一定限制的队列。如果有错误,则返回false。应该有一些使用这种方法的表示方法,如果需要,将格式化错误信息。
@Transactional(rollbackFor = {Throwable.class})
public boolean dumpMesagesFromabcQueue() {
String tibcoQueueName = configuration.getSpecificConfiguration(Constants.DFR_QUEUE);
jmsTemplate.setDefaultDestinationName(tibcoQueueName);
jmsTemplate.setPubSubDomain(false);
int i = 0, limit = configuration.getSpecificConfiguration(Constants.FETCH_QUEUE_SIZE);
while (i < limit) {
Message message = jmsTemplate.receive();
if (message == null) {
return true;
}
i++;
if (message instanceof ObjectMessage) {
try {
ObjectMessage objMessage = (ObjectMessage) message;
String[] messageArray = (String[]) objMessage.getObject();
// unused String cashFlowMesg = messageArray[0];
// unused String messageType = messageArray[1];
abcHelper.ttt(rrr, null, ddd, eee, rrrrrr, trw, tyi, new Throwable(ero));
} catch (JMSException e) {
logger.error(" Error retriving messages from error queue to ttt queu ", e);
return false;
}
}
}
return true;
}