ActiveMQ - 可以在CLIENT_ACKNOWLEDGE模式下确认单个消息

时间:2016-11-03 10:45:24

标签: jms activemq

根据http://docs.oracle.com/javaee/6/api/javax/jms/Message.html#acknowledge()

  

客户端可以在消费时单独确认每条消息,或者可以选择将消息确认为应用程序定义的组(通过在组的最后收到的消息上调用确认来完成,从而确认所消息的所有消息会议。)

我怎样才能在ActiveMQ中做到这一点?我无法使它发挥作用。

2 个答案:

答案 0 :(得分:4)

这是ActiveMQ客户端的示例,

import javax.jms.Connection;
import javax.jms.JMSException;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.ActiveMQMessageConsumer;
import org.apache.activemq.ActiveMQSession;
import org.apache.activemq.command.ActiveMQTextMessage;

public class SimpleConsumer {

    public static void main(String[] args) throws JMSException {
        Connection conn = null;
        try {
            ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("tcp://localhost:61616");
            conn = cf.createConnection("consumer", "consumer");
            ActiveMQSession session = (ActiveMQSession) conn.createSession(false,
                    ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE);
            ActiveMQMessageConsumer consumer = (ActiveMQMessageConsumer) session
                    .createConsumer(session.createQueue("QUEUE"));
            conn.start();
            ActiveMQTextMessage msg = null;
            while ((msg = (ActiveMQTextMessage) consumer.receive()) != null) {
                System.out.println("Received message is: " + msg.getText());
                msg.acknowledge();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (Exception e) {
                }
            }
        }
    }
}

答案 1 :(得分:-1)

在Matt Pavlovich发表以下评论之后,我正在纠正我的回答。

  

CLIENT_ACKNOWLEDGE:使用此选项,客户端会确认一条消息   通过调用消息的确认方法。承认消耗了   消息自动确认收到所有消息   已经通过其会议提供。

因此,CLIENT_ACKNOWLEDGE选项不能用于向JMS提供程序发送单个邮件的确认。

你可以在这里查看规范:

http://download.oracle.com/otndocs/jcp/jms-2_0-fr-eval-spec/index.html