ActiveMQ中Topic主题

注意:

在这里插入图片描述

生产者

本案例中使用的是配置文件中的地址和端口,不要被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();
    }
}
发布了88 篇原创文章 · 获赞 34 · 访问量 6892

猜你喜欢

转载自blog.csdn.net/Funny_Ma/article/details/103652287