MQ 发布/订阅者模式

  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  

 

posted @ 2016-09-06 17:23  wxw_wang  阅读(2680)  评论(0编辑  收藏  举报
/* 下雪 begin */ /* 下雪 end */ /* 点击出现爱心特效 begin*/ /* 点击出现爱心特效 end*/