Solace Session Recovery,消息重新发送

时间:2016-03-18 10:04:15

标签: session solace

我使用Spring DefaultMessageListenerContainer和JMS Message Listener来使用来自Solace Queue的消息。 Client Acknowledgement设置为true。

如果异常消息保留在队列中,因为它们未被确认,并且这些消息未被重新传递。处理异常后泵送的新消息。

已阅读有关使用session.recover的内容,但我们如何处理会话。还尝试将maxredelivery设置为3。但是没有工作。

public void onMessage(Message message) {
 String text = null;
 ALNTLogger.trace(CLAZZ_NAME, "onMessage()", "Message Received:");
 try {
   TextMessage textMessage = (TextMessage) message;
   text = textMessage.getText();
   ALNTLogger.trace(CLAZZ_NAME, "onMessage()", "Message Received: " + text);

   Document xmlDocument = parseXml(text);
   Map < String, String > values = getValues(xmlDocument);
   saveValues(values);
   message.acknowledge();
 } catch (Exception ex) {
  ALNTLogger.error(CLAZZ_NAME, "onMessage()", "Failed to process message:" + text);
  throw new RuntimeException(ex);
 }
} 

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

当使用CLIENT_ACKNOWLEDGE确认模式和DefaultMessageListenerContainer时,预计不会重新传递消息。

Spring文档说明了以下内容:

  

侦听器容器提供以下消息确认   选项:

     
      
  • “sessionAcknowledgeMode”设置为“AUTO_ACKNOWLEDGE”(默认值):   在侦听器执行之前自动确认消息;没有   如果抛出异常,则重新发送。
  •   
  • “sessionAcknowledgeMode”设置   到“CLIENT_ACKNOWLEDGE”:自动消息确认后   成功的听众执行;如果发生例外情况,则不得重新发送   抛出。
  •   
  • “sessionAcknowledgeMode”设置为“DUPS_OK_ACKNOWLEDGE”:懒惰   在监听器执行期间或之后的消息确认;潜在   如果抛出异常,则重新发送。
  •   
  • “sessionTransacted”设置为   “true”:成功收听后的交易确认   执行;如果发生异常,保证重新发送。
  •   

您可以使用最后一个选项,即事务确认,以便在onMessage()方法无法正常返回时重新传递消息。