DeliveryMode:
消息的发送模式:PERSISTENT(持久化消息) 或NON_PERSISTENT(非持久化消息)。前者表示消息在被消费之前,如果JMS提供者DOWN了,重新启动后消息仍然存在。后者在这种情况下表示消息会被丢失。可以通过下面的方式设置:
Producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
public class Test5_1 {
public static void main(String[] args) throws JMSException {
//建立与消息服务器的连接:
ConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
//创建一个队列
Queue queue = new ActiveMQQueue("testQueue");
//创建一个会话
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//创建一个生产者:
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Message message = session.createTextMessage( " 一个持久化消息。" );
producer.send(message);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
message = session.createTextMessage( " 一个非持久化消息。" );
producer.send(message);
System.out.println("成功将消息发送到服务器。");
}
}
运行完上述代码后,然后down掉JMS提供者,在运行下面一段代码:
public class Test5_2 {
public static void main(String[] args) throws JMSException {
//建立与消息服务器的连接:
ConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer comsumer = session.createConsumer(queue);
comsumer.setMessageListener(new MessageListener(){
public void onMessage(Message message) {
try {
System.out.println("消费者得到消息性质为: " + ((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
结果:
消费者得到消息性质为: 一个持久化消息。