JMS模板,如何从一个队列接收消息并使用JMS模板发送给另一个队列

时间:2017-11-10 09:11:38

标签: jms spring-jms jmstemplate

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,如果有异常,我没有确认消息,但仍然有消息丢失。

由于

1 个答案:

答案 0 :(得分:2)

您可以使用客户端确认模式。该消息将一直保留,直到您决定使其消失。

message.acknowledge();

请参阅How to Give manual Acknowledge using JmsTemplate and delete message from Rabbitmq queue