IT忍者神龟之基于Tomcat容器的ActiveMQ简单实例

来源:互联网 发布:数据库开发学什么 编辑:程序博客网 时间:2024/06/06 22:25
Java代码  收藏代码
  1.       在tomcat中配置ConnectionFactory和ActiveMQQueue,通过JNDI方式实现ActiveMQ。因为JNDI配置在  
Java代码  收藏代码
  1. tomcat容器中所以必须通过jsp访问tomcat容器。  

首先在在tomcat的lib目录添加如下jar文件。

Java代码  收藏代码
  1. <classpathentry kind="lib" path="src/activemq-all-5.5.0.jar"/>  
  2.     <classpathentry kind="lib" path="src/slf4j-api-1.5.2-sources.jar"/>  
  3.     <classpathentry kind="lib" path="src/slf4j-api-1.5.2.jar"/>  
  4.     <classpathentry kind="lib" path="src/slf4j-simple-1.5.2.jar"/>  
  5.     <classpathentry kind="lib" path="src/log4j-1.2.8.jar"/>  
  6.     <classpathentry kind="lib" path="src/commons-dbcp-1.4.jar"/>  
  7.     <classpathentry kind="lib" path="src/commons-pool-1.5.4.jar"/>  
  8.     <classpathentry kind="lib" path="src/commons-collections-3.2.1.jar"/>  
  9.     <classpathentry kind="lib" path="src/xbean-server-3.3.jar"/>  

 

在Tomcat的conf目录下的context.xml配置中添加如下:

Java代码  收藏代码
  1. <Resource name="jms/ConnectionFactory"    
  2.                 auth="Container"    
  3.                 type="org.apache.activemq.ActiveMQConnectionFactory"  
  4.                 description="JMS Connection Factory"  
  5.                 factory="org.apache.activemq.jndi.JNDIReferenceFactory"  
  6.                 brokerURL="tcp://localhost:61616"  
  7.                 brokerName="LocalActiveMQBroker" />  
  8.                   
  9.     <Resource name="jms/Queue"    
  10.                 auth="Container"    
  11.                 type="org.apache.activemq.command.ActiveMQQueue"  
  12.                 description="My Queue"  
  13.                 factory="org.apache.activemq.jndi.JNDIReferenceFactory"  
  14.                 physicalName="TomcatQueue" />      

 配置如下:

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!--  
  3.     Licensed to the Apache Software Foundation (ASF) under one or more  
  4.     contributor license agreements.  See the NOTICE file distributed with  
  5.     this work for additional information regarding copyright ownership.  
  6.     The ASF licenses this file to You under the Apache License, Version 2.0  
  7.     (the "License"); you may not use this file except in compliance with  
  8.     the License.  You may obtain a copy of the License at  
  9.      
  10.     http://www.apache.org/licenses/LICENSE-2.0  
  11.      
  12.     Unless required by applicable law or agreed to in writing, software  
  13.     distributed under the License is distributed on an "AS IS" BASIS,  
  14.     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  15.     See the License for the specific language governing permissions and  
  16.     limitations under the License.  
  17. -->  
  18. <!-- START SNIPPET: xbean -->  
  19. <beans   
  20.   xmlns="http://www.springframework.org/schema/beans"   
  21.   xmlns:amq="http://activemq.apache.org/schema/core"  
  22.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  23.   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  24.   http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">  
  25.   <!-- 连接连接工厂 -->  
  26.  <bean  id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">  
  27.      <property name="jndiName" value="java:comp/env/jms/ConnectionFactory"></property>  
  28.  </bean>  
  29.    
  30.    
  31.  <bean  id="tomcatQueue" class="org.springframework.jndi.JndiObjectFactoryBean">  
  32.      <property name="jndiName" value="java:comp/env/jms/Queue"></property>  
  33.  </bean>  
  34.   
  35.  <!-- 配置JMS的模板 -->  
  36. <bean id="jmsTemplate"  class="org.springframework.jms.core.JmsTemplate">  
  37.    <property name="connectionFactory" >  
  38.      <ref  bean="jmsConnectionFactory"/>  
  39.    </property>  
  40.    <property name="defaultDestination">  
  41.       <ref bean="tomcatQueue"/>  
  42.    </property>  
  43. </bean>  
  44.   
  45.   
  46. <!-- 发送消息队列到目的地 -->  
  47. <bean id="sender"  class="easyway.activemq.app.demo2.MessageSender">  
  48.     <property name="jmsTemplate">  
  49.        <ref bean="jmsTemplate"/>  
  50.     </property>  
  51. </bean>  
  52. <!-- 接收消息 -->  
  53. <bean id="receiver" class="easyway.activemq.app.demo2.MessageReceiver">  
  54.     <property name="jmsTemplate">  
  55.        <ref bean="jmsTemplate"/>  
  56.     </property>  
  57. </bean>  
  58.   
  59.   
  60. <bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  61.    <property name="connectionFactory">  
  62.       <ref bean="jmsConnectionFactory"/>  
  63.    </property>  
  64.    <property name="destination">  
  65.       <ref bean="tomcatQueue"/>  
  66.    </property>  
  67.    <property name="messageListener">  
  68.       <ref bean="receiver"/>  
  69.     </property>  
  70. </bean>  
  71.   
  72. </beans>  

 

代码如下:

Java代码  收藏代码
  1. package easyway.activemq.app.demo2;  
  2.   
  3. import javax.jms.JMSException;  
  4. import javax.jms.Message;  
  5. import javax.jms.Session;  
  6.   
  7. import org.springframework.jms.core.JmsTemplate;  
  8. import org.springframework.jms.core.MessageCreator;  
  9.   
  10. /** 
  11.  * tomcat和activemq整合 
  12.  * 消息发送者 
  13.  * @author longgangbai 
  14.  * 
  15.  */  
  16. public class MessageSender {  
  17.   private JmsTemplate jmsTemplate;  
  18.     
  19.     
  20.   public void send(final String text){  
  21.       jmsTemplate.send(new MessageCreator(){  
  22.   
  23.         public Message createMessage(Session session) throws JMSException {  
  24.             // TODO Auto-generated method stub  
  25.             return session.createTextMessage(text);  
  26.         }  
  27.       });  
  28.   }  
  29.   
  30.   
  31.     public JmsTemplate getJmsTemplate() {  
  32.         return jmsTemplate;  
  33.     }  
  34.       
  35.       
  36.     public void setJmsTemplate(JmsTemplate jmsTemplate) {  
  37.         this.jmsTemplate = jmsTemplate;  
  38.     }  
  39. }  

 

Java代码  收藏代码
  1. package easyway.activemq.app.demo2;  
  2.   
  3. import javax.jms.JMSException;  
  4. import javax.jms.Message;  
  5. import javax.jms.MessageListener;  
  6. import javax.jms.TextMessage;  
  7.   
  8. import org.springframework.jms.core.JmsTemplate;  
  9. /** 
  10.  * 消息接收者 
  11.  * @author longgangbai 
  12.  * 
  13.  */  
  14. public class MessageReceiver implements  MessageListener {  
  15.     private JmsTemplate jmsTemplate;  
  16.         
  17.     public JmsTemplate getJmsTemplate() {  
  18.         return jmsTemplate;  
  19.     }  
  20.   
  21.     public void setJmsTemplate(JmsTemplate jmsTemplate) {  
  22.         this.jmsTemplate = jmsTemplate;  
  23.     }  
  24.     public void receive() throws JMSException{  
  25.          TextMessage text=(TextMessage)this.jmsTemplate.receive();  
  26.         System.out.println("receive="+text.getText());  
  27.     }  
  28.     public void onMessage(Message message) {  
  29.          if(message instanceof TextMessage){  
  30.              TextMessage text=(TextMessage)message;  
  31.              try {  
  32.                 System.out.println(text.getText());  
  33.             } catch (Exception e) {  
  34.             }  
  35.          }  
  36.     }  
  37.       
  38. }  

 

Java代码  收藏代码
  1. package easyway.activemq.app.demo2;  
  2.   
  3. import javax.jms.JMSException;  
  4.   
  5. import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;  
  6. /** 
  7.  * 测试类 
  8.  * @author longgangbai 
  9.  * 
  10.  */  
  11. public class MessageTest {  
  12.     public void test() throws JMSException {  
  13.         ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("app-activemq-tomcat.xml");  
  14.         MessageSender sender=(MessageSender)ctx.getBean("sender");  
  15.         MessageReceiver receive=(MessageReceiver)ctx.getBean("receiver");  
  16.         sender.send("helloworld");  
  17.         receive.receive();  
  18.     }  
  19.   
  20. }  

 index.jsp内容:

Java代码  收藏代码
  1. <%@ page language="java" import="easyway.activemq.app.demo2.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.   
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  8. <html>  
  9.   <head>  
  10.     <base href="<%=basePath%>">  
  11.       
  12.     <title>My JSP 'index.jsp' starting page</title>  
  13.     <meta http-equiv="pragma" content="no-cache">  
  14.     <meta http-equiv="cache-control" content="no-cache">  
  15.     <meta http-equiv="expires" content="0">      
  16.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  17.     <meta http-equiv="description" content="This is my page">  
  18.     <!--  
  19.     <link rel="stylesheet" type="text/css" href="styles.css">  
  20.     -->  
  21.   </head>  
  22.     
  23.   <body>  
  24.     
  25.     <%  
  26.         MessageTest message=new MessageTest();  
  27.         message.test();  
  28.      %>  
  29.   <br>  
  30.   </body>  
  31. </html>  
1.Active MQ安装配置 

1.1.下载并解压Active MQ 
1.2.双击bin/activemq.bat启动Active MQ 
1.3.浏览器输入http://localhost:8161/admin/ ,可以图形化界面管理activemq 
1.4.点击Queue,新建一个队列名字叫TestQueue1 

 

2.在Eclipse里面配置Tomcat的context.xml,这样Spring就能以JNDI方式访问ActiveMQ了 

 

加入以下代码 
Xml代码  收藏代码
  1. <Resource name="jms/ConnectionFactory"  
  2.        auth="Container"  
  3.        type="org.apache.activemq.ActiveMQConnectionFactory"  
  4.        description="JMS Connection Factory"  
  5.        factory="org.apache.activemq.jndi.JNDIReferenceFactory"  
  6.        brokerURL="tcp://localhost:61616"  
  7.        brokerName="LocalActiveMQBroker" />  
  8.      
  9.    <Resource name="jms/Queue"  
  10.        auth="Container"  
  11.        type="org.apache.activemq.command.ActiveMQQueue"  
  12.        description="my Queue"  
  13.        factory="org.apache.activemq.jndi.JNDIReferenceFactory"  
  14.        physicalName="TestQueue1" />  


3.导入以下Jar包 
activemq-all-5.4.1.jar 
commons-logging-1.1.1.jar 
javax.jms_1.1.1.jar 
spring.asm-3.0.0.RELEASE.jar 
spring.beans-3.0.0.RELEASE.jar 
spring.context-3.0.0.RELEASE.jar 
spring.core-3.0.0.RELEASE.jar 
spring.expression-3.0.0.RELEASE.jar 
spring.jms-3.0.0.RELEASE.jar 
spring.transaction-3.0.0.RELEASE.jar 
spring.web-3.0.0.RELEASE.jar 

4.编写2个类,一个MessageQueueSender发消息,一个MessageQueueReceiver收消息,为了方便测试,我们还写了一个Servlet调用MessageQueueSender,通过JSP来调用Servlet 

5.写Spring的配置文件,假设存在这个文件里:jms-activemq.xml 

Xml代码  收藏代码
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  3.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  4.   
  5.     <!-- Connection factory -->  
  6.     <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">  
  7.         <property name="jndiName" value="java:comp/env/jms/ConnectionFactory"></property>  
  8.     </bean>  
  9.   
  10.     <!-- Queue -->  
  11.     <bean id="jmsQueue" class="org.springframework.jndi.JndiObjectFactoryBean"  
  12.         lazy-init="true">  
  13.         <property name="jndiName" value="java:comp/env/jms/Queue"></property>  
  14.     </bean>  
  15.   
  16.     <!-- Spring JMS Template -->  
  17.     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"  
  18.         lazy-init="true">  
  19.         <property name="connectionFactory" ref="jmsConnectionFactory"></property>  
  20.         <property name="defaultDestination" ref="jmsQueue"></property>  
  21.     </bean>  
  22.   
  23.     <!-- Sender -->  
  24.     <bean id="jmsSender" class="com.xp.MessageQueueSender"  
  25.         lazy-init="true">  
  26.         <property name="jmsTemplate" ref="jmsTemplate"></property>  
  27.     </bean>  
  28.   
  29.     <!-- Receiver -->  
  30.     <bean id="jmsReceiver" class="com.xp.MessageQueueReceiver">  
  31.     </bean>  
  32.   
  33.     <!-- Message Listener -->  
  34.     <bean id="listenerContainer"  
  35.         class="org.springframework.jms.listener.DefaultMessageListenerContainer">  
  36.         <property name="connectionFactory" ref="jmsConnectionFactory"></property>  
  37.         <property name="destination" ref="jmsQueue"></property>  
  38.         <property name="messageListener" ref="jmsReceiver"></property>  
  39.         <property name="autoStartup" value="true" />  
  40.     </bean>  
  41.   
  42. </beans>  


6.启动tomcat测试看效果 

6.1.浏览器输入http://localhost:8080/JMSTest/,随便输入消息比如"Hello",点击submit 

 

6.2.可在控制台看到Hello的信息,表明发送和接受者都已经OK 



6.3.还可以在ActiveMQ管理台创建一条消息,点击"Send To" 

 

随便打入一点消息 

 

6.4.可在控制台看到接受者能收到此消息 



0 0
原创粉丝点击