8.Queue的持久化及非持久化(消息可靠性)

import java.io.IOException;

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;


class Constants{
	static final String ACTIVE_MQ_BIND_URL = "tcp://xxx.xxx.xxx.xxx:61616";
	static final String ACTIVE_MQ_QUEUE_NAME = "Durable-Queue-1";
}


public class DurableQueueProducer {
	
	/**
	 * 1.设置queue持久化,消息可靠性高,服务器宕机消息依然存在 ,ActiveMQ queue默认是持久化的
	 *   producer.setDeliveryMode(DeliveryMode.PERSISTENT);
	 * 2.设置非持久化
	 *   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
	 */
	public static void main(String[] args) {
		try {
			ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(Constants.ACTIVE_MQ_BIND_URL);
			Connection connection = factory.createConnection();
			connection.start();
			Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			Queue queue = session.createQueue(Constants.ACTIVE_MQ_QUEUE_NAME);
			MessageProducer producer = session.createProducer(queue);
			producer.setDeliveryMode(DeliveryMode.PERSISTENT);
			// producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
			for (int i = 1; i <= 5; i++) {
				TextMessage message = session.createTextMessage("持久化queue消息" + i);
				producer.send(message);
			}
			producer.close();
			session.close();
			connection.close();
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
}


class DurableQueueConsumer {
	public static void main(String[] args) {
		try {
			ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(Constants.ACTIVE_MQ_BIND_URL);
			Connection connection = factory.createConnection();
			connection.start();
			Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			Queue queue = session.createQueue(Constants.ACTIVE_MQ_QUEUE_NAME);
			MessageConsumer consumer = session.createConsumer(queue);
			consumer.setMessageListener(new MessageListener() {
				@Override
				public void onMessage(Message message) {
					if (message != null && message instanceof TextMessage) {
						TextMessage textMessage = (TextMessage) message;
						try {
							System.out.println("消费持久化queue消息" + textMessage.getText());
						} catch (JMSException e) {
							e.printStackTrace();
						}
					}
				}
			});
			System.in.read();
			consumer.close();
			session.close();
			connection.close();
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

你可能感兴趣的:(ActiveMQ)