代码之家  ›  专栏  ›  技术社区  ›  Prashant Kumar

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

  •  1
  • Prashant Kumar  · 技术社区  · 7 年前
    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;
    

    你能告诉我怎么做,这样我可以在一个单一的会议接收和发送。 注意:我也试过了。ClientAcknowledge在删除sessionTransacted时,如果出现异常,我不会确认消息,但仍然会丢失消息。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  3
  •   losusovic    7 年前

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

    message.acknowledge();
    

    看见 How to Give manual Acknowledge using JmsTemplate and delete message from Rabbitmq queue