安裝:使用服務安裝,不用每次啓動“黑匣子”。
啓動之後瀏覽器可以進入後臺管理:
代碼演示兩種消息模式:
pom.xml:
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
</dependencies>
隊列消息模式:
生產方:
public class AppProducer {
private static final String url = "tcp://127.0.0.1:61616";
private static final String queueName = "queue-test";
public static void main(String[] args) throws JMSException {
/** 1.創建ConnectionFactory */
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
/** 2.創建Connection */
Connection connection = connectionFactory.createConnection();
/** 3.啓動 */
connection.start();
/** 4.創建會話 */
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
/** 5.創建目標 */
Destination destination = session.createQueue(queueName);
/** 6.創建一個生產者 */
MessageProducer producer = session.createProducer(destination);
for (int i = 0; i < 100; i++) {
/** 7.創建消息 */
TextMessage textMessage = session.createTextMessage("test"+i);
/** 8.發佈消息 */
producer.send(textMessage);
System.out.println("發佈消息"+textMessage.getText());
}
/** 9.關閉連接 */
connection.close();
}
}
運行可以看到後臺:
消費方:
public class AppConsumer {
private static final String url = "tcp://127.0.0.1:61616";
private static final String queueName = "queue-test";
public static void main(String[] args) throws JMSException {
/** 1.創建ConnectionFactory */
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
/** 2.創建Connection */
Connection connection = connectionFactory.createConnection();
/** 3.啓動 */
connection.start();
/** 4.創建會話 */
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
/** 5.創建目標 */
Destination destination = session.createQueue(queueName);
/** 6.創建一個消費者 */
MessageConsumer consumer = session.createConsumer(destination);
/** 7.創建一個監聽器 */
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
TextMessage message1 = (TextMessage) message;
try {
System.out.print("接收消息:"+message1.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
/** 8.關閉連接 */
// connection.close();
}
}
多個消費者運行結果:接收的消息是不同的,基本上均攤
主題模式:
生產方:
public class AppProducer {
private static final String url = "tcp://127.0.0.1:61616";
private static final String topicName = "topic-test";
public static void main(String[] args) throws JMSException {
/** 1.創建ConnectionFactory */
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
/** 2.創建Connection */
Connection connection = connectionFactory.createConnection();
/** 3.啓動 */
connection.start();
/** 4.創建會話 */
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
/** 5.創建目標 */
Destination destination = session.createTopic(topicName);
/** 6.創建一個生產者 */
MessageProducer producer = session.createProducer(destination);
for (int i = 0; i < 100; i++) {
/** 7.創建消息 */
TextMessage textMessage = session.createTextMessage("test"+i);
/** 8.發佈消息 */
producer.send(textMessage);
System.out.println("發佈消息"+textMessage.getText());
}
/** 9.關閉連接 */
connection.close();
}
}
運行可看到:
消費方:
public class AppConsumer {
private static final String url = "tcp://127.0.0.1:61616";
private static final String topicName = "topic-test";
public static void main(String[] args) throws JMSException {
/** 1.創建ConnectionFactory */
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
/** 2.創建Connection */
Connection connection = connectionFactory.createConnection();
/** 3.啓動 */
connection.start();
/** 4.創建會話 */
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
/** 5.創建目標 */
Destination destination = session.createTopic(topicName);
/** 6.創建一個消費者 */
MessageConsumer consumer = session.createConsumer(destination);
/** 7.創建一個監聽器 */
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message message) {
TextMessage message1 = (TextMessage) message;
try {
System.out.print("接收消息:"+message1.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
/** 8.關閉連接 */
// connection.close();
}
}
如果先發布消息,再運行消費方接收消息,消費方是接收不到任何信息的,消費方需要先訂閱,才能接收到消息。
主題模式多個消費方收到全部的消息,是完全一樣的。