zoukankan      html  css  js  c++  java
  • 消息队列之ActiveMQ简单环境搭建

    准备:

       环境:win7,Eclipse,jdk1.8

       ActiveMQ版本:ActiveMQ 5.9.0 Release下载地址:http://activemq.apache.org/download-archives.html

    开始:

      1.下载完后进行解压,解压完找到其中的activemq-all-5.9.0.jar包.

      2.Eclipse创建一个java项目,导入上面这个jar包

      3.创建生产者和消费者类

      生产者

    package com.sinosoft.activemq;
    
    
    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;
    
    public class JMSProducer {
    	
    	//默认连接用户名
    	private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    	//默认连接密码
    	private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    	//默认连接地址
    	private static final String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;
    	//发送的消息数量
    	private static final int SENDNUM = 10;
    	
    	
    	public static void main(String[] args) {
    		//连接工厂
    		ConnectionFactory connectionFactory;
    		//连接
    		Connection connection = null;
    		//会话,接收或者发送消息的线程
    		Session session;
    		//消息的目的地
    		Destination destination;
    		//消息生产者
    		MessageProducer messageProducer;
    		//实例化连接工厂
    		connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD, JMSProducer.BROKERURL);
    		
    		try {
    			//通过连接工厂获取连接
    			connection = connectionFactory.createConnection();
    			//启动连接
    			connection.start();
    			//创建session
    			session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
    			//创建一个名称为Hello World!的消息队列
    			destination = session.createQueue("Hello World");
    			//创建消息生产者
    			messageProducer = session.createProducer(destination);
    			//发送消息
    			sendMessage(session,messageProducer);
    			
    			session.commit();
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally{
    			if(connection != null){
    				try {
    					connection.close();
    				} catch (JMSException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		
    	}
    	
    	/**
    	 * 发送消息
    	 * @param session
    	 * @param messageProducer 消息生产者
    	 * @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.err.println("发送消息:activemq 发送消息:" + i);
    			//通过消息生产者发出消息
    			messageProducer.send(message);
    		}
    	}
    	
    }
    

      

      消费者

        

    package com.sinosoft.activemq;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.jms.MessageConsumer;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    public class JMSConsumer {
    
    	//默认连接用户名
    	private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    	//默认连接密码
    	private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    	//默认连接地址
    	private static final String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;
    	
    	public static void main(String[] args) {
    		//连接工厂
    		ConnectionFactory connectionFactory;
    		//连接
    		Connection connection = null;
    		//会话,接收或者发送消息的线程
    		Session session;
    		//消息目的地
    		Destination destination;
    		//消息的消费者
    		MessageConsumer messageConsumer;
    		//实例化连接工厂
    		connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD, JMSConsumer.BROKERURL);
    		
    		try {
    			//通过工厂获取连接
    			connection = connectionFactory.createConnection();
    			//启动连接
    			connection.start();
    			//创建会话
    			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    			//创建一个连接Hello World!的消息队列
    			destination = session.createQueue("Hello World");
    			//创建消息的消费者
    			messageConsumer = session.createConsumer(destination);
    			
    			while(true){
    				TextMessage textMessage = (TextMessage) messageConsumer.receive(100000);
    				if (textMessage != null) {
    					System.err.println("收到的消息:" + textMessage.getText());
    				} else {
    					break;
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    

      

     从解压的压缩包找到bin目录下的activemq.bat并运行它

    结果应该如下:

      

    然后进入红线标出来的地址,出现下面页面表示已经启动了ActiveMQ的服务

     刚才运行activemq.bat成功后,默认也运行了activemq-admin.bat,所以进入地址http://localhost:8161/admin/

     这时需要输入用户名和密码,都是admin,成功后会进入到以下页面

     运行生产者类

      控制台如下:

      

    页面上选择queues,发现

     

    再运行消费者类后

      控制台

    再看刷新Queues页面,发现

     就算是点对点的消息队列发送和接收成功了.

     如果将消费者类这里改为true

    那么最终运行完的结果就是

     总结,消息队列,任重而道远,需要慢慢探索,技术性东西都是,勤学一时,受用终身

  • 相关阅读:
    洛谷 1842 [USACO05NOV]奶牛玩杂技【贪心】
    洛谷 1757 通天之分组背包【分组背包】
    洛谷 1330 封锁阳光大学
    洛谷 1019 单词接龙
    【模板】CDQ分治
    BZOJ 2734 洛谷 3226 [HNOI2012]集合选数【状压DP】【思维题】
    BZOJ 2457 [BeiJing2011]双端队列
    洛谷 2015 二叉苹果树
    牛客网 牛可乐发红包脱单ACM赛 C题 区区区间间间
    牛客网 牛可乐发红包脱单ACM赛 B题 小a的旅行计划
  • 原文地址:https://www.cnblogs.com/goujh/p/8510239.html
Copyright © 2011-2022 走看看