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