注意:
生产者
本案例中使用的是配置文件中的地址和端口,不要被main方法开头的地方误解了!
Topic中持久化的生产者代码Demo:
package com.at.activemq.topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
// 持久化topic 的消息生产者
public class JmsProduce_persistence
{
public static String ACTIVEMQ_URL = "tcp://192.168.17.3:61616";
public static final String TOPIC_NAME = "topic01";
public static void main(String[] args) throws Exception
{
// 通过配置文件添加地址
Properties properties = new Properties();
InputStream inputStream = new BufferedInputStream(new FileInputStream("src/main/resources/url.properties"));
properties.load(inputStream);
ACTIVEMQ_URL = (String) properties.get("ACTIVEMQ_URL");
// 1 按照给定的url创建连接工程,这个构造器采用默认的用户名密码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
// 2 通过连接工厂连接 connection 和 启动
javax.jms.Connection connection = activeMQConnectionFactory.createConnection();
// 3 创建回话 session
// 两个参数,第一个事务, 第二个签收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(TOPIC_NAME);
// 5 创建消息的生产者
MessageProducer messageProducer = session.createProducer(topic);
// 6 通过messageProducer 生产 3 条 消息发送到消息队列中
// 设置持久化topic 在启动
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
//
connection.start();
for (int i = 1; i < 4; i++)
{
// 7 创建字消息
TextMessage textMessage = session.createTextMessage("topic_name--" + i);
// 8 通过messageProducer发布消息
messageProducer.send(textMessage);
MapMessage mapMessage = session.createMapMessage();
// mapMessage.setString("k1","v1");
// messageProducer.send(mapMessage);
}
// 9 关闭资源
messageProducer.close();
session.close();
connection.close();
System.out.println(" **** TOPIC_NAME消息发送到MQ完成 ****");
}
}
本案例中使用的是配置文件中的地址和端口,不要被main方法开头的地方误解了!
消费者
package com.at.activemq.topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;
// 持久化topic 的消息消费者
public class JmsConsummer_persistence
{
public static String ACTIVEMQ_URL = "tcp://192.168.17.3:61616";
public static String TOPIC_NAME = "topic01";
public static void main(String[] args) throws Exception
{
// 通过配置文件添加地址
Properties properties = new Properties();
InputStream inputStream = new BufferedInputStream(new FileInputStream("src/main/resources/url.properties"));
properties.load(inputStream);
ACTIVEMQ_URL = (String) properties.get("ACTIVEMQ_URL");
System.out.println("**** marry *****");
// 1 按照给定的url创建连接工程,这个构造器采用默认的用户名密码
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
// 2 通过连接工厂连接 connection
javax.jms.Connection connection = activeMQConnectionFactory.createConnection();
connection.setClientID("marrry2");
// 3 创建回话 session
// 两个参数,第一个事务, 第二个签收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4 创建目的地 (两种 : 队列/主题 这里用主题)
Topic topic = session.createTopic(TOPIC_NAME);
TopicSubscriber topicSubscriber = session.createDurableSubscriber(topic, "remark...");
// 5 发布订阅
connection.start();
Message message = topicSubscriber.receive();// 一直等
while (null != message)
{
TextMessage textMessage = (TextMessage) message;
System.out.println(" 收到的持久化 topic :" + textMessage.getText());
message = topicSubscriber.receive(5000L);
}
session.close();
connection.close();
}
}