JMS规范定义了2种消息传输模式:持久传送模式和非持久传输模式。
DeliveryMode.PERSISTENT 持久化
DeliveryMode.NON_PERSISTENT 非持久化
通过生产者来设置
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
持久化信息:
表示当生产者发送信息时即使服务器崩溃,或者出现其他故障时,只要重启服务器
消息任然可以送到消费者,保证了重要消息的送达率。
非持久化信息:
它只能在一切条件顺利的情况下,消息才能保证被送达。
测试源码:
生产者代码:
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class Sender {
/**
* @param args
* @throws JMSException
*/
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");
Connection connection=connectionFactory.createConnection();
connection.start();
Queue queue=new ActiveMQQueue("testQueue");
Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//第一组测试DeliveryMode.PERSISTENT
MessageProducer producer=session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT); //这里设置了的消息类型为持久类型
producer.send(session.createTextMessage("this is presisitent message"));
//第二组测试DeliveryMode.NON_PERSISTENT
MessageProducer producer1=session.createProducer(queue);
producer1.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//这里设置的消息类型为为非持久化的类型
producer1.send(session.createTextMessage("this is no presisient message"));
//session.commit();
System.out.println("消息发送成功。");
}
}
消费者代码:
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class Receiver {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory=new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,”tcp://localhost:61616”);
Connection connection=connectionFactory.createConnection();
connection.start();
Queue queue=new ActiveMQQueue("testQueue");
Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer=session.createConsumer(queue);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message arg0) {
try {
System.out.println("接受到了消息"+((TextMessage)arg0).getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}