- 浏览: 183242 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (101)
- DataBase (8)
- Java (37)
- Software (14)
- JavaScript (8)
- XML (4)
- WebService (5)
- SharePoint (6)
- ESB (4)
- Algorithm&Data Structure (5)
- CloudFoundry (1)
- liferay (1)
- portal (1)
- System Analysis (1)
- Storm (2)
- linux (3)
- Server (1)
- elasticsearch (1)
- angular (1)
- spark (1)
- python (2)
- ELK (1)
- Resin (1)
- Flink (1)
- python AI (1)
最新评论
-
yuekinger:
若果 64bit 下正常 32位系统下不正常运行的 排除dll ...
Java 调用 C# DLL -
yuekinger:
Win764 系统下成功! 实现 java 调用 c++ 链接 ...
Java 调用 C# DLL -
sdasds:
sdasds 写道pp1314 写道x931100537 写道 ...
Java 调用 C# DLL -
sdasds:
pp1314 写道x931100537 写道Exception ...
Java 调用 C# DLL -
pp1314:
x931100537 写道Exception in threa ...
Java 调用 C# DLL
1, 配置activemq.xml时,修改<broker>子节点内容时,子节点需要按照字母顺序排在<broker>中,按照xsd定义要求对activemq.xml内容进行编排。
2, 使用Ajax与ActiveMQ交互时,如果一个浏览器窗口打开多个tab,每个tab使用amq.init初始化了一个amq 对象,那只有一个amq对象会生效。
为了解决这个问题,从ActiveMQ 5.4.2开始, 在调用 amq.init 时,指定 a unique clientId,此时一个浏览器窗口里的多个tab的amq对象就可以共存生效,每个tab里的amq对象都可以独立与broker交互。
3, ActiveMQ利用Ajax使用轮询机制去获取服务器的信息,而不是使用服务器推送方式。
理由参见:Comparison to Pushlets in http://activemq.apache.org/ajax.html
4, 往activeMQ的Ajax请求加入用户验证信息时, 需要修改amq.js中的buildParams方法和init方法.
5, 启动connection的类如果不关闭connection,该类将处于活动状态,与activeMQ也将处于连接状态.
6, MessageConsumer.receive方法用于同步接收消息,如果topic、queue里没有消息,就处于等待状态,一旦获取过一次消息,则该consumer.receive就不再接收消息。
7, ActiveMQ 与 web server集成
7.1 在web.xml中加入如下配置,
7.2 在项目的lib中加入依赖的jars, 如: spring-web-3.0.3.RELEASE.jar, camel等jar.
8, 控制消息级别的安全过滤
8.1 实现MessageAuthorizationPolicy接口
8.2 在activemq.xml中加入如下配置信息,
9. 使用jconsole监控ActiveMQ
9.1 修改activemq.xml, 在broker元素中加入 useJmx="true" 属性。
9.2 修改activemq.bat, 加入SUNJMX=-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
9.3 在dos窗口中输入jconsole,在“远程连接”中输入:service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/jmxrmi,可以在jconsole的控制台中查看ActiveMQ的使用情况。
10. ActiveMQ 4.0 的bug
问题: 对于auto-acknowledge的queue有bug,会从queue重复发送同一条messge给consumer。
解决方案:将OptimizeAcknowledge 设为false。设置的途径有三种:
1) cf = new ActiveMQConnectionFactory("tcp://locahost:61616?jms.optimizeAcknowledge=true");
2) ((ActiveMQConnectionFactory)connectionFactory).setOptimizeAcknowledge(true);
3) ((ActiveMQConnection)connection).setOptimizeAcknowledge(true);
11. ActiveMQ 4.0 的JAAS在JDK 1.4下的实现
11.1 首先获取ActiveMQ 的activemq-jaas-4.0-M1.jar (for JDK 1.5),该包不在4.0的发布包里,需要单独下载
11.2 使用retrotranslator将jaas jar转成符合jdk 1.4要求的jar。
11.3 在启动ActiveMQ的启动脚本activemq.bat中加入JAAS配置文件路径
11.4 配置ActiveMQ,修改activemq.xml、login.config、users.properties、groups.properties.
其中对于login.config, 里面的java package要与jaas jar里的package路径一致。如:org.activemq.jaas.PropertiesLoginModule,org.activemq.jaas.properties.user, org.activemq.jaas.properties.group
12. 使用JMX与ActiveMQ 4.0 通信,获取topic、queue等信息
12.1 使用retrotranslator 将activemq-web-5.5.0.jar转成符合jdk 1.4的jar
12.2 引入jar:mx4j-remote-3.0.2.jar,activemq-web-5.5.0.jar-for4.jar,slf4j-log4j12-1.5.11.jar
12.3 在activemq.xml文件中的broker加入 useJmx="true" 属性内容。
12.4 Java程序代码如下:
13. 获取queue类型队列中剩余消息条数
2, 使用Ajax与ActiveMQ交互时,如果一个浏览器窗口打开多个tab,每个tab使用amq.init初始化了一个amq 对象,那只有一个amq对象会生效。
为了解决这个问题,从ActiveMQ 5.4.2开始, 在调用 amq.init 时,指定 a unique clientId,此时一个浏览器窗口里的多个tab的amq对象就可以共存生效,每个tab里的amq对象都可以独立与broker交互。
3, ActiveMQ利用Ajax使用轮询机制去获取服务器的信息,而不是使用服务器推送方式。
理由参见:Comparison to Pushlets in http://activemq.apache.org/ajax.html
4, 往activeMQ的Ajax请求加入用户验证信息时, 需要修改amq.js中的buildParams方法和init方法.
5, 启动connection的类如果不关闭connection,该类将处于活动状态,与activeMQ也将处于连接状态.
6, MessageConsumer.receive方法用于同步接收消息,如果topic、queue里没有消息,就处于等待状态,一旦获取过一次消息,则该consumer.receive就不再接收消息。
7, ActiveMQ 与 web server集成
7.1 在web.xml中加入如下配置,
<context-param> <param-name>brokerURI</param-name> <param-value>/WEB-INF/activemq-simple.xml</param-value> </context-param> <listener> <listener-class>org.apache.activemq.web.SpringBrokerContextListener</listener-class> </listener>
7.2 在项目的lib中加入依赖的jars, 如: spring-web-3.0.3.RELEASE.jar, camel等jar.
8, 控制消息级别的安全过滤
8.1 实现MessageAuthorizationPolicy接口
8.2 在activemq.xml中加入如下配置信息,
<messageAuthorizationPolicy> <bean class="cn.com.*.messageagent.utils.AuthorizationPolicy" xmlns="http://www.springframework.org/schema/beans"/> </messageAuthorizationPolicy>
9. 使用jconsole监控ActiveMQ
9.1 修改activemq.xml, 在broker元素中加入 useJmx="true" 属性。
9.2 修改activemq.bat, 加入SUNJMX=-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
9.3 在dos窗口中输入jconsole,在“远程连接”中输入:service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/jmxrmi,可以在jconsole的控制台中查看ActiveMQ的使用情况。
10. ActiveMQ 4.0 的bug
问题: 对于auto-acknowledge的queue有bug,会从queue重复发送同一条messge给consumer。
解决方案:将OptimizeAcknowledge 设为false。设置的途径有三种:
1) cf = new ActiveMQConnectionFactory("tcp://locahost:61616?jms.optimizeAcknowledge=true");
2) ((ActiveMQConnectionFactory)connectionFactory).setOptimizeAcknowledge(true);
3) ((ActiveMQConnection)connection).setOptimizeAcknowledge(true);
11. ActiveMQ 4.0 的JAAS在JDK 1.4下的实现
11.1 首先获取ActiveMQ 的activemq-jaas-4.0-M1.jar (for JDK 1.5),该包不在4.0的发布包里,需要单独下载
11.2 使用retrotranslator将jaas jar转成符合jdk 1.4要求的jar。
java -jar retrotranslator-transformer-1.2.9.jar -srcjar activemq-jaas-5.5.0.jar -destjar activemq-jaas-5.5.0-for4.jar
11.3 在启动ActiveMQ的启动脚本activemq.bat中加入JAAS配置文件路径
-Djava.security.auth.login.config=login.config
11.4 配置ActiveMQ,修改activemq.xml、login.config、users.properties、groups.properties.
其中对于login.config, 里面的java package要与jaas jar里的package路径一致。如:org.activemq.jaas.PropertiesLoginModule,org.activemq.jaas.properties.user, org.activemq.jaas.properties.group
activemq-domain { org.activemq.jaas.PropertiesLoginModule required debug=true org.activemq.jaas.properties.user="users.properties" org.activemq.jaas.properties.group="groups.properties"; };
12. 使用JMX与ActiveMQ 4.0 通信,获取topic、queue等信息
12.1 使用retrotranslator 将activemq-web-5.5.0.jar转成符合jdk 1.4的jar
12.2 引入jar:mx4j-remote-3.0.2.jar,activemq-web-5.5.0.jar-for4.jar,slf4j-log4j12-1.5.11.jar
12.3 在activemq.xml文件中的broker加入 useJmx="true" 属性内容。
12.4 Java程序代码如下:
public static void getStaticsFromAMQ() { RemoteJMXBrokerFacade createConnector = new RemoteJMXBrokerFacade(); System.setProperty("webconsole.jmx.url", "service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"); //System.setProperty("webconsole.jmx.user","controlRole"); //System.setProperty("webconsole.jmx.password","abcd1234"); SystemPropertiesConfiguration configuration = new SystemPropertiesConfiguration(); createConnector.setConfiguration(configuration); try { BrokerViewMBean brokerAdmin = createConnector.getBrokerAdmin(); // String brokerName =(brokerAdmin).getBrokerName(); // System.out.println("BrokerName ="+brokerName ); long messages =brokerAdmin.getTotalMessageCount(); System.out.println("messages ="+messages ); long consumerCount=brokerAdmin.getTotalConsumerCount(); System.out.println("consumerCount ="+consumerCount ); long dequeueCount=brokerAdmin.getTotalDequeueCount(); System.out.println("dequeueCount ="+dequeueCount ); long enqueueCount=brokerAdmin.getTotalEnqueueCount(); System.out.println("enqueueCount ="+enqueueCount ); // System.out.println(((ActiveMQConnection) brokerAdmin).getBrokerName()); //获取Topic相关的ObjectName ObjectName[] topicList=brokerAdmin.getTopics(); List answer = (List) createConnector.getTopics(); //getManagedObjects(topicList, TopicViewMBean.class); for (int i = 0; i < answer.size(); i++) { TopicViewMBean value = (TopicViewMBean) answer.get(i); System.out.println("topic ="+value.getName() + ";enqueued:" + value.getEnqueueCount() + ";dequeued:"+value.getDequeueCount() + ";queueSize:" + value.getQueueSize()); } //获取Queue相关的ObjectName // ObjectName[] queueList=brokerAdmin.getQueues(); answer = (List) createConnector.getQueues(); for (int i = 0; i < answer.size(); i++) { QueueViewMBean value = (QueueViewMBean) answer.get(i); System.out.println("queue ="+value.getName() + ";enqueued:" + value.getEnqueueCount() + ";dequeued:"+value.getDequeueCount() + ";queueSize:" + value.getQueueSize()); } //根据ObjectName创建相关的JMX对象获取相关的信息。 } catch (Exception e) { e.printStackTrace(); } }
13. 获取queue类型队列中剩余消息条数
public static void getNumOfMsg() throws JMSException, VSJMSException { Connection connection = EndPointManager.getInstance().getConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = session.createQueue("QUEUES." + "test"); QueueBrowser browser = session.createBrowser(queue); int maxMessages = 100; Enumeration iter = browser.getEnumeration(); int counter = 0; for (; iter.hasMoreElements() && (maxMessages <= 0 || counter < maxMessages); counter++) { Message message = (Message) iter.nextElement(); } log.info("count:" + counter); }
- Retrotranslator-1.2.9-bin.rar (1.3 MB)
- 下载次数: 10
- activemq-jaas-4.0-M1.jar (11.1 KB)
- 下载次数: 4
- activemq-jaas-4.0-M1-for4.jar (11.3 KB)
- 下载次数: 4
- jaas_参数.rar (3.6 KB)
- 下载次数: 7
- JMX_ForAMQ.rar (256 KB)
- 下载次数: 26
发表评论
-
实时推送
2018-12-20 15:47 807初探和实现websocket心跳重连 http://www ... -
Resin 维护
2018-06-13 09:42 695<!--[if gte mso 9]>< ... -
自动化测试
2016-12-13 17:16 6511、linux下 执行JMeter测试脚本 在机器的 ... -
Spark 记录
2016-07-15 09:47 7671、java.lang.StackOverflowError ... -
Java 日常操作
2016-03-15 09:57 631Eclipse 闪退 1、增加内存设置 -vmargs ... -
maven技术分享(一) 标准maven项目的搭建
2014-08-27 14:19 0其中的nexus 的maven 私服搭建,参考网上的资料。 ... -
Java 调用 C# DLL
2014-04-11 16:57 15779Java无法直接调用C# dll,需要通过经过桥接的方式, ... -
Apache 负载均衡的环境搭建 (使用Tomcat作为web server)
2012-03-02 17:21 2911前言 使用tomcat作为web server,搭建Apach ... -
知识归纳索引
2012-02-23 09:57 1216本片文章记录了读过的书籍和文章,并将原始资料作为附件上传。 ... -
acegi 开发笔记
2011-12-26 17:36 8406. 编译acegi-security-1.0.7-s ... -
Mule 开发问题记录
2011-11-30 16:54 17511. A Mule runtime distribution ... -
ActiveMQ问题解决记录
2011-11-09 14:24 12694问题4:Networks of Brokers 在每个acti ... -
Log4j 学习笔记
2011-09-14 12:00 978为了彻底掌握log4j的使用,有必要去了解log4j的实现结构 ... -
ESB 研究
2011-08-24 15:08 1315Introduction to ESB 一些ESB的名词 E ... -
struts 开发笔记
2011-08-24 10:44 13761,struts默认根据http request请求流中的键值 ... -
JMS,ActiveMQ 内部实现的研究
2011-08-23 10:28 10741问题1,AMQ 4的openWireFormat与AMQ 5的 ... -
Java 学习笔记:1,类引导,反射机制下的对象创建
2011-08-22 17:39 9961, 类引导,反射机制下的对象创建 类引导最终会字节流传给na ... -
设计模式
2011-08-04 11:38 10461, 设计模式在JDK中的体现 参见stackoverflow ... -
Java 中的 中文编码
2011-05-26 13:56 54241. java.net.URLEncoder.encode j ... -
Spring + Hibernate 例子(使用petclinic, 利用ant)
2011-03-03 16:30 1067Spring + Hibernate 例子 1. 使用Spr ...
相关推荐
ActiveMQ开发规范及方案 ActiveMQ是一种流行的开源消息队列 middleware,广泛应用于分布式系统中。作为一种消息队列 middleware,ActiveMQ提供了许多功能,例如支持多种消息协议、事务支持、持久化机制等。为了确保...
**Delphi ActiveMQ 开发包详解** 在软件开发中,消息中间件扮演着至关重要的角色,它能够实现应用之间的解耦,提高系统的可扩展性和稳定性。ActiveMQ是Apache基金会的一个开源项目,它是一个功能强大的消息代理,...
在"ActiveMQ开发实例-1"中,你将学习如何使用 ActiveMQ-CPP 库进行基本的发布/订阅(Publish/Subscribe)和点对点(Point-to-Point)模式的消息传递。这两种模式是消息中间件中最常见的通信模型。 1. **发布/订阅...
总结来说,ActiveMQ开发实例-2提供了使用C++和MFC与ActiveMQ交互的实际案例。通过理解ActiveMQ的基本原理和操作,结合MFC库的特性,开发者可以构建高效、可靠的分布式消息系统。在实践中,不断探索和优化,将有助于...
ActiveMQ 开发例子初学者可以看看
**ActiveMQ开发实例-5** Apache ActiveMQ是业界广泛使用的开源消息代理,它遵循Java Message Service (JMS) 规范,提供可靠的消息传递服务,适用于多种编程语言,包括C++和MFC(Microsoft Foundation Classes)环境...
三、使用ActiveMQ开发JMS 1. **安装配置**:首先,下载并安装ActiveMQ,配置相关参数,如端口、日志位置等,并启动服务器。 2. **创建连接工厂**:在Java代码中,我们需要创建一个JMS连接工厂,通常使用`...
ActiveMQ开发实例-3,开发工程配置说明,需配合ActiveMQ开发实例系列其他资源使用
### ActiveMQ开发实例核心知识点解析 #### 一、ActiveMQ简介 **ActiveMQ**是由Apache组织维护的一个开源项目,作为一款高性能的消息中间件,它在众多消息传递系统中脱颖而出。ActiveMQ不仅支持JMS 1.1和J2EE 1.4...
首先,对于"ActiveMQ开发实例-4",我们可能涉及到的是在已有系列教程的基础上更深入的应用或解决特定问题。这通常包括创建生产者和消费者,设置消息属性,处理事务,以及可能的故障恢复策略等。开发者需要理解...
通过阅读《ActiveMQ中文手册》和《ActiveMQ开发手册》,开发者将能够全面了解和掌握ActiveMQ的各个方面,包括基本概念、配置、使用技巧以及性能调优,从而在实际项目中充分利用其功能,构建稳定、高效的分布式系统。
这个"activemq开发工具"是一个本地版本的ActiveMQ,特别适用于开发者在开发过程中进行本地调试。 ActiveMQ的核心特性包括: 1. **跨语言支持**:由于其基于Java,ActiveMQ可以与任何支持JMS的编程语言(如Java、...
### ActiveMQ 开发文档知识点详解 #### 一、引言 随着分布式系统规模与复杂性的增加,传统的远程过程调用(RPC)中间件技术(如CORBA、DCOM、RMI等)逐渐暴露出局限性,例如同步通信、生命周期耦合等问题。针对...
### ActiveMQ开发教程知识点详解 #### 一、ActiveMQ特性 **1.1 ActiveMQ服务器工作模型** ActiveMQ采用了一种灵活且强大的消息传递模型,它支持多种消息传递模式,如点对点(PTP)和发布/订阅(pub/sub)等。在...
MQJMS以及ActiveMQ的关系理解 主动式MQ ActiveMQ的环境搭建 ...分布式ActiveMQ集群开发详解 ActiveMQ集群配置方法 在Spring下集成ActiveMQ ActiveMQ中间件实现实时消息传递第13讲-使用ActiveMQ与Sping框架整合案例
在使用ActiveMQ开发应用程序之前,需要在项目的构建配置文件(例如`pom.xml`)中引入必要的依赖库。以下是一个典型的配置示例: ```xml <project.build.sourceEncoding>UTF-8 <spring.version>4.2.4.RELEASE ...
本指南主要关注如何使用ActiveMQ开发消息应用,通过`Instant Apache ActiveMQ Messaging Application Development How-to源码`,我们可以深入理解ActiveMQ的核心特性和实际应用。 1. **ActiveMQ简介**: - **概念*...
适合不同的应聘者:这份面试专题资料既适合有一定经验的ActiveMQ开发人员,也适合初学者和想要了解ActiveMQ的人使用。初学者可以从基础知识开始学习,逐渐掌握更多的知识,而有经验的开发人员可以通过这份面试专题...