public void sendSimpleMessage(String receiver, String sender) {
try {
Message message = jmsTemplate.receive(receiver);
System.out.println(message.getIntProperty("OlQuestionId"));
jmsTemplate.send(sender, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
throw new JMSException("Exception"+message.getIntProperty("OlQuestionId"));
}
});
} catch (JmsException jmsException) {
System.out.println(jmsException);
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
如果在发送收到的消息时发生异常,则会丢失消息,因为已经收到消息。
对于Jms模板配置,我有:
@Bean
public JmsTemplate jmsTemplate() throws JMSException {
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
//template.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
template.setSessionTransacted(true);
template.setDeliveryMode(2);
return template;
请你告诉我这样的方式,以便我可以在一次会议中接收和发送。 注意:我在删除sessionTransacted时也尝试过Session.ClientAcknowledge,如果有异常,我没有确认消息,但仍然有消息丢失。
由于
答案 0 :(得分:2)
您可以使用客户端确认模式。该消息将一直保留,直到您决定使其消失。
message.acknowledge();
请参阅How to Give manual Acknowledge using JmsTemplate and delete message from Rabbitmq queue