ActiveMQ P2P模式
package caolihua.mq.helloworld; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.MessageProducer; import javax.jms.Session; import org.apache.activemq.ActiveMQConnectionFactory; //需设置单例 //@Bean应该不是单例的吧 public class Producer { private ConnectionFactory connectionFactory; private Connection connection; private Session session; private MessageProducer messageProducer; public Producer(){ this.connectionFactory = new ActiveMQConnectionFactory("caolihua", "caolihua", "tcp://localhost:61616"); try { this.connection = this.connectionFactory.createConnection(); this.connection.start(); this.session = this.connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); this.messageProducer = this.session.createProducer(null); } catch (JMSException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception{ Producer producer = new Producer (); producer.send1(); if(producer.connection!=null){ producer.connection.close(); } } public void send1(){ try { Destination destination = this.session.createQueue("first"); MapMessage msg1 = this.session.createMapMessage(); msg1.setString("name", "张三"); msg1.setString("age", "23"); //这个带property的才是能过滤的属性 msg1.setStringProperty("color", "blue"); msg1.setIntProperty("sal", 2200); MapMessage msg2 = this.session.createMapMessage(); msg2.setString("name", "李四"); msg2.setString("age", "26"); msg2.setStringProperty("color", "yellow"); msg2.setIntProperty("sal", 2200); MapMessage msg3= this.session.createMapMessage(); msg3.setString("name", "王五"); msg3.setString("age", "28"); msg3.setStringProperty("color", "red"); msg3.setIntProperty("sal", 2200); MapMessage msg4 = this.session.createMapMessage(); msg4.setString("name", "赵六"); msg4.setString("age", "30"); msg4.setStringProperty("color", "blue"); msg4.setIntProperty("sal", 2200); this.messageProducer.send(destination,msg1,DeliveryMode.NON_PERSISTENT,1,1000*60*100L); this.messageProducer.send(destination,msg2,DeliveryMode.NON_PERSISTENT,3,1000*60*100L); this.messageProducer.send(destination,msg3,DeliveryMode.NON_PERSISTENT,5,1000*60*100L); this.messageProducer.send(destination,msg4,DeliveryMode.NON_PERSISTENT,7,1000*60*100L); } catch (JMSException e) { e.printStackTrace(); } } }
package caolihua.mq.helloworld; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MapMessage; 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 Consumer { //该属性无法过滤 public final String SELECTOR_0 = "age > 25"; //只能过滤Property属性 public final String SELECTOR_1 = "color ='blue'"; private ConnectionFactory connectionFactory; private Connection connection; private Session session; private MessageConsumer messageConsumer; private Destination destination; public Consumer(){ this.connectionFactory = new ActiveMQConnectionFactory("caolihua","caolihua","tcp://localhost:61616"); try { this.connection = this.connectionFactory.createConnection(); this.connection.start(); this.session=this.connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); this.destination = this.session.createQueue("first"); this.messageConsumer = this.session.createConsumer(this.destination,SELECTOR_1); } catch (JMSException e) { e.printStackTrace(); } } public static void main(String[] args) { Consumer consumer = new Consumer(); consumer.receiver(); } /** * 监听器,取代之前的while写法 */ public void receiver(){ try { this.messageConsumer.setMessageListener(new Listener()); } catch (JMSException e) { e.printStackTrace(); } } class Listener implements MessageListener{ @Override public void onMessage(Message message) { try { if (message instanceof TextMessage) { } if (message instanceof MapMessage) { MapMessage ret = (MapMessage) message; System.out.println(ret.toString()); System.out.println(ret.getString("name")); System.out.println(ret.getString("age")); } } catch (Exception e) { } } } }
//P2P模式,先启动生产者,生产者生产消息,放到queue里;再启动消费者,消费者去队列消费消息。
//发布订阅模式,广播,先启动消费者,消费者有订阅是哪个topic,再启动生产者,生产者往topic里发送数据
以上都是基于监听方式。
感谢阅读博客,欢迎向博主讨论问题。
浙公网安备 33010602011771号