ActiveMQ入门_20110720

ActiveMQ是一个强大的消息服务器,准确的说其定位是消息总线。然后今天用1上午时间入入门体验一下消息队列

咱们的项目一般都是基于ssh,其中spring扮演的角色就是万金油啊,这次也不例外整合ActiveMQ就靠他了

首先下载下来ActiveMQ然后进入bin目录启动消息服务器即可,你可以通过后台的控制窗口看消息服务器运行情况

也可以在http://127.0.0.1:8161/admin这里看消息服务器情况,比如几个链接当前开了几个队列,队列里是什么内容,设计相当贴心啊

言归正传谈谈整合

activation-1.1.jar

activemq-camel-5.5.0.jar

activemq-console-5.5.0.jar

activemq-core-5.5.0.jar

activemq-jaas-5.5.0.jar

activemq-pool-5.5.0.jar

activemq-protobuf-1.1.jar

activemq-web-5.5.0.jar

javax.jms.jar

geronimo-spec-j2ee-management-1.0-rc2.jar

将这些依赖包丢入工程,我可是尝试N遍在一次又一次找不到class的异常中百度出这些jar包

然后单独定义一个spring配置文件配置消息服务

<?xml version="1.0" encoding="UTF-8"?> 

<beans xmlns="http://www.springframework.org/schema/beans" 

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

  xmlns:tx="http://www.springframework.org/schema/tx" 

  xsi:schemaLocation="http://www.springframework.org/schema/beans

                     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

                     http://www.springframework.org/schema/tx

                     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 




  <bean id="connectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> 

    <property name="connectionFactory"> 

      <bean class="org.apache.activemq.ActiveMQConnectionFactory"> 

        <property name="brokerURL"> 

          <value>tcp://localhost:61616</value> 

        </property> 

      </bean> 

    </property> 

  </bean> 

    

  <bean id="dest" class="org.apache.activemq.command.ActiveMQQueue"> 

    <constructor-arg value="myDest"/> 

  </bean> 

    

  <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 

    <property name="connectionFactory" ref="connectionFactory"></property> 

    <property name="defaultDestination" ref="dest"/> 

  </bean> 

  

  <bean id="messageSender" class="com.us.sysmanager.bs.impl.MessageSenderImpl"> 

    <property name="jmsTemplate" ref="jmsTemplate"></property> 

  </bean> 

   

</beans>
package com.us.sysmanager.bs.impl;




import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.Session;

import javax.jms.TextMessage;




import org.springframework.jms.core.MessageCreator;

import org.springframework.jms.core.support.JmsGatewaySupport;




import com.us.sysmanager.bs.IMessageSender;







public class MessageSenderImpl extends JmsGatewaySupport implements IMessageSender {

	      

	  public void sendMesage(){

		//HD_Queue 是队列名 没有的话其会自行创建

		 getJmsTemplate().send("HD_Queue", 

	                 new MessageCreator() {

	       public Message createMessage(Session session) 

	                 throws JMSException {

	         return session.createTextMessage("哈哈哈哈");

	       }

	     });

	    

	  }

	  

	  public void processMessage(){

		     Message msg = getJmsTemplate().receive("HD_Queue");

		     

		     

		     

		     try{

		       TextMessage textMessage = (TextMessage) msg;

		       if( msg!=null){

		       System.out.println(" Message Received -->" + 

		                   textMessage.getText());

		       }

		     }catch(Exception e){

		           e.printStackTrace();

		     }

		     

		   

		   }

	  

}

ok配置好来试试吧,我是直接在action中测试的好搓啊呵呵

@RequestMapping("/sendMsg")
	public void DelSmsTypeForId(HttpServletResponse res) throws IOException 
	{
		messageSender.sendMesage();
        res.getWriter().print("helloWorld");
	}
	
	@RequestMapping("/getMsg")
	public void getMsg(HttpServletResponse res)throws IOException 
	{
		messageSender.processMessage();
		res.getWriter().print(" ");
	}

测试通过啊如果我一开始调用getMsg这时队列没有信息程序会一直阻塞然后调用一下sendMsg放入消息

getMsg就会获取消息继续执行了

现在越来越感慨,Spring把什么东西都封装的那么好以后没有spring怎么开发啊

当然ActiveMQ的其它高级特性还有待发掘研究,这只是个简单的消息队列入门

相关推荐