5.ActiveMQ Consumer編碼(topic)

1.代碼

import java.io.IOException;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;

public class ActivemqConsumer {
	private static final String ACTIVE_MQ_BIND_URL = "tcp://xxx.xxx.xxx.xxx:61616";
	private static final String ACTIVE_MQ_TOPIC_NAME = "msg_topic_1";

	public static void main(String[] args) {
		try {
			// 1創建鏈接工廠
			ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ACTIVE_MQ_BIND_URL);
			// 2.獲得鏈接
			Connection connection = connectionFactory.createConnection();
			connection.start();
			// 3.創建會話session prama1:事務 prama2:簽收
			Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			// 4.創建Destination,queue or topic
			Topic topic = session.createTopic(ACTIVE_MQ_TOPIC_NAME);
			// 5.創建消費者
			MessageConsumer consumer = session.createConsumer(topic);

			// 同步阻塞方式receive()接收
			// consumerByReceive(connection,session,consumer);
			//通過監聽器來接收消息
			consumerByListener(session,consumer,connection);

		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

	
	
	private static void consumerByListener(
			Session session, MessageConsumer consumer, Connection connection) {
		try {
			consumer.setMessageListener(new MessageListener() {

				@Override
				public void onMessage(Message message) {
					if (null != message && message instanceof TextMessage) {
						TextMessage textMessage = (TextMessage) message;
						try {
							System.out.println("consumerByListener消費:" + 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();
		}
	}

	@SuppressWarnings("unused")
	private static void consumerByReceive(
			Connection connection, Session session, MessageConsumer consumer)
			throws JMSException {
		/**
		 * 同步阻塞方式receive()接收 
		 * receive()一直阻塞 
		 * receive(long timeout)超時之前一直阻塞
		 */
		while (true) {
			TextMessage message = (TextMessage) consumer.receive(1000L);
			if (message != null) {
				System.out.println("consumerByReceive消費:" + message.getText());
			} else {
				break;
			}
		}
		// 9.關閉資源
		consumer.close();
		session.close();
		connection.close();
		System.out.println("消息消費完成");
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章