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里发送数据

以上都是基于监听方式。

posted on 2017-06-24 12:13  老曹123  阅读(177)  评论(0)    收藏  举报

导航