我正面臨着JBoss EAP 6和WebSphere MQ的問題。我已經開發一個消息驅動bean:WebSphere MQ wmq.jmsra在MDB異常之後循環
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "true"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/jms/VGT.EXTERN.IN"),
@ActivationConfigProperty(propertyName = "clientID", propertyValue = "VGT_BYSENDINGSYSTEMDISPATCHERMDB") })
@Pool(value = "BySendingSystemDispatcherMDB-pool")
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class BySendingSystemDispatcherMDB implements javax.jms.MessageListener {
private Logger logger = Logger.getLogger(getClass());
@Inject
@Named
BySendingSystemDispatcher bySendingSystemDispatcher;
@Resource
MessageDrivenContext mdc;
@Inject
@Named
Listener listener;
@Override
public void onMessage(Message message) {
try {
// Weiterbearbeitung deligieren
bySendingSystemDispatcher.onMessage(message);
} catch (JMSException e) {
listener.handleExceptionWhenMessageIsPoisend(e);
logger.error(e.getLinkedException(), e);
mdc.setRollbackOnly();
} catch (JAXBException e) {
mdc.setRollbackOnly();
listener.handleExceptionWhileProcessingMessage(message, e);
logger.error(e.getMessage(), e);
} catch (ClassCastException e) {
logger.error(e.getMessage(), e);
mdc.setRollbackOnly();
} catch (Exception e) {
logger.error(e.getMessage(), e);
mdc.setRollbackOnly();
} finally {
// logging
if (logger.isDebugEnabled()) {
String id = null;
try {
id = message.getJMSMessageID();
logger.debug(((TextMessage) message).getText());
} catch (Exception e) {
logger.debug("logging of message - " + id + " failed");
}
}
}
}
方法bySendingSystemDispatcher.onMessage(消息)是投擲從java.lang.Exception的派生的異常,與@ApplicationException註解(回滾=真)。如果發生這種情況,消息將按照配置重新傳遞5次,之後它將在資源適配器內循環,並且不會再交付。我已經檢查了與HornetQ相同的場景,它按預期工作。
以下異常將被MQ
拋出Class : class javax.jms.JMSException
Stack : com.ibm.msg.client.commonservices.trace.Trace.ffst(Trace.java:1611)
: com.ibm.msg.client.wmq.common.internal.messages.WMQSendMarshal.constructMQMD(WMQSendMarshal.java:287)
: com.ibm.msg.client.wmq.common.internal.messages.WMQSendMarshal.exportMQMDAndMessageBuffers(WMQSendMarshal.java:503)
: com.ibm.msg.client.wmq.common.internal.messages.WMQSendMarshal.exportMQMD(WMQSendMarshal.java:567)
: com.ibm.msg.client.wmq.internal.WMQPoison$PoisonMessage.calculateMqmdAndBuffers(WMQPoison.java:1816)
: com.ibm.msg.client.wmq.
一個有趣的一點是,你可以找到MQMD頭超過了退出閾值的恢復計數。
任何想法會發生什麼以及如何解決?
約爾格
/var/mqm/errors中是否存在其他錯誤?是否有任何生成的fdc文件? – Umapathy
FDC是寫的,但沒有真正明顯的報告在這份報告。我在本文中指出的至少有一個例外是FDC。您是否正在尋找一些特別的東西? –
FDC文件生成期間引發異常,所以想知道它的報告什麼。定義「按預期工作」。 HornetQ丟棄的消息?您是否也在VGT.EXTERN.IN隊列中定義了退出隊列和退出閾值? – Umapathy