已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ActiveMq初级操作(工具:tomcat6.0、activeMq5.3.2、Myeclipse7.0,java1。5)这是本人第一次发表个人使用ActiveMq,如有错误,请指出。只为与众人共享我的心得。activeMq是一个开源的支持JMS的框架:(以下为考录他人的信息,如有版权问题,请联系) 一、特性及优势 1、实现JMS1.1规范,支持J2EE1.4以上 2、可运行于任何jvm和大部分web容器(ActiveMQ works great in any JVM) 3、支持多种语言客户端(java, C, C+, AJAX, ACTIONSCRIPT等等) 4、支持多种协议(stomp,openwire,REST) 5、良好的spring支持(ActiveMQ has great Spring Support) 6、速度很快,JBossMQ的十倍(ActiveMQ is very fast; often 10x faster than JBossMQ.) 7、与OpenJMS、JbossMQ等开源jms provider相比,ActiveMQ有Apache的支持,持续发展的优势明显。 二、下载安装1、下载/download.html,在这个页面里有你所需要的各个版本,我用的是最新的版本-ActiveMQ 5.3.2。2、安装直接解压至任意目录(如:d: apache-activemq-5.1.0),但是我用的时候是解压到D盘的根目录下,我建议各位也这样,不用对它的一些bat进行修改。3、启动ActiveMQ服务器方法1:直接运行binactivemq.bat方法2(在JVM中嵌套启动):(这个我没用过,你可以试试)cd exampleant embedBroker4、 ActiveMQ消息管理后台系统: http:/localhost:8161/admin打开主页后,你可以看到activeMq中带的一些实例,3、 详细实例以下为本人的一个简单的实例,希望对各位有所帮助,我是利用网上的资料,将tomcat和activeMq整合在一起做的一个发送接受的发布订阅的例子(我用的是tomcat6.0,activeMq5.3.2):首先整合tomcat和activeMq:1、准备jar包: 将ActiveMQ lib目录下的5个jar包复制到Tomcat 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 2、修改配置文件: 2.1 修改Tomcat的conf/context.xml文件: 在节点中添加以下内容: 配置说明:以JNDI的方式定义了ActiveMQ的broker连接url、Topic和Queue。 此处需加以注意的是Listener端的borkerURL使用了failover传输方式: failover:(tcp:/localhost:61616)?initialReconnectDelay=100&maxReconnectAttempts=5 客户端使用普通传输方式:tcp:/localhost:61616 failover transport是一种重新连接机制,用于建立可靠的传输。此处配置的是一旦ActiveMQ broker中断,Listener端将每隔100ms自动尝试连接,直至成功连接或重试5次连接失败为止。 failover还支持多个borker同时提供服务,实现负载均衡的同时可增加系统容错性,格式: failover:(uri1,.,uriN)?transportOptions 2.2 在Myeclipse中新建一个jms-test的web工程在src下,新建一个包com.flvcd.servlet (我想这个你应该会吧,如果不会,我只能说,你不合适干)然后在修改web.xml,在里面加上: jms-listener com.flvcd.servlet.JMSListener 1 2.3 修改activemq.xml文件: 为了支持持久化消息,需修改ActiveMQ的配置文件如下,使用默认的AMQ Message Store方式(索引文件方式)存储消息,据官网介绍是快速、稳定的。数据库存储方式可参照官网相关文档。 (备注:2.3中红色部分直接加到后面就行,不用修改)然后在src下的包里新建一个类,类名是JMSListener.java再复制一下代码到你的类中:package com.flvcd.servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javax.naming.*;import javax.jms.*;import org.apache.activemq.ActiveMQConnectionFactory;public class JMSListener extends HttpServlet implements MessageListener /* 初始化jms连接,创建topic监听器 */public void init(ServletConfig config) throws ServletException try InitialContext initCtx = new InitialContext();Context envContext = (Context) initCtx.lookup(java:comp/env);ConnectionFactory connectionFactory = (ConnectionFactory) envContext.lookup(jms/FailoverConnectionFactory);Connection connection = connectionFactory.createConnection();connection.setClientID(MyClient);Session jmsSession = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);/ 普通消息订阅者,无法接收持久消息 /MessageConsumer consumer =/ jmsSession.createConsumer(Destination)/ envContext.lookup(jms/topic/MyTopic);/ /基于Topic创建持久的消息订阅者,前提:Connection必须指定一个唯一的clientId,当前为MyClientTopicSubscriber consumer=jmsSession.createDurableSubscriber(Topic)envContext.lookup(jms/topic/MyTopic), MySub);consumer.setMessageListener(this);connection.start(); catch (NamingException e) e.printStackTrace(); catch (JMSException e) e.printStackTrace();/* 接收消息,做对应处理 */public void onMessage(Message message) if (checkText(message, RefreshArticleId) != null) String articleId = checkText(message, RefreshArticleId);System.out.println(接收刷新文章消息,开始刷新文章ID= + articleId); else if (checkText(message, RefreshThreadId) != null) String threadId = checkText(message, RefreshThreadId);System.out.println(接收刷新论坛帖子消息,开始刷新帖子ID= + threadId); else System.out.println(接收普通消息,不做任何处理!);private static String checkText(Message m, String s) try return m.getStringProperty(s); catch (JMSException e) e.printStackTrace(System.out);return null;你的监听端建好现在开始建立你发布端同样是新建一个类MyPublish.java然后复制一下代码到你的类里 package com.flvcd.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.MessageProducer;import javax.jms.Session;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyPublish extends HttpServlet implements MessageListener /定义初始化所需要的变量private InitialContext initCtx;private Context envContext;private ConnectionFactory connectionFactory;private Connection connection;private Session jmsSession;private MessageProducer producer;public void onMessage(Message message) / TODO Auto-generated method stub/* * Constructor of the object. */public MyPublish() super();/* * Destruction of the servlet. */public void destroy() super.destroy(); / Just puts destroy string in log/ Put your code here/* * The doGet method of the servlet. * * This method is called when a form has its tag value method equals to get. * * param request the request send by the client to the server * param response the response send by the server to the client * throws ServletException if an error occurred * throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost(request, response);/* * The doPost method of the servlet. * * This method is called when a form has its tag value method equals to post. * * param request the request send by the client to the server * param response the response send by the server to the client * throws ServletException if an error occurred * throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException String content=request.getParameter(content);/设置持久方式try producer.setDeliveryMode(DeliveryMode.PERSISTENT);Message testMessage = jmsSession.createMessage();/ 发布刷新文章消息testMessage.setStringProperty(RefreshArticleId, content);producer.send(testMessage);/ 发布刷新帖子消息testMessage.clearProperties();testMessage.setStringProperty(RefreshThreadId, content);producer.send(testMessage); catch (Exception e) e.printStackTrace();/* * Initialization of the servlet. * * throws ServletException if an error occurs */public void init() throws ServletException / Put your code heretry initCtx = new InitialContext();envContext = (Context) initCtx.lookup(java:comp/env);connectionFactory = (ConnectionFactory) envContext.lookup(jms/NormalConnectionFactory);connectio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江国企招聘-2025宁波人才投资有限公司2025年第三批人员招聘4人备考题库附答案详解(预热题)
- 2026中国储备粮管理集团有限公司内蒙古分公司招聘备考题库附答案详解(研优卷)
- 2025雄安绿研检验认证有限公司招聘5人备考题库附答案详解(典型题)
- 2026中储粮北方农业开发有限公司招聘22人备考题库附答案详解(能力提升)
- 2025年信息文化章节测试题及答案
- 2025山东黄金矿业(沂南)有限公司招聘备考题库(11人)及参考答案详解1套
- 保定物流专业职业生涯规划与管理
- 公园卫生清洁策划方案
- 2025年文学招聘考试试卷及答案
- 2025年会计题库初级真题及答案
- 宜宾市叙州区事业单位2025年下半年公开考核招聘工作人员(24人)考试笔试备考题库及答案解析
- 2025年洛阳市城乡一体化示范区招聘城市管理辅助人员130名笔试考试参考试题及答案解析
- 吉林省四平市三校2025~2026学年度上学期第三次月考试卷 七年级地理(含答案)
- 经皮冠状动脉介入治疗术后口服抗栓策略优化专家共识2026
- 2025年垫江县辅警协警招聘考试真题及参考答案详解1套
- 掘进队长考试题库及答案
- 2024年宜昌市西陵区人民医院医疗卫生专业技术人员招聘考试真题
- 多学科协作(MDT)决策方案
- 2025年中国铁路青藏集团有限公司招聘全日制普通高校大专(高职)毕业生笔试题库(二)附答案解析
- 2025年学前教育专升本真题汇编(含答案)
- 2025内蒙古呼和浩特航天经济开发区管理委员会市场化选聘国有企业总经理副总经理2人笔试历年参考题库附带答案详解
评论
0/150
提交评论