一.消息队列方式入门
1. 在父工程的pom.xml文件中引入ActiveMQ和Spring整合JMS的坐标依赖(项目中已经引入)
<!-- activemq start -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.2.0</version>
</dependency>
<!-- activemq end -->
<!-- spring 与 mq整合 start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.7</version>
</dependency>
<!-- spring 与 mq整合 end -->
2. ActiveMQ的向消息队列中发送消息的入门程序(没有使用Spring整合JMS的方式)
* 具体的代码如下
@Test
public void run1() throws Exception{
// 创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory();
// 使用工厂,创建连接
Connection connection = factory.createConnection();
// 启动连接
connection.start();
// 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
// 创建队列队形
Queue queue = session.createQueue("hello");
// 创建生产者
MessageProducer producer = session.createProducer(queue);
// 创建消息
TextMessage message = session.createTextMessage("美美");
// 发送消息
producer.send(message);
// 提交事务
session.commit();
session.close();
connection.close();
}
3. ActiveMQ从消息队列中获取消息
* 具体的代码如下
@Test
public void run2() throws Exception{
// 创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory();
// 使用工厂,创建连接
Connection connection = factory.createConnection();
// 启动连接
connection.start();
// 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
// 创建队列队形
Queue queue = session.createQueue("hello");
// 创建消费者
MessageConsumer consumer = session.createConsumer(queue);
// 接收消息
TextMessage message = (TextMessage)consumer.receive();
System.out.println(message.getText());
// 提交事务
session.commit();
session.close();
connection.close();
}
4. 使用监听器的方式,从队列中消费消息
/**
* 使用监听器的方式消费消息
* @throws Exception
*/
@Test
public void run3() throws Exception{
// 创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory();
// 使用工厂,创建连接
Connection connection = factory.createConnection();
// 启动连接
connection.start();
// 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建队列队形
Queue queue = session.createQueue("hello");
// 创建消费者
MessageConsumer consumer = session.createConsumer(queue);
// 给消费者添加监听器
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message msg) {
TextMessage message = (TextMessage) msg;
try {
System.out.println(message.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
while(true){}
// 使用监听器的方式不能关闭,需要监听器一直工作
// session.commit();
// session.close();
// connection.close();
}
二.消息订阅方式入门
1. 发送消息的入门程序
/**
* 订阅方式发送消息
* @throws Exception
*/
@Test
public void run4() throws Exception{
// 创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory();
// 使用工厂,创建连接
Connection connection = factory.createConnection();
// 启动连接
connection.start();
// 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
// 创建消息订阅
Topic topic = session.createTopic("helloTopic");
// 创建生产者
MessageProducer producer = session.createProducer(topic);
// 创建消息,一组可以存储key value的消息
MapMessage message = session.createMapMessage();
message.setString("phone", "119");
message.setString("code", "123456");
// 发送消息
producer.send(message);
// 提交事务
session.commit();
session.close();
connection.close();
}
2. 消费者的代码如下
/**
* 消费者
* @throws Exception
*/
@Test
public void run5() throws Exception{
// 创建连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory();
// 使用工厂,创建连接
Connection connection = factory.createConnection();
// 启动连接
connection.start();
// 使用连接,创建会话,true表示开始事务,代码执行后需要提供事务
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建消息订阅
Topic topic = session.createTopic("helloTopic");
// 创建消费者
MessageConsumer consumer = session.createConsumer(topic);
// 设置监听器
consumer.setMessageListener(new MessageListener() {
public void onMessage(Message msg) {
MapMessage message = (MapMessage) msg;
try {
String phone = message.getString("phone");
String code = message.getString("code");
System.out.println(phone + ":" + code);
} catch (JMSException e) {
e.printStackTrace();
}
}
});
while(true){
}
}