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的其它高级特性还有待发掘研究,这只是个简单的消息队列入门

你可能感兴趣的:(spring,activemq)