IBMMQ监听ACK机制

JMS确认3种方式
Auto_ACKnowledge 自动通知 对于同步消费者,Receive方法调用返回,且没有异常发生时,将自动对收到的消息予以确认.对于异步消息,当onMessage方法返回,且没有异常发生时,即对收到的消息自动确认.
Client_AcKnowledge 客户端自行决定通知时机 客户端自行决定通知时机这种方式要求客户端使用javax.jms.Message.acknowledge()方法完成确认.
Dups_OK_ACKnowledge 延时//批量通知 这种确认方式允许JMS不必急于确认收到的消息,允许在收到多个消息之后一次完成确认,与Auto_AcKnowledge相比,这种确认方式在某些情况下可能更有效,因为没有确认,当系统崩溃或者网络出现故障的时候,消息可以被重新传递.
@Component
public  class ConsumerSessionAwareMessageListener implements
        SessionAwareMessageListener {

     @Autowired
     private JmsTemplate jmsTemplate;
     @Autowired
     private Destination queue;

    @Override
    public synchronized  void onMessage(Message message, Session session) throws JMSException {
        // TODO Auto-generated method stub

//      System.out.println(message.toString());;
        TextMessage mapMessage = (TextMessage) message;  
        /**
         * 获取ACK模式
         * 1  AUTO_ACKNOWLEDGE
         * 2  AUTO_ACKNOWLEDGE
         * 3  DUPS_OK_ACKNOWLEDGE
         * 4  SESSION_TRANSACTED
         */
        System.out.println(session.getAcknowledgeMode());

        try {
            System.out.println(mapMessage.getText());
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if(!mapMessage.getText().equals("12345689")){
            /**
             * recover停止并从新启动消息传递
             * 如果消息不是123456789将消息返回队列
             */
            session.recover();
        }else {
            message.acknowledge();
        }
    }

}

你可能感兴趣的:(分布式,MQ消息)