ACTIVEMQ- publisher subscriber hello world example

前端 未结 4 829
北恋
北恋 2020-12-13 15:02

There are two programs: subscriber and publisher... Subscriber is able to put the message onto the topic and the message is sent successfully. When I check the activemq serv

4条回答
  •  无人及你
    2020-12-13 15:25

    Your producer class is correct. It runs smoothly.

    But, your consumer is incorrect & you have to modify it.

    • First, add setClientID("any_string_value") after creating connection object;

      eg: Connection connection = connectionFactory.createConnection(); // need to setClientID value, any string value you wish connection.setClientID("12345");

    • secondly, use createDurableSubscriber() method instead of createConsumer() for transmitting message via topic.

      MessageConsumer consumer = session.createDurableSubscriber(topic,"SUB1234");

    Here is the modified comsumer class:

    package mq.test;
    
    import javax.jms.*;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    public class consumer {
        // URL of the JMS server
        private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
    
        // Name of the topic from which we will receive messages from = " testt"
    
        public static void main(String[] args) throws JMSException {
            // Getting JMS connection from the server
    
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
            Connection connection = connectionFactory.createConnection();
    
            // need to setClientID value, any string value you wish
            connection.setClientID("12345");
    
            try{
            connection.start();
            }catch(Exception e){
                System.err.println("NOT CONNECTED!!!");
            }
            Session session = connection.createSession(false,
                    Session.AUTO_ACKNOWLEDGE);
    
            Topic topic = session.createTopic("test_data");
    
            //need to use createDurableSubscriber() method instead of createConsumer() for topic
            // MessageConsumer consumer = session.createConsumer(topic);
            MessageConsumer consumer = session.createDurableSubscriber(topic,
                    "SUB1234");
    
            MessageListener listner = new MessageListener() {
                public void onMessage(Message message) {
                    try {
                        if (message instanceof TextMessage) {
                            TextMessage textMessage = (TextMessage) message;
                            System.out.println("Received message"
                                    + textMessage.getText() + "'");
                        }
                    } catch (JMSException e) {
                        System.out.println("Caught:" + e);
                        e.printStackTrace();
                    }
                }
            };
    
            consumer.setMessageListener(listner);
            //connection.close();
    
        }
    }
    

    Now, your code will run successfully.

提交回复
热议问题