引入jar包
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.0</version>
</dependency>
1.队列模式:
package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @Author: wangqiang
* @Date: 2019/1/28 11:47
* @Version 1.0
* 消息生产者
*/
public class QueueProducer {
// activemq服务器的url地址,默认通信端口为61616
private static final String URL = "tcp://localhost:61616";
// 队列的名称
private static final String QUEUE_NAME = "wangqiang";
public static void main(String[] args) throws JMSException {
// 1.创建连接工厂对象(ConnectionFactory)
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("wangqiang","wangqiang",URL);
// 2.创建连接对象(Connection)
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建session会话,第一参数表示启用事务处理,第二个参数表示启动哪种应答模式,这里启用的是自动应答
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建目的地(destination)
Destination destination = session.createQueue(QUEUE_NAME);
// 6.创建生产者
MessageProducer producer = session.createProducer(destination);
// 7.创建消息,这里创建的是简单的文本消息体
TextMessage textMessage = session.createTextMessage("新年快乐");
// 8.使用消息生产者往目的地发送消息
producer.send(destination, textMessage);
System.out.println("消息发送成功:" + textMessage.getText());
// 9.关闭连接
connection.close();
}
}
package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @Author: wangqiang
* @Date: 2019/1/28 13:34
* @Version 1.0
* 消息消费者
*/
public class QueueConsumer {
private static final String QUEUE_NAME = "wangqiang";
public static void main(String[] args) throws Exception {
// 1.创建一个连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("wangqiang","wangqiang","tcp://localhost:61616");
// 2.使用工厂创建Connection
Connection connection = factory.createConnection();
// 3.开启连接
connection.start();
// 4.创建一个Session
// 第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
// 第二个参数:应答模式(自动/手动)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.通过Session创建一个Destination对象,两种形式:queue、topic
Queue queue = session.createQueue(QUEUE_NAME);
// 6.通过Session创建一个Consumer对象
MessageConsumer consumer = session.createConsumer(queue);
// 7.接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
// 8.处理消息
TextMessage textMessage = (TextMessage)message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//为了正常测试,此处使用阻塞,使监听器能持续监听消息
System.in.read();
// 9.关闭资源
consumer.close();
session.close();
connection.close();
}
}
运行消息生产者:
运行消息消费者:
访问:http://localhost:8161/admin/queues.jsp
主题订阅模式:
package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @Author: wangqiang
* @Date: 2019/1/28 11:47
* @Version 1.0
* 消息生产者
*/
public class TopicProducer {
// activemq服务器的url地址,默认通信端口为61616
private static final String URL = "tcp://localhost:61616";
// 队列的名称
private static final String TOPIC_NAME = "wangqiang";
public static void main(String[] args) throws JMSException {
// 1.创建连接工厂对象(ConnectionFactory)
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("wangqiang","wangqiang",URL);
// 2.创建连接对象(Connection)
Connection connection = connectionFactory.createConnection();
// 3.启动连接
connection.start();
// 4.创建session会话,第一参数表示启用事务处理,第二个参数表示启动哪种应答模式,这里启用的是自动应答
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.创建目的地(destination)
Topic topic = session.createTopic(TOPIC_NAME);
// 6.创建生产者
MessageProducer producer = session.createProducer(topic);
// 7.创建消息,这里创建的是简单的文本消息体
TextMessage textMessage = session.createTextMessage("孙海涛是个大帅哥");
// 8.使用消息生产者往目的地发送消息
producer.send(topic, textMessage);
System.out.println("消息发送成功:" + textMessage.getText());
// 9.关闭连接
connection.close();
}
}
package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @Author: wangqiang
* @Date: 2019/1/28 13:34
* @Version 1.0
* 消息消费者1
*/
public class TopicConsumer1 {
private static final String TOPIC_NAME = "wangqiang";
public static void main(String[] args) throws Exception {
// 1.创建一个连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("wangqiang","wangqiang","tcp://localhost:61616");
// 2.使用工厂创建Connection
Connection connection = factory.createConnection();
// 3.开启连接
connection.start();
// 4.创建一个Session
// 第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
// 第二个参数:应答模式(自动/手动)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.通过Session创建一个Destination对象,两种形式:queue、topic
Topic topic = session.createTopic(TOPIC_NAME );
// 6.通过Session创建一个Consumer对象
MessageConsumer consumer = session.createConsumer(topic);
// 7.接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
// 8.处理消息
TextMessage textMessage = (TextMessage)message;
try {
System.out.println("订阅者模式-消费者1已经启动");
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//为了正常测试,此处使用阻塞,使监听器能持续监听消息
System.in.read();
// 9.关闭资源
consumer.close();
session.close();
connection.close();
}
}
package com.jackrain.nea.cp.mqdemo;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
/**
* @Author: wangqiang
* @Date: 2019/1/28 13:34
* @Version 1.0
* 消息消费者2
*/
public class TopicConsumer2 {
private static final String TOPIC_NAME = "wangqiang";
public static void main(String[] args) throws Exception {
// 1.创建一个连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("wangqiang","wangqiang","tcp://localhost:61616");
// 2.使用工厂创建Connection
Connection connection = factory.createConnection();
// 3.开启连接
connection.start();
// 4.创建一个Session
// 第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
// 第二个参数:应答模式(自动/手动)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.通过Session创建一个Destination对象,两种形式:queue、topic
Topic topic = session.createTopic(TOPIC_NAME );
// 6.通过Session创建一个Consumer对象
MessageConsumer consumer = session.createConsumer(topic);
// 7.接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
// 8.处理消息
TextMessage textMessage = (TextMessage)message;
try {
System.out.println("订阅者模式-消费者2已经启动");
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//为了正常测试,此处使用阻塞,使监听器能持续监听消息
System.in.read();
// 9.关闭资源
consumer.close();
session.close();
connection.close();
}
}
先运行消息订阅者,在运行消息生产者: