ActiveMq持久订阅小例子

public class ProducerTopic {
    public static void main(String[] args) throws JMSException {
        String user = ActiveMQConnectionFactory.DEFAULT_USER;
        String password = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
        String brokerUrl = "tcp://hadoop2:61616";
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, brokerUrl);
        /**
         * 创建连接并开启
         */
        Connection connection = connectionFactory.createConnection();

        /**
         * 创建session
         * 参数1:不启动事务
         * 参数2:签收模式为自动签收
         */
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        /**
         * 创建topic或者queue
         */
        Topic topic_2 = session.createTopic("topic_2");
        /**
         * 创建生产者
         */
        MessageProducer producer = session.createProducer(topic_2);
        //此生产者生产的数据持久化
        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        /**
         * 注意,一定要在设置了持久化之后再启动connection
         */
        connection.start();
        /**
         * 生产数据
         */
        for (int i = 0; i < 10; i++) {
            TextMessage textMessage = session.createTextMessage();
            textMessage.setText("hello java " + i);
            producer.send(textMessage);
        }

        /**
         * 释放连接
         */
        connection.close();

    }
}
public class ConsumerTopic {
    public static void main(String[] args) {
        String user = ActiveMQConnectionFactory.DEFAULT_USER;
        String password = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
        String brokerUrl = "tcp://hadoop2:61616";

        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, brokerUrl);
        Connection connection = null;
        try {
            /**
             * 创建连接并开启,注册一个客户号,让broker知道是谁订阅了。
             * 需要在producer发消息之前,先运行一下此程序,目的是注册订阅信息,然后就可以关闭程序
             * 这样就可以做到再次启动时,收到离线的消息。
             */
            connection = connectionFactory.createConnection();
            connection.setClientID("c1");
            /**
             * 创建session
             * 参数1:不启动事务
             * 参数2:签收模式为自动签收
             */
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            /**
             * 创建topic或者queue
             */
            Topic topic_2 = session.createTopic("topic_2");
            //对于topic_2,建立持久订阅,名字随便起
            TopicSubscriber durableSubscriber = session.createDurableSubscriber(topic_2, "somebody");
            connection.start();
            /**
             * 消费数据
             */
            while (true) {
                TextMessage textMessage = (TextMessage) durableSubscriber.receive();
                System.out.println("消费消息:" + textMessage.getText());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值