了解下activeMQ,消息队列,只是简单的了解总结一下...(第一季)

原创
2016/12/28 17:42
阅读数 234

简单了解并实现了下activeMQ,消息队列。

下载安装activeMQ[http://activemq.apache.org/activemq-5143-release.html)

  1. 配置连接activeMQ的用户名和密码文件credentials.properties,这里主要是用JAVA连接mq做的配置,如果是要页面进入查看mq队列信息,压缩包里为我们集成了jetty中间件,这个另外配置。
activemq.username=admin
activemq.password=admin123

保存配置。 2. 在文件activemq.xml中增加以下内容(如果不加如这个信息的话,我们会看到用户名和密码默认为空连接到mq):

        <plugins>  
            <simpleAuthenticationPlugin>  
                <users>  
                    <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>  
                </users>  
            </simpleAuthenticationPlugin>  
        </plugins>  

    </broker>

注意是加在<broker></broker>标签内,其实在这个文件中默认为我们加载了这个密码配置文件 credentials.properties所以我们才可以访问到

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>file:${activemq.conf}/credentials.properties</value>
        </property>
    </bean>

3.做好以上配置之后,我们就可以启动我们的activeMQ了。 输入图片说明

4.接着直接代码连接mq,编写生产者代码。

package com;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

import weblogic.jms.client.JMSConnectionFactory;

/**
 * 
 * <p>
 * 功能描述:mq 实现点对点 发送消息
 * </p>
 * <p>
 * Copyright: Copyright (c) 2013
 * </p>
 * <p>
 * Company: 
 * </p>
 * 
 * @author puxiao
 * @version 1.0 2016-12-20 下午3:33:53
 */
public class JmsSerder {

	/**连接 activeMQ 工厂**/
	private ConnectionFactory connectionFactory = null;
	/**获取连接**/
	private Connection connection = null;
	/**获取会话**/
	private Session session = null;
	/**消息目的地**/
	private Destination destination;
	/**消息发送者**/
	private MessageProducer msProducer;
	
	public void inti() throws JMSException{
		System.out.println(ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
		System.out.println(ActiveMQConnectionFactory.DEFAULT_USER);
		System.out.println(ActiveMQConnectionFactory.DEFAULT_PASSWORD);
		this.connectionFactory = new ActiveMQConnectionFactory("puxiao",
				"puxiao", ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
		this.connection = this.connectionFactory.createConnection();
		this.connection.start();
		this.session = this.connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
		this.destination = this.session.createQueue("helloWorld");
		this.msProducer = this.session.createProducer(this.destination);
		Message arg0 = this.session.createTextMessage("你好,世界");
		this.msProducer.send(arg0);
		System.out.println("发送消息>>>>");
		this.session.commit();//提交
		//this.session.close();
		//this.connection.close();
	}
	public static void main(String[] args) {
		try {
			JmsSerder jsm = new JmsSerder();
			jsm.inti();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

控制台打印信息: 输入图片说明

  1. 我们可以进入mq主页查看我们的消息发送情况: 输入图片说明 显示发送成功。

6.接着就是编写MQ消费者代码:

package com;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.servlet.http.HttpServletRequest;


import org.apache.activemq.ActiveMQConnectionFactory;
import org.python.modules.thread;

/**
 * 
 * <p>
 * 功能描述:jms接受者 
 * </p>
 * <p>
 * Copyright: Copyright (c) 2013
 * </p>
 * <p>
 * Company: 
 * </p>
 * 
 * @author puxiao
 * @version 1.0 2016-12-20 下午5:59:06
 */

public class JmsReciver {

	private ConnectionFactory connFactory = null;//连接工厂
	
	private Connection conn = null;//获取连接
	
	private Session session = null;//当前会话
	
	private Destination destination;//消息目的地
	
	private MessageConsumer consumer;//消费者
	
	void inti() throws JMSException{
		
		this.connFactory = new ActiveMQConnectionFactory("puxiao",
				"puxiao", ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
		conn = connFactory.createConnection();
		conn.start();
		session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
		destination = session.createQueue("helloWorld");
		consumer = session.createConsumer(destination);
		this.consumer.setMessageListener(new MessageListener() {
			
			@Override
			public void onMessage(Message arg0) {
				try {
					TextMessage txtMessage = (TextMessage)arg0;
					if(txtMessage != null){
						TextMessage txt = (TextMessage)txtMessage;
						System.out.println("接受到消息:"+txt.getText());
					}
				} catch (Exception e) {
					e.printStackTrace();
				}

			}
		});
	}
	public static void main(String[] args) throws JMSException {
		try {
			JmsReciver jmsReciver = new JmsReciver();
			jmsReciver.inti();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

控制台打印信息: 输入图片说明 我们在查看MQ主页信息,发现消息已经被消费。。 输入图片说明

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部