1 package com.chauvet.utils.mq.topic; 2 3 import javax.jms.DeliveryMode; 4 import javax.jms.JMSException; 5 import javax.jms.MapMessage; 6 import javax.jms.Session; 7 import javax.jms.Topic; 8 import javax.jms.TopicConnection; 9 import javax.jms.TopicConnectionFactory; 10 import javax.jms.TopicPublisher; 11 import javax.jms.TopicSession; 12 13 import org.apache.activemq.ActiveMQConnection; 14 import org.apache.activemq.ActiveMQConnectionFactory; 15 16 /*** 17 * 18 * 第三种方式 19 * Topic 主题发布 和 订阅消息 20 * 该模式下 订阅者必须一直开启着才可以正常使用,否则发布的消息接收不到 21 * 22 * @author WXW 23 * 24 */ 25 public class TopicSender { 26 27 public static final String MQ_TCP_URL = "tcp://localhost:61616"; 28 public static final String TOPIC_DESTINATION = "com.chauvet.mq.topic"; 29 30 public static void main(String[] args) { 31 TopicConnection connection = null; 32 TopicSession session = null; 33 try { 34 TopicConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, MQ_TCP_URL); 35 connection = factory.createTopicConnection(); 36 connection.start(); 37 session = connection.createTopicSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); 38 Topic topic = session.createTopic(TOPIC_DESTINATION); 39 TopicPublisher publisher = session.createPublisher(topic); 40 publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 41 sendMessage(session, publisher); 42 session.commit(); 43 44 } catch (Exception e) { 45 e.printStackTrace(); 46 } finally { 47 if (session != null) { 48 try { 49 session.close(); 50 } catch (JMSException e) { 51 e.printStackTrace(); 52 } 53 } 54 if (connection != null) { 55 try { 56 connection.close(); 57 } catch (JMSException e) { 58 e.printStackTrace(); 59 } 60 } 61 } 62 63 } 64 65 public static void sendMessage(TopicSession session, TopicPublisher publisher) throws Exception { 66 System.out.println("------------发送消息开始-----------"); 67 MapMessage map = session.createMapMessage(); 68 map.setString("text", "【this is chauvet's TOPIC message】"); 69 map.setLong("time", System.currentTimeMillis()); 70 publisher.send(map); 71 System.out.println("------------发送消息结束-----------"); 72 } 73 } 74 75 76 77 78 79 80 81 package com.chauvet.utils.mq.topic; 82 83 import javax.jms.JMSException; 84 import javax.jms.MapMessage; 85 import javax.jms.Message; 86 import javax.jms.MessageListener; 87 import javax.jms.Session; 88 import javax.jms.Topic; 89 import javax.jms.TopicConnection; 90 import javax.jms.TopicConnectionFactory; 91 import javax.jms.TopicSession; 92 import javax.jms.TopicSubscriber; 93 94 import org.apache.activemq.ActiveMQConnection; 95 import org.apache.activemq.ActiveMQConnectionFactory; 96 97 /*** 98 * 99 * 第三种方式 100 * Topic主题发布和订阅消息 101 * 该模式下 订阅者必须一直开启着才可以正常使用,否则发布的消息接收不到 102 * 103 * @author WXW 104 * 105 */ 106 public class TopicReceiver { 107 108 public static final String MQ_TCP_URL = "tcp://localhost:61616"; 109 public static final String TOPIC_DESTINATION = "com.chauvet.mq.topic"; 110 111 112 public static void main(String[] args) { 113 114 TopicConnection connection = null; 115 TopicSession session = null; 116 try { 117 TopicConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, MQ_TCP_URL); 118 connection = factory.createTopicConnection(); 119 connection.start(); 120 session = connection.createTopicSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); 121 Topic topic = session.createTopic(TOPIC_DESTINATION); 122 TopicSubscriber subscriber = session.createSubscriber(topic); 123 124 subscriber.setMessageListener(new MessageListener() { 125 public void onMessage(Message msg) { 126 if (msg != null) { 127 MapMessage map = (MapMessage) msg; 128 try { 129 System.out.println(map.getLong("time") + "接收#" + map.getString("text")); 130 } catch (JMSException e) { 131 e.printStackTrace(); 132 } 133 } 134 } 135 }); 136 Thread.sleep(1000 * 60); 137 session.commit(); 138 } catch (Exception e) { 139 e.printStackTrace(); 140 } finally { 141 if (session != null) { 142 try { 143 session.close(); 144 } catch (JMSException e) { 145 e.printStackTrace(); 146 } 147 } 148 if (connection != null) { 149 try { 150 connection.close(); 151 } catch (JMSException e) { 152 e.printStackTrace(); 153 } 154 } 155 } 156 157 } 158 } 159 160