1.先开启MQ服务
包结构:
2.创建发送者
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;
/**
* 消息的生产者
* http://localhost:8161/admin/queues.jsp监控平台访问地址
* @author
* @date
*/
public class Product {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;// 默认连接用户名
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;// 默认连接密码
private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;// 默认连接地址
private static final int SENDNUM = 10;// 发送的消息数量
public static void main(String[] args) {
ConnectionFactory connectionFactory;// 连接工厂
Connection connection = null;// 连接
Session session;// 会话 接受或者发送消息的线程
Destination destination;// 消息的目的地
MessageProducer messageProducer;// 消息生产者(接口 目标)
// 实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(Product.USERNAME,Product.PASSWORD, Product.BROKEURL);
try {
connection = connectionFactory.createConnection();// 通过连接工厂获取连接
connection.start();// 启动连接
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);// 创建session
destination = session.createQueue("java0901");// 创建一个名称为java0901的消息队列(可以理解为qq群的群名)
messageProducer = session.createProducer(destination);// 创建消息生产者
sendMessage(session, messageProducer);// 发送消息
session.commit();//最后要commint一下要不消息进不到消息管道中
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
发送消息
/**
* 发送消息
* @param session
* @param messageProducer 消息生产者
* @throws Exception
*/
public static void sendMessage(Session session,
MessageProducer messageProducer) throws Exception {
for (int i = 0; i < Product.SENDNUM; i++) { // 创建一条文本消息
TextMessage message = session.createTextMessage("ActiveMQ 发送消息" + i);
System.out.println("发送消息:Activemq 发送消息" + i);
// 通过消息生产者发出消息
}
}
接收消息
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;
/**
* 消息的接收者、消费者
* http://localhost:8161/admin/queues.jsp
* @author
* @date
*
*/
public class Consumer {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;// 默认连接用户名
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;// 默认连接密码
private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;// 默认连接地址
public static void main(String[] args) {
ConnectionFactory connectionFactory;// 连接工厂
Connection connection = null;// 连接
Session session;// 会话 接受或者发送消息的线程
Destination destination;// 消息的目的地
MessageConsumer messageConsumer;// 消息的消费者
// 实例化连接工厂
connectionFactory = new ActiveMQConnectionFactory(Consumer.USERNAME,Consumer.PASSWORD, Consumer.BROKEURL);
try {
connection = connectionFactory.createConnection();// 通过连接工厂获取连接
connection.start();// 启动连接
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 创建session
destination = session.createQueue("java0901");// 创建一个连接nihao1的消息队列
messageConsumer = session.createConsumer(destination);// 创建消息消费者
//一直处于接收状态,有消息就接收
while (true) {
TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);
if (textMessage != null) {
System.out.println("收到的消息:" + textMessage.getText());
} else {
break;
}
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}