安装:使用服务安装,不用每次启动“黑匣子”。
启动之后浏览器可以进入后台管理:
代码演示两种消息模式:
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();
}
}
如果先发布消息,再运行消费方接收消息,消费方是接收不到任何信息的,消费方需要先订阅,才能接收到消息。
主题模式多个消费方收到全部的消息,是完全一样的。