1. 新建一个名为JMSActiveMQTextMessage的Java项目, 同时拷入相关jar包
2. 相关jar包可以在apache-activemq-5.16.1\lib目录下找到
3. 编辑QueueTextMessageProducer.java
package com.jmsapp.qtm;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class QueueTextMessageProducer {
// 默认连接用户名
private static final String dftUsr = ActiveMQConnection.DEFAULT_USER;
// 默认用户密码
private static final String dftPwd = ActiveMQConnection.DEFAULT_PASSWORD;
// 默认连接地址常量ActiveMQConnection.DEFAULT_BROKER_URL, 值是failover://tcp://localhost:61616
// 服务器地址
private static final String dftUrl = "failover://tcp://192.168.25.138:61616";
// 队列名称
private static final String queueName = "queueTextMsg";
public static void main(String[] args) {
// 1. 创建一个连接工厂
ConnectionFactory cf = new ActiveMQConnectionFactory(dftUsr, dftPwd, dftUrl);
// 连接对象
Connection conn = null;
// 会话对象
Session session = null;
try {
// 2. 创建连接
conn = cf.createConnection();
// 3. 启动连接
conn.start();
// 4. 创建会话
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5. 创建消息目的地。如果是点对点, 那么它的实现是Queue; 如果是订阅模式, 那它的实现是Topic。这里我们创建一个名为queueTextMsg的消息队列。
Destination destination = session.createQueue(queueName);
// 6. 消息生产者
MessageProducer producer = session.createProducer(destination);
// 7. 创建文本消息和发送消息
for(int i = 0; i < 10; i++) {
TextMessage message = session.createTextMessage();
message.setText("JMS TextMessage类型的消息 " + i);
producer.send(message);
System.out.println("发送: " + message.getText());
}
} catch (JMSException e) {
e.printStackTrace();
} finally {
try {
if (session != null) {
session.close();
}
} catch (JMSException e1) {
e1.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
}
4. 运行QueueTextMessageProducer.java
5. 管理后台查看
6. 编辑QueueTextMessageConsumer1.java
package com.jmsapp.qtm;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class QueueTextMessageConsumer1 {
// 默认连接用户名
private static final String dftUsr = ActiveMQConnection.DEFAULT_USER;
// 默认用户密码
private static final String dftPwd = ActiveMQConnection.DEFAULT_PASSWORD;
// 服务器地址
private static final String dftUrl = "failover://tcp://192.168.25.138:61616";
// 队列名称
private static final String queueName = "queueTextMsg";
public static void main(String[] args) {
// 1. 创建一个连接工厂
ConnectionFactory cf = new ActiveMQConnectionFactory(dftUsr, dftPwd, dftUrl);
// 连接对象
Connection conn = null;
// 会话对象
Session session = null;
try {
// 2. 创建连接
conn = cf.createConnection();
// 3. 创建会话
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4. 创建消息目的地。如果是点对点, 那么它的实现是Queue; 如果是订阅模式, 那它的实现是Topic。这里我们创建一个名为queueTextMsg的消息队列。
Destination destination = session.createQueue(queueName);
// 5. 消息消费者
MessageConsumer consumer = session.createConsumer(destination);
// 6. 启动连接, 准备开始接收消息
conn.start();
// 7. 接收消息
while(true) {
TextMessage message = (TextMessage) consumer.receive(3000);
if(message == null) {
break;
}
System.out.println("接收: " + message.getText());
}
} catch (JMSException e) {
e.printStackTrace();
} finally {
try {
if (session != null) {
session.close();
}
} catch (JMSException e1) {
e1.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
}
7. 运行QueueTextMessageConsumer1.java
8. 管理后台查看
9. 编辑QueueTextMessageConsumer2.java, 创建消息监听器异步接收消息
package com.jmsapp.qtm;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class QueueTextMessageConsumer2 {
// 默认连接用户名
private static final String dftUsr = ActiveMQConnection.DEFAULT_USER;
// 默认用户密码
private static final String dftPwd = ActiveMQConnection.DEFAULT_PASSWORD;
// 服务器地址
private static final String dftUrl = "failover://tcp://192.168.25.138:61616";
// 队列名称
private static final String queueName = "queueTextMsg";
public static void main(String[] args) {
// 1. 创建一个连接工厂
ConnectionFactory cf = new ActiveMQConnectionFactory(dftUsr, dftPwd, dftUrl);
try {
// 2. 创建连接
Connection conn = cf.createConnection();
// 3. 创建会话
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4. 创建消息目的地。如果是点对点, 那么它的实现是Queue; 如果是订阅模式, 那它的实现是Topic。这里我们创建一个名为queueTextMsg的消息队列。
Destination destination = session.createQueue(queueName);
// 5. 消息消费者
MessageConsumer consumer = session.createConsumer(destination);
// 6. 接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message msg) {
TextMessage message = (TextMessage) msg;
try {
System.out.println("接收: " + message.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
// 7. 启动连接, 准备开始接收消息
conn.start();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
10. 运行QueueTextMessageConsumer2.java, 没有消息它会一直等待
11. 再次运行QueueTextMessageProducer.java, QueueTextMessageConsumer2.java接收到了QueueTextMessageProducer.java发送的消息, 而且QueueTextMessageConsumer2.java还处于等待接收消息状态, 直到退出程序。