1. 新建一个名为JMSActiveMQObjectMessage的Java项目, 同时拷入相关jar包
2. 编辑User.java
package com.jms.activemq.tom;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
private String password;
public User() {
}
public User(String userName, String password) {
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [userName=" + userName + ", password=" + password + "]";
}
}
3. 编辑TopicObjectMessageProducer.java
package com.jms.activemq.tom;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class TopicObjectMessageProducer {
// 默认连接用户名
private static final String dftUsr = ActiveMQConnection.DEFAULT_USER;
// 默认用户密码
private static final String dftPwd = ActiveMQConnection.DEFAULT_PASSWORD;
// 默认连接地址
private static final String dftUrl = ActiveMQConnection.DEFAULT_BROKER_URL;
// 队列名称
private static final String topicName = "topicObjMsg";
public static void main(String[] args) {
// 1. 创建一个连接工厂
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory(dftUsr, dftPwd, dftUrl);
// 设置所有对所有序列化包都信任
cf.setTrustAllPackages(true);
// 连接对象
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。这里我们创建一个名为topicObjMsg的主题。
Destination destination = session.createTopic(topicName);
// 6. 消息生产者
MessageProducer producer = session.createProducer(destination);
// 7. 创建文本消息和发送消息
ObjectMessage message = session.createObjectMessage();
message.setObject(new User("zhangsan", "123456"));
producer.send(message);
System.out.println("发送: " + message.getObject());
} 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. 编辑TopicObjectMessageConsumer.java
package com.jms.activemq.tom;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class TopicObjectMessageConsumer {
// 默认连接用户名
private static final String dftUsr = ActiveMQConnection.DEFAULT_USER;
// 默认用户密码
private static final String dftPwd = ActiveMQConnection.DEFAULT_PASSWORD;
// 默认连接地址
private static final String dftUrl = ActiveMQConnection.DEFAULT_BROKER_URL;
// 队列名称
private static final String topicName = "topicObjMsg";
public static void main(String[] args) {
// 1. 创建一个连接工厂
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory(dftUsr, dftPwd, dftUrl);
// 设置所有对所有序列化包都信任
cf.setTrustAllPackages(true);
// 连接对象
Connection conn = null;
// 会话对象
Session session = null;
try {
// 2. 创建连接
conn = cf.createConnection();
// 3. 创建会话
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4. 创建消息目的地。如果是点对点, 那么它的实现是Queue; 如果是订阅模式, 那它的实现是Topic。这里我们创建一个名为topicObjMsg的主题。
Destination destination = session.createTopic(topicName);
// 5. 消息消费者
MessageConsumer consumer = session.createConsumer(destination);
// 6. 接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message msg) {
try {
User user = (User) ((ObjectMessage) msg).getObject();
System.out.println("接收: " + user);
} catch (JMSException e) {
e.printStackTrace();
}
}
});
// 7. 启动连接, 准备开始接收消息
conn.start();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
5. 运行TopicObjectMessageConsumer.java, 等待接收消息
6. 运行TopicObjectMessageProducer.java
7. TopicObjectMessageConsumer.java接收到消息, 并且继续等待接收消息, 直到退出应用程序。
8. 查看后台管理