ActiveMQ的点对点与发布/订阅模式小demo

window版的ActiveMQ(内含有ActiveMQ完整包activemq-all-5.12.1.jar) ,下载地址:链接: https://pan.baidu.com/s/169HerfGQ8w_wwYNYRoLP-Q 密码: 4txv;

点对点(消息只要没有被消费,一直是挂起的状态,直到被消费者消费

package com.jms.demo;


import javax.jms.Connection;  
import javax.jms.ConnectionFactory;  
import javax.jms.Destination;  
import javax.jms.JMSException;  
import javax.jms.MessageProducer;  
import javax.jms.Session;  
import javax.jms.TextMessage;  
  
import org.apache.activemq.ActiveMQConnection;  
import org.apache.activemq.ActiveMQConnectionFactory;
/** 
 * 消息生产者 
 * @author zy
 * 
 */ 
public class JMSProducer {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;  
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;  
    private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;  
      
    private static final int SENDNUM = 20;//发送的消息数量  
      
      
    public static void main(String[] args) {  
         ConnectionFactory connectionFactory;//连接工厂  
         Connection connection = null;//连接  
         Session session;//会话  
         Destination destination;//消息的目的地  
         MessageProducer messageProducer;//消息生产者  
           
         //实例化连接工厂  
         connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEURL);  
         //通过连接工厂获取连接  
         try {  
            connection = connectionFactory.createConnection();  
            connection.start();//启动连接  
            //创建session,第一个参数是否有事务  
            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);  
            //创建消息队列,(创建队列作为目的地)  
            destination = session.createQueue("FirstQueue1");  
            //创建消息生产者  
            messageProducer = session.createProducer(destination);  
              
            sendMessage(session,messageProducer);  
              
            //提交事务  
            session.commit();  
              
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }finally{  
            if(connection != null){  
                try {  
                    connection.close();  
                } catch (JMSException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
              
              
        }  
    }  
      
    /** 
     * 发送消息 
     * @throws Exception  
     */  
    public static void sendMessage(Session session,MessageProducer messageProducer) throws Exception{  
        for (int i = 0; i < JMSProducer.SENDNUM; i++) {  
            TextMessage message = session.createTextMessage("ActiveMQ 发送的消息"+i);  
            System.out.println("发送消息:"+ "ActiveMQ 发送的消息"+i);  
            messageProducer.send(message);  
        }  
    }  

}



package com.jms.demo;


import javax.jms.Connection;  
import javax.jms.ConnectionFactory;  
import javax.jms.Destination;  
import javax.jms.JMSException;  
import javax.jms.MessageConsumer;
import javax.jms.Session;   
  
import org.apache.activemq.ActiveMQConnection;  
import org.apache.activemq.ActiveMQConnectionFactory;
/** 
 *  消息消费者 
 * @author zy
 * 
 */ 
public class JMSConsumer {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;  
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;  
    private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;  
      
      
   public static void main(String[] args) {  
       ConnectionFactory connectionFactory;//连接工厂  
       Connection connection = null;//连接  
       Session session;//会话  
       Destination destination;//消息的目的地  
       MessageConsumer messageConsumer;//消息消费者  
         
       //实例化连接工厂  
       connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEURL);   
        try {  
            connection = connectionFactory.createConnection();  
            connection.start();//启动连接  
            //创建session,第一个参数是否有事务  
            session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);  
            //创建消息队列,(创建队列作为目的地),名称要对应  
            destination = session.createQueue("FirstQueue1");  
            //创建消息消费者  
            messageConsumer = session.createConsumer(destination);  
              
            //使用监听器监听发送过来的消息  
            messageConsumer.setMessageListener(new Listener());  
            //一直在监听,循环等待  
            /*while(true){ 
                TextMessage textMessage = (TextMessage) messageConsumer.receive(10000); 
                if(textMessage != null){ 
                    System.out.println("收到消息:"+textMessage.getText()); 
                }else{ 
                    break; 
                } 
            }*/  
              
        } catch (JMSException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }   
   }  

}

package com.jms.demo;


import javax.jms.JMSException;  
import javax.jms.Message;  
import javax.jms.MessageListener;  
import javax.jms.TextMessage;  
  
/** 
 * 消息监听器 
 * @author zy 
 * 
 */  
public class Listener implements MessageListener{
@Override  
    public void onMessage(Message message) {  
        try {  
            System.out.println("监听器收到的消息:"+((TextMessage)message).getText());  
        } catch (JMSException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
    } 

}

发布/订阅(必须先执行订阅才能收到消息)

package com.jms.pubToSub;


import javax.jms.Connection;  
import javax.jms.ConnectionFactory;  
import javax.jms.Destination;  
import javax.jms.JMSException;  
import javax.jms.MessageConsumer;   
import javax.jms.Session;   
  
import org.apache.activemq.ActiveMQConnection;  
import org.apache.activemq.ActiveMQConnectionFactory;  
  
  
/** 
 * 订阅者一
 * @author zy
 * 
 */ 
public class JMSConsumer1 {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;  
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;  
    private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;  
      
      
   public static void main(String[] args) {  
       ConnectionFactory connectionFactory;//连接工厂  
       Connection connection = null;//连接  
       Session session;//会话  
       Destination destination;//消息的目的地  
       MessageConsumer messageConsumer;//消息消费者  
         
       //实例化连接工厂  
       connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEURL);   
        try {  
            connection = connectionFactory.createConnection();  
            connection.start();//启动连接  
            //创建session,第一个参数是否有事务  
            session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);  
            //创建消息队列,(创建队列作为目的地),名称要对应  
            destination = session.createTopic("FirstTopic1");  
            //创建消息消费者  
            messageConsumer = session.createConsumer(destination);  
              
            //使用监听器监听发送过来的消息  
            messageConsumer.setMessageListener(new Listener1());  
            //一直在监听,循环等待  
            /*while(true){ 
                TextMessage textMessage = (TextMessage) messageConsumer.receive(10000); 
                if(textMessage != null){ 
                    System.out.println("收到消息:"+textMessage.getText()); 
                }else{ 
                    break; 
                } 
            }*/  
              
        } catch (JMSException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }   
   }  

}

package com.jms.pubToSub;


import javax.jms.JMSException;  
import javax.jms.Message;  
import javax.jms.MessageListener;  
import javax.jms.TextMessage;  
  
/** 
 * 消息监听器 
 * @author zy 
 * 
 */ 


public class Listener1 implements MessageListener{
@Override  
    public void onMessage(Message message) {  
        try {  
            System.out.println("订阅者一收到的消息:"+((TextMessage)message).getText());  
        } catch (JMSException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
    }  
}

package com.jms.pubToSub;


import javax.jms.Connection;  
import javax.jms.ConnectionFactory;  
import javax.jms.Destination;  
import javax.jms.JMSException;  
import javax.jms.MessageConsumer;
import javax.jms.Session;  
  
import org.apache.activemq.ActiveMQConnection;  
import org.apache.activemq.ActiveMQConnectionFactory; 
public class JMSConsumer2 {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;  
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;  
    private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;  
      
      
   public static void main(String[] args) {  
       ConnectionFactory connectionFactory;//连接工厂  
       Connection connection = null;//连接  
       Session session;//会话  
       Destination destination;//消息的目的地  
       MessageConsumer messageConsumer;//消息消费者  
         
       //实例化连接工厂  
       connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEURL);   
        try {  
            connection = connectionFactory.createConnection();  
            connection.start();//启动连接  
            //创建session,第一个参数是否有事务  
            session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);  
            //创建消息队列,(创建队列作为目的地),名称要对应  
            destination = session.createTopic("FirstTopic1");  
            //创建消息消费者  
            messageConsumer = session.createConsumer(destination);  
              
            //使用监听器监听发送过来的消息  
            messageConsumer.setMessageListener(new Listener2());  
            //一直在监听,循环等待  
            /*while(true){ 
                TextMessage textMessage = (TextMessage) messageConsumer.receive(10000); 
                if(textMessage != null){ 
                    System.out.println("收到消息:"+textMessage.getText()); 
                }else{ 
                    break; 
                } 
            }*/  
              
        } catch (JMSException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }   
   }  

}

package com.jms.pubToSub;


import javax.jms.JMSException;  
import javax.jms.Message;  
import javax.jms.MessageListener;  
import javax.jms.TextMessage;


public class Listener2 implements MessageListener{
@Override  
    public void onMessage(Message message) {  
        try {  
            System.out.println("订阅者二收到的消息:"+((TextMessage)message).getText());  
        } catch (JMSException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
          
    }  

}

package com.jms.pubToSub;


import javax.jms.Connection;  
import javax.jms.ConnectionFactory;  
import javax.jms.Destination;  
import javax.jms.JMSException;  
import javax.jms.MessageProducer;  
import javax.jms.Session;  
import javax.jms.TextMessage;  
  
import org.apache.activemq.ActiveMQConnection;  
import org.apache.activemq.ActiveMQConnectionFactory;  
  
/** 
 * 消息生产者 
 *  
 * 发布订阅模式 
 * @author zy 
 * 
 */ 
public class JMSProducer1 {
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;  
    private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;  
    private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL;  
      
    private static final int SENDNUM = 20;//发送的消息数量  
      
      
    public static void main(String[] args) {  
         ConnectionFactory connectionFactory;//连接工厂  
         Connection connection = null;//连接  
         Session session;//会话  
         Destination destination;//消息的目的地  
         MessageProducer messageProducer;//消息生产者  
           
         //实例化连接工厂  
         connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKEURL);  
         //通过连接工厂获取连接  
         try {  
            connection = connectionFactory.createConnection();  
            connection.start();//启动连接  
            //创建session,第一个参数是否有事务  
            session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);  
            //创建Topic主题  
            destination = session.createTopic("FirstTopic1");  
            //创建消息生产者  
            messageProducer = session.createProducer(destination);  
              
            sendMessage(session,messageProducer);  
              
            //提交事务  
            session.commit();  
              
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }finally{  
            if(connection != null){  
                try {  
                    connection.close();  
                } catch (JMSException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
              
              
        }  
    }  
      
    /** 
     * 发送消息 
     * @throws Exception  
     */  
    public static void sendMessage(Session session,MessageProducer messageProducer) throws Exception{  
        for (int i = 0; i < JMSProducer1.SENDNUM; i++) {  
            TextMessage message = session.createTextMessage("ActiveMQ 发布的主题信息"+i);  
            System.out.println("发布的消息:"+ "ActiveMQ 发布的主题信息"+i);  
            messageProducer.send(message);
        }  
    }  
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值