public class ProducerTopic {
public static void main(String[] args) throws JMSException {
String user = ActiveMQConnectionFactory.DEFAULT_USER;
String password = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
String brokerUrl = "tcp://hadoop2:61616";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, brokerUrl);
/**
* 創建連接並開啓
*/
Connection connection = connectionFactory.createConnection();
/**
* 創建session
* 參數1:不啓動事務
* 參數2:簽收模式爲自動簽收
*/
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
/**
* 創建topic或者queue
*/
Topic topic_2 = session.createTopic("topic_2");
/**
* 創建生產者
*/
MessageProducer producer = session.createProducer(topic_2);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
/**
* 注意,一定要在設置了持久化之後再啓動connection
*/
connection.start();
/**
* 生產數據
*/
for (int i = 0; i < 10; i++) {
TextMessage textMessage = session.createTextMessage();
textMessage.setText("hello java " + i);
producer.send(textMessage);
}
/**
* 釋放連接
*/
connection.close();
}
}
public class ConsumerTopic {
public static void main(String[] args) {
String user = ActiveMQConnectionFactory.DEFAULT_USER;
String password = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
String brokerUrl = "tcp://hadoop2:61616";
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, brokerUrl);
Connection connection = null;
try {
/**
* 創建連接並開啓,註冊一個客戶號,讓broker知道是誰訂閱了。
* 需要在producer發消息之前,先運行一下此程序,目的是註冊訂閱信息,然後就可以關閉程序
* 這樣就可以做到再次啓動時,收到離線的消息。
*/
connection = connectionFactory.createConnection();
connection.setClientID("c1");
/**
* 創建session
* 參數1:不啓動事務
* 參數2:簽收模式爲自動簽收
*/
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
/**
* 創建topic或者queue
*/
Topic topic_2 = session.createTopic("topic_2");
TopicSubscriber durableSubscriber = session.createDurableSubscriber(topic_2, "somebody");
connection.start();
/**
* 消費數據
*/
while (true) {
TextMessage textMessage = (TextMessage) durableSubscriber.receive();
System.out.println("消費消息:" + textMessage.getText());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}