demo地址: https://blog.csdn.net/a639735331/article/details/72594194
所需各要素:
1、首先要有连接的工厂、用来创建连接
ConnectionFactory connectionFactory
2、 连接所需的对象
// 客户端 与 jms procuder 的连接
Connection conn = null ;
3、发送与接收消息的线程
// 一个发送或接收消息的线程
Session session
4、队列
// 队列 - 消息的存放地
Destination destination
等等。
访问-管理与观察队列的平台:http://localhost:8161/
如果想要管理队列,需要输入账户密码分别为为: admin/admin
maven项目 需要依赖包:
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.3</version>
</dependency>
其中需要知晓的消息发送方:
虽然调用了 send(message) 方法,
但是真正的提交发送为 session.commit();
贴上代码:
发送端:
/**
*
*/
package com.william_wei.activitymq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
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;
/**
* Description:
* @author xhw
* @version 1.0
* <pre>
* Modification History:
* Date Author Version Description
------------------------------------------------------------------
* 2018年9月18日 xhw 1.0 1.0 Version
* </pre>
*/
public class Sender {
public static void main(String[] args) {
//连接工厂 jms 用他 创建 连接
ConnectionFactory connectionFactory ;
// 客户端 与 jms procuder 的连接
Connection conn = null ;
// 一个发送或接收消息的线程
Session session ;
// 队列 - 消息的存放地
Destination destination ;
// 消息发送者
MessageProducer messageProducer;
connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD ,
"tcp://localhost:61616");
try {
conn = connectionFactory.createConnection() ;
conn.start();
// 创建 消息 通讯的 线程
session = conn.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
//创建队列
destination = session.createQueue("FirstQueue");
// 传将发送消息这
messageProducer = session.createProducer(destination);
// 设置 不持久化 随实际项目而定
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 封装的发送信息的方法
sendMessage( session,messageProducer );
// 提交消息发送请求
session.commit();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
conn.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
/**
* @throws JMSException
*
*/
public static void sendMessage(Session session , MessageProducer messageProducer) throws JMSException{
for (int i = 0; i < 5; i++) {
TextMessage message = session.createTextMessage("ActiveMq 发送的消息" + i );
// 发送消息到目的地方
System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);
messageProducer.send(message);
}
}
}
消费端:
/**
*
*/
package com.william_wei.activitymq;
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;
import org.apache.activemq.Message;
/**
* Description:
* @author xuhongwei
* @version 1.0
* <pre>
* Modification History:
* Date Author Version Description
------------------------------------------------------------------
* 2018年9月18日 xuhongwei 1.0 1.0 Version
* </pre>
*/
public class Receiver {
public static void main(String[] args) {
// ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory ;
//Connection :JMS 客户端到JMS Provider 的连接
Connection conn = null ;
// Session: 一个发送或接收消息的线程
Session session;
// Destination :消息队列 消息的获取地
Destination destination;
// 消息 接收者
MessageConsumer consumer;
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
try {
//创建连接
conn = connectionFactory.createConnection();
// 开始连接
conn.start();
// 创建回话
session = conn.createSession(Boolean.FALSE,
Session.AUTO_ACKNOWLEDGE);
// 获取队列 注意参数值FirstQueue是一个服务器的queue,须在在ActiveMq的console配
destination = session.createQueue("FirstQueue");
consumer = session.createConsumer(destination);
while(true){
TextMessage message = (TextMessage) consumer.receive();
if(message !=null ){
System.out.println("收到消息" + message.getText());
}else{
break;
}
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
conn.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}