设为首页 收藏本站
查看: 523|回复: 0

[经验分享] Active MQ (三) TOMCAT整合

[复制链接]

尚未签到

发表于 2017-1-25 06:37:39 | 显示全部楼层 |阅读模式
  通过与TOMCAT整合,使用TOMCAT的JNDI服务,通过JNDI获取ConnectionFactory等
  与MQ提供商API耦合的资源,从而实现真正意义上的JMS编程。
  1.准备:
  将%ACTIVEMQ_HOME%\lib中的
  activemq-core-5.1.0.jar
activemq-web-5.1.0.jar
geronimo-j2ee-management_1.0_spec-1.0.jar
geronimo-jms_1.1_spec-1.1.1.jar
geronimo-jta_1.0.1B_spec-1.0.1.jar
  COPY到%TOMCAT6.0_HOME%\lib
  (我的ACTIVEMQ是5.1.0所以要和TOMCAT6.0整合)
  2.配置JNDI
  在WEB APP的META-INF目录下新建context.xml,内容如下:
  <?xml version='1.0' encoding='utf-8'?>
<Context>
  <Resource  
        name="jms/NormalConnectionFactory" 
        auth="Container" 
        type="org.apache.activemq.ActiveMQConnectionFactory" 
        description="JMS Connection Factory" 
        factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
        brokerURL="tcp://localhost:61616" 
        brokerName="localhost" 
        useEmbeddedBroker="false"/>  
 
 <Resource name="jms/queue/sender" 
        auth="Container" 
        type="org.apache.activemq.command.ActiveMQQueue" 
        factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
        physicalName="MY.TEST.SENDER"/>
   
    <Resource name="jms/queue/receiver" 
        auth="Container" 
        type="org.apache.activemq.command.ActiveMQQueue" 
        factory="org.apache.activemq.jndi.JNDIReferenceFactory" 
        physicalName="MY.TEST.RECEIVER"/>
       
</Context>
  3.通过ServletContextListener在WEB APP启动时将JNDI中可并发复用的部分保存于application上下文中。
  JMSInitContextListener.java
  package listener;
  import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
  public class JMSInitContextListener implements ServletContextListener {
  public void contextDestroyed(ServletContextEvent e) {
  // TODO Auto-generated method stub
  
 }
  public void contextInitialized(ServletContextEvent event) {
  ServletContext application = event.getServletContext();
  String jmsConnFactory = application.getInitParameter("jmsConnFactory");
  String jmsQueueSendTo = application.getInitParameter("jmsQueueSendTo");
  String jmsQueueReceiveFrom = application.getInitParameter("jmsQueueReceiveFrom");
  try {
   Context ctxt = new InitialContext();
   
   ConnectionFactory factory = (ConnectionFactory) ctxt.lookup(jmsConnFactory);
   Connection conn = factory.createConnection();
   conn.start();
   Queue queueSendTo = (Queue) ctxt.lookup(jmsQueueSendTo);
   Queue queueReceiveFrom = (Queue) ctxt.lookup(jmsQueueReceiveFrom);
   
   application.setAttribute("jmsConnection", conn);
   application.setAttribute("jmsQueueSendTo", queueSendTo);
   application.setAttribute("jmsQueueReceiveFrom", queueReceiveFrom);
  } catch (NamingException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (JMSException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
  }
  4.在WEB.XML中申明该Listener
  <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
  <context-param>
   <param-name>jmsConnFactory</param-name>
   <param-value>java:comp/env/jms/NormalConnectionFactory</param-value>
  </context-param>
 
  <context-param>
   <param-name>jmsQueueSendTo</param-name>
   <param-value>java:comp/env/jms/queue/sender</param-value>
  </context-param>
 
  <context-param>
   <param-name>jmsQueueReceiveFrom</param-name>
   <param-value>java:comp/env/jms/queue/receiver</param-value>
  </context-param>
 
  <listener>
   <listener-class>listener.JMSInitContextListener</listener-class>
  </listener>
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
  5.创建一测试用的JSP
  index.jsp 本例子实现的功能是模拟一MQ 消息客户端,模拟与上一节中的消息处理器进行通讯
  <%@ page language="java" pageEncoding="UTF-8"%>
<jsp:directive.page import="javax.jms.Connection"/>
<jsp:directive.page import="javax.jms.Queue"/>
<jsp:directive.page import="javax.jms.Session"/>
<jsp:directive.page import="javax.jms.MessageProducer"/>
<jsp:directive.page import="javax.jms.TextMessage"/>
<jsp:directive.page import="javax.jms.MessageConsumer"/>
<jsp:directive.page import="javax.jms.Message"/>
  <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  Connection connection = (Connection) application.getAttribute("jmsConnection");
Queue queueSendTo = (Queue) application.getAttribute("jmsQueueSendTo");
Queue queueReceiveFrom = (Queue) application.getAttribute("jmsQueueReceiveFrom");
  Session jmsSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
  MessageProducer sender = jmsSession.createProducer(queueSendTo);
TextMessage messageToSend = jmsSession.createTextMessage();
messageToSend.setText("Nice to meet u!");
messageToSend.setJMSCorrelationID("99999");
sender.send(messageToSend);
  MessageConsumer receiver = jmsSession.createConsumer(queueReceiveFrom, "JMSCorrelationID='99999'");
Message messageReceived = receiver.receive(3000);
  receiver.close();
sender.close();
jmsSession.close();
%>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>JMS Queue Test</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
 
  <body>
 JMS Queue Test<br>
 <%="Send :" + messageToSend.getText()%><br>
 <%="Send JMSCorrelationID :" + messageToSend.getJMSCorrelationID()%><br>
 <%="-----------------------------------------" %><br>
 <% if (messageReceived instanceof TextMessage) { %>
  <%="Receive : " + ((TextMessage) messageReceived).getText()%><br>
  <%="Receive JMSCorrelationID : " + ((TextMessage) messageReceived).getJMSCorrelationID()%><br>
 <% } %>
  </body>
</html>
  6.测试
  开启MQ,创建对应的QUEUE,运行上一节的消息处理器,启动TOMCAT,进入index.jsp,刷新index.jsp
  7.参考资料
  http://activemq.apache.org/tomcat.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332972-1-1.html 上篇帖子: Ubuntu10.10 tomcat 6 下篇帖子: Tomcat配置HTTP压缩功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表