ActiveMQ 发布订阅模式

先启动消费者,再启动生产者。

 

生产者:

package org.jms.demo.publish_subscribe;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Publish {

    private static final String brokeURL = "tcp://localhost:61616";

    private ConnectionFactory connectionFactory;

    private Connection connection;

    private Destination destination;

    private MessageProducer producer;

    private Session session;

    public Publish() throws JMSException {

        connectionFactory = new ActiveMQConnectionFactory("caolihua","caolihua",brokeURL);

        connection = connectionFactory.createConnection();

        connection.start();

        session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
      //与队列不同的地方。 destination
= session.createTopic("topic"); producer = session.createProducer(destination); } public void publichMessage() throws JMSException { TextMessage textMessage = this.session.createTextMessage("Topic Message"); this.producer.send(destination, textMessage); } public static void main(String[] args) throws JMSException { Publish publish = new Publish(); publish.publichMessage(); } }

 

有以下多个订阅者,同时收到相同的消息。

package org.jms.demo.publish_subscribe;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Subscribe1 {

    private static final String brokeURL = "tcp://localhost:61616";

    private ConnectionFactory connectionFactory;

    private Connection connection;

    private Destination destination;

    private MessageConsumer consumer;

    private Session session;

    public Subscribe1() throws JMSException {

        connectionFactory = new ActiveMQConnectionFactory("caolihua","caolihua",brokeURL);

        connection = connectionFactory.createConnection();

        connection.start();

        session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);

        destination = session.createTopic("topic");

        consumer = session.createConsumer(destination);

        consumer.setMessageListener(new TopicListener());

    }

    final class TopicListener implements MessageListener {

        @Override
        public void onMessage(Message message) {

            if (message instanceof TextMessage) {

                try {
                    System.out.println(((TextMessage) message).getText());
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) throws JMSException {

        Subscribe1 publish = new Subscribe1();
    
    }
}

 

开始先启动2个consumer,再启动一个producer,如上图结果。

 

posted on 2017-06-24 18:26  老曹123  阅读(122)  评论(0)    收藏  举报

导航