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("消息消費完成");
}
}