




已阅读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物业服务委托管理标准合同范本
- 出国企业安全培训课件
- 出入院流程课件
- 出入量记录课件
- 成都市新都区部分单位2025年8月公开招聘编外(聘用)人员(三)(20人)备考练习试题及答案解析
- 人教PEP版(一起)(2024)一年级上册英语全册教案
- (9月3日)铭记历史珍爱和平-纪念中国人民抗日战争暨世界反法西斯战争胜利80周年爱国主义主题教育班会课件
- 《大学生就业指导》课件第六章 就业权益与法律保障
- 2025年事业单位招聘工作人员考试笔试试题(含答案)
- 新版部编人教版二年级上册语文全册1-8单元教材分析
- 纪念中国人民抗日战争胜利80周年心得体会
- 2025~2026学年新人教版八年级英语上册教学计划
- 2025年律师培训试题(含答案)
- 2025年事业单位工勤技能-河南-河南农业技术员一级(高级技师)历年参考题库含答案解析(5卷套题【单选100题】)
- 2025年不动产登记业务知识试题及答案(司法考试资料)
评论
0/150
提交评论