Different from Queue, a Topic implements a publishing/subscription model. In the following example, two consumers are started to listen to a Topic, then, multiple messages are repeatedly sent to the Topic.
Import javax. jms. Connection;
Import javax. jms. JMSException;
Import javax. jms. Message;
Import javax. jms. MessageConsumer;
Import javax. jms. MessageListener;
Import javax. jms. MessageProducer;
Import javax. jms. Session;
Import javax. jms. TextMessage;
Import javax. jms. Topic;
Import org. apache. activemq. ActiveMQConnectionFactory;
Import org. apache. activemq. command. ActiveMQTopic;
Public class TopicTest {
Public static void main (String [] args) throws Exception {
ActiveMQConnectionFactory factory = new
ActiveMQConnectionFactory ("vm: // localhost ");
Connection connection = factory. createConnection ();
Connection. start ();
// Create a Topic
Topic topic = new ActiveMQTopic ("testTopic ");
Session session = connection. createSession (false,
Session. AUTO_ACKNOWLEDGE );
// Register consumer 1
MessageConsumer comsumer1 = session. createConsumer (topic );
Comsumer1.setMessageListener (new MessageListener (){
Public void onMessage (Message m ){
Try {
System. out. println ("Consumer1 get" +
(TextMessage) m). getText ());
} Catch (JMSException e ){
E. printStackTrace ();
}
}
});
// Register consumer 2
MessageConsumer comsumer2 = session. createConsumer (topic );
Comsumer2.setMessageListener (new MessageListener (){
Public void onMessage (Message m ){
Try {
System. out. println ("Consumer2 get" +
(TextMessage) m). getText ());
} Catch (JMSException e ){
E. printStackTrace ();
}
}
});
// Create a producer and send multiple messages.
Messageproducer producer = session. createproducer (topic );
For (INT I = 0; I <10; I ++ ){
Producer. send (session. createTextMessage ("Message:" +
I ));
}
}
}
The following output result is displayed after running:
Consumer1 get Message: 0
Consumer2 get Message: 0
Consumer1 get Message: 1
Consumer2 get message: 1
Consumer1 get message: 2
Consumer2 get message: 2
Consumer1 get message: 3
Consumer2 get message: 3
Consumer1 get message: 4
Consumer2 get message: 4
Consumer1 get message: 5
Consumer2 get message: 5
Consumer1 get Message: 6
Consumer2 get Message: 6
Consumer1 get Message: 7
Consumer2 get Message: 7
Consumer1 get Message: 8
Consumer2 get Message: 8
Consumer1 get Message: 9
Consumer2 get Message: 9
This indicates that each message is consumed by all consumers.