使用客户端确认模式,必须要创建无事务session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
CLIENT_ACKNOWLEDGE:客户端确认模式。会话对象依赖于应用程序对被接收的消息调用一个acknowledge()方法。一旦这个方法被调用,会话会确认该消息的接收,ActiveMQ服务器会认为消息成功接收。
以下是客户端的测试代码,每次执行一次,都会收到一个消息。因为没有调用消息的确认方法,ActiveMQ会认为消息没有成功接收。
String url = "tcp://localhost:61616"; String userName = "system"; String password = "manager"; ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName, password, url); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE); Destination destination = session.createQueue("test_queue"); MessageConsumer consumer = session.createConsumer(destination); // 消息消费者接收消息 consumer.setMessageListener(new MessageListener() { @Override public void onMessage(Message msg) { TextMessage message = (TextMessage) msg; try { //确认消息已经成功接收 //msg.acknowledge(); System.out.println("收到消息:" + message.getText()); } catch (JMSException e) { e.printStackTrace(); } } });