ActiveMQ详细笔记(一)
ActiveMQ的安装安装要求:部署需要jdk1.5及以上,编译需要jdk1.5(java5)及以上Java的环境变量(JAVA_HOME)必须设置,即jdk安装的目录,比如c:Program Filesjsdk.1.6下载ActiveM Q:http://activ...
ActiveMQ的安装
安装要求:
部署需要jdk1.5及以上,编译需要jdk1.5(java5)及以上
Java的环境变量(JAVA_HOME)必须设置,即jdk安装的目录,比如c:Program Filesjsdk.1.6
下载ActiveMQ:https://www.doczj.com/doc/655656314.html,/download.html
解压,如图:
运行bin文件夹下的activemq.bat,出现如下图所示:
验证是否运行成功:
在浏览器中输入:http://localhost:8161/admin/,出现如下图所示表示成功:
2
3 4 5 6 7 8 9
把authenticate属性的值改成true即可,重启activemq.bat,再登录监视控制台,
就需要输入密码了,默认的用户名和密码是admin/admin。roles属性指的是登录的用户角色,这些登录的用户在jetty-realm.properties配置。
修改web的访问端口,在jetty.xml找到一下配置,修改8161即可。
Java
1 2 3 4 5 6 7
o.SelectChannelConnector"> ActiveMQ的运行日志存放在data文件夹下的activemq.log中。 Linux和Aix系统下的安装: 解压:tar zxvf activemq-x.x.x.tar.gz,进入bin文件夹,运行:./activemq start &,也可以只运行:./activemq console。 验证方式和安全性配置和windows下的配置一样。 ActiveMQ消息持久化 在broker中设置属性persistent=”true”(默认是true),同时发送的消息也应该是persitent类型的。ActiveMQ消息持久化有三种方式:AMQ、KahaDB、JDBC。 1、AMQ AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储在一个个文件中,文件的默认大小为32兆,如果一条消息的大小超过了32兆,那么这个值必须设置大点。当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段,这个文件被删除。默认配置如下: 2 3 AMQ的属性: 属性名称默认值描述 directory active mq-dat a 消息文件和日志的存储目录 useNIO true 使用NIO协议存储消息 syncOnWrite false 同步写到磁盘,这个选项对性能影响非常大 maxFileLeng th 32mb 一个消息文件的大小 persistentI ndex true 消息索引的持久化,如果为false,那么索引保存在内存中maxCheckpoi ntMessageAd dSize 4kb 一个事务允许的最大消息量 cleanupInte rval 30000 清除操作周期,单位ms indexBinSiz e 1024 索引文件缓存页面数,缺省为1024,当amq扩充或者缩减存储时,会锁定整个broker,导致一定时间的阻塞,所以这个值应该调整到比较大,但是代码中实现会动态伸缩,调整效果并不理想。 indexKeySiz e 96 索引key的大小,key是消息ID indexPageSi ze 16kb 索引的页大小 directoryAr chive archiv e 存储被归档的消息文件目录 archiveData Logs false 当为true时,归档的消息文件被移到directoryArchive,而不是直接删除2、KahaDB 2 3 KahaDB的属性: property name default va lue Comments directory activemq-d ata 消息文件和日志的存储目录 indexWriteBatchSize 1000 一批索引的大小,当要更新的索引量到达这个值时,更新到消息文件中 indexCacheSize 10000 内存中,索引的页大小enableIndexWriteAsync false 索引是否异步写到消息文件中journalMaxFileLength 32mb 一个消息文件的大小enableJournalDiskSyncs true 是否讲非事务的消息同步写入到磁盘cleanupInterval 30000 清除操作周期,单位ms checkpointInterval 5000 索引写入到消息文件的周期,单位ms ignoreMissingJournalfiles false 忽略丢失的消息文件,false,当丢失了消息文件,启动异常 checkForCorruptJournalFil es false 检查消息文件是否损坏,true,检查发现损坏会尝试修复checksumJournalFiles false 产生一个checksum,以便能够检测journal文件是否损坏。 5.4版本之后有效的属性: archiveDataLogs false 当为true时,归档的消息文件被移到directoryArchive,而不是直接删除 directoryArchive null 存储被归档的消息文件目录databaseLockedWaitDelay 10000 在使用负载时,等待获得文件锁的延迟时间,单位ms maxAsyncJobs 10000 同个生产者产生等待写入的异步消息最大量concurrentStoreAndDispatc hTopics false 当写入消息的时候,是否转发主题消息concurrentStoreAndDispatc hQueues true 当写入消息的时候,是否转发队列消息 5.6版本之后有效的属性: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 3 4 5 6 7 8 9 10 11 1 2 3 dataSource 指定持久化数据库的bean ,createTablesOnStartup 是否在启动的时候创建数据表,默认值是true ,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true ,之后改成false 。 MYSQL 持久化bean 1 2 3 4 5 6 7 close"> 1 2 3 4 5 6 7 ose"> 6 7 8 1 2 3 4 5 6 7 8 ="close"> ActiveMQ 中的消息了,我这里配置的持久化是KahaDB 。 需要导入的jar 包: 一段发送消息的代码: 2 3 try{ // 创建一个连接工厂 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 Stringurl ="tcp://localhost:61616"; ActiveMQConnectionFactoryconnectionFactory = newActiveMQCo nnectionFactory(url); // 设置用户名和密码,这个用户名和密码在conf目录下的credenti als.properties文件中,也可以在activemq.xml中配置 connectionFactory.setUserName("system"); connectionFactory.setPassword("manager"); // 创建连接 Connectionconnection =connectionFactory.createConnection(); connection.start(); // 创建Session,参数解释: // 第一个参数是否使用事务:当消息发送者向消息提供者(即消息代理)发送消息时,消息发送者等待消息代理的确认,没有回应则抛出异常,消息发送程序负责处理这个错误。 // 第二个参数消息的确认模式: // AUTO_ACKNOWLEDGE :指定消息提供者在每次收到消息时自动发送确认。消息只向目标发送一次,但传输过程中可能因为错误而丢失消息。 // CLIENT_ACKNOWLEDGE :由消息接收者确认收到消息,通过调用消息的acknowledge()方法(会通知消息提供者收到了消息) // DUPS_OK_ACKNOWLEDGE :指定消息提供者在消息接收者没有确认发送时重新发送消息(这种确认模式不在乎接收者收到重复的消息)。 Sessionsession =connection.createSession(false,Session.AUTO _ACKNOWLEDGE); // 创建目标,就创建主题也可以创建队列 Destinationdestination =session.createQueue("test"); // 创建消息生产者 MessageProducerproducer =session.createProducer(destinatio n); // 设置持久化,DeliveryMode.PERSISTENT和DeliveryMode.NON_PER SISTENT producer.setDeliveryMode(DeliveryMode.PERSISTENT); // 创建消息 Stringtext ="Hello ActiveMQ!"; TextMessagemessage =session.createTextMessage(text); // 发送消息到ActiveMQ producer.send(message); System.out.println("Message is sent!"); // 关闭资源 session.close(); connection.close(); } catch(Exceptione){ e.printStackTrace(); } 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 } 执行了上面的发送方法之后,在ActiveMQ的监视控制可以看到有一个test队列, 并且有一条消息,如图: 点击队列名test,然后点击消息ID即可查看消息内容,如图: 如果DeliveryMode没有设置或者设置为NON_PERSISTENT,那么重启MQ之后消息就会丢失。 一段接收消息的代码: 2 3 4 try{ Stringurl ="tcp://localhost:61616"; ActiveMQConnectionFactoryconnectionFactory = newActiveMQConnection 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 4 2 5 2 6 2 7 2 8 2 Factory(url); // 设置用户名和密码,这个用户名和密码在conf 目录下的credentials.prop erties 文件中,也可以在activemq.xml 中配置 connectionFactory.setUserName("system"); connectionFactory.setPassword("manager"); // 创建连接 Connectionconnection =connectionFactory.createConnection(); connection.start(); // 创建Session Sessionsession =connection.createSession(false,Session.AUTO_ACKNOWL EDGE); // 创建目标,就创建主题也可以创建队列 Destinationdestination =session.createQueue("test"); // 创建消息消费者 MessageConsumerconsumer =session.createConsumer(destination); // 接收消息,参数:接收消息的超时时间,为0的话则不超时,receive 返回下一个消息,但是超时了或者消费者被关闭,返回null Messagemessage =consumer.receive(1000); if(message instanceofTextMessage){ TextMessagetextMessage =(TextMessage)message; Stringtext =textMessage.getText(); System.out.println("Received: " +text); }else { System.out.println("Received: " +message); } consumer.close(); session.close(); connection.close(); }catch (Exceptione){ e.printStackTrace(); } } 9 3 3 1 3 2 执行了上面的接收方法之后,在ActiveMQ的监视控制可以看到test队列的消息已经被消费了,如图: 这里的代码只是测试用,在正式开发中一般与Spring结合使用jmsTemplate来发送消息,现实JMS的MessageListener来监听消息。 ActiveMQ配置安全性 监视ActiveMQ的方式有多种,在第一部分中已经说到了Web监视控制台,设置登录用户名和密码,这里再说一下JMX监控。运行了ActiveMQ之后,再运行jdk自带的jconsole即可以看到ActiveMQ的进程,如图: 点击连接之后就可以看到ActiveMQ的运行情况。默认情况下是不需要用户名和口令的,修改activemq.bat,找到 Java 2 -Dcom.sun.management.jmxremote.authenticate=false 2 3 4 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_BASE%/conf/jmx.password 1 2 3 4 5 #ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.passwor d.file=${ACTIVEMQ_CONFIG_DIR}/jmx.password" #ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONFIG_DIR}/jmx.access" #ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=fal se" ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote" 去掉注释即可。 重启ActiveMQ 之后,在用jconsole 连接就需要输入用户名和密码,jmx.access 文件配置用户的访问权限readonly 和readwrite ,admin readwrite 表示用户admin 具有 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 ps="users,admins"/> simpleAuthenticationPlugin 中设置用户名、密码和群组,authorizationPlugin 设置主题和队列的访问群组,“>”表示所有的主题或者队列。上面的配置中添加了一个t estUser ,属于群组testGroup ,同时设置test 这个队列的访问读写权限为testGroup ,当然admins 也可以访问的,因为admins 是对所有的队列都有访问权限。将第三部分代码中的设置用户名和密码改成刚刚添加的用户testUser ,如果密码不正确,将会抛出User name or password is invalid.异常,如果testUser 所属的群组不能访问test 队列,那么会抛出User guest is not authorized to write to: queue://test 异常。需要注意的是所有的群组都需要对以ActiveMQ.Advisory 为前缀的主题具有访问权限。 1 2 3 Apache ActiveMQ技术文档 说明:本文档在我们最大努力范围之内确保其正确性、实效性和可观性,但并不代表所有的观点都是正确的,而仅代表个人看法。如发现不当之处,请多指教,谢谢! 联系方式: 1、技术概述 JMS是指java消息服务(Java Message Service) 应用程序接口是一个java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。 ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS1.1规范,是消息驱动中间软件,为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。ActiveMQ使用Apache许可协议,因此任何人都可以使用和修改它而不必反馈任何改变。ActiveMQ的目标是在尽可能多的平台和语言上提供一个标准的,消息驱动的应用集成。ActiveMQ实现JMS规范并在此之上提供大量额外的特性。 2、A ctiveMQ特性 1.遵循JMS规范:包括同步和异步消息传递,对于预订者的持久消息等等。依附于JMS 意味着不论JMS消息提供者是谁,同样的基本特性都是有效的 2.连接:ActiveMQ提供各种连接选择,包括HTTP、HTTPS、IP多点传送,SSL,STOMP,TCP,UDP,XMPP等。大量的连接协议支持使之具有更好的灵活性。很多现有的系统使用一种特定协议并且不能改变,所以一个支持多种协议的消息平台降低了使用的门槛。 3.可插拔的持久性和安全:ActivemQ提供多种持久性方案可供选择,也可以完全按自己需求定制验证和授权。 4.用java建立消息驱动应用:ActiveMQ最常用在java应用中,用于发送和接收消息。 5.与应用服务器集成:ActiveMQ与java应用服务器集成是很常见的。 6.客户端APIs:ActiveMQ对多种语言提供客户端API,除了Java之外还有C/C++,.NET,Perl,PHP,Python,Ruby等。这使得ActiveMQ能用在Java之外的其它语言中。很多其它语言都可以通过ActiveMQ提供的客户端API使用ActiveMQ的全部特性。当然,ActiveMQ 代理器(broker)仍然是运行在java虚拟机上,但是客户端能够使用其它的被支持的语言。 7.代理器集群(Broker clustering):为了利于扩展,多个ActiveMQ broker能够联合工作。这个方式就是network of brokers并且能支持多种拓扑结构。 8.高级代理器特性和客户端选项:ActiveMQ为代理器和客户端连接提供很多高级的特性。ActiveMQ也可以通过代理器的XML配置文件支持Apache Camel。 9.简单的管理:ActiveMQ是为开发者设计的。它并不需要专门的管理工具,因为它提 ActiveMQ 实践入门指南 ActiveMQ 实践入门指南 ? ActiveMQ 实践:使用场景 ActiveMQ面试题及答案 1、什么是ActiveMQ? activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。 2、Activemq的瓶颈值 根据网上一般评测文档上来看,每秒的消息吞吐在2000以上, acticemq 也可以集群化部署,也是使用zookeeper来搭建。 3、ActiveMQ服务器宕机怎么办? 这得从ActiveMQ的储存机制说起。在通常的情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的,它们的最大限制在配置文件的 ActiveMQ配置参考手册1ActiveMQ Server端配置 1.1 设置Broker名字 修改%activemq%/conf/activemq.xml文件 1.2设置persistenceAdapter 修改%activemq%/conf/activemq.xml文件 1.3 设置destinationPolicy 打开%activemq%/conf/activemq.xml文件,添加如下红色配置属性: 1.4设置networkConnectors 修改%activemq%/conf/activemq.xml文件 1.5 设置transportConnectors 修改%activemq%/conf/activemq.xml文件 2ActiveMQ Client端连接配置 目前Client端使用Failover协议组合TCP协议的方式连接broker,示例如下: 可以看到,tcp协议和failover协议分别支持一些不同的连接配置参数。如示例URL中的soTimeout和randomize。 下面就TCP协议和Failover协议的连接配置参数分别进行详细介绍。 2.1TCP连接参数配置 2.1.1The TCP Transport Options 2.1.2The OpenWire Wire Format Options OpenWire is the default Wire Format that ActiveMQ uses. It provides a highly efficent binary format for high speed messaging. OpenWire options can be configured on a JMS client's ActiveMQ master slave集群安装手册1.简介 在一个网络内运行多个brokers或者stand alone brokers时存在一个问题,这就是消息在物理上只被一个broker持有,因此当某个broker失效,那么你只能等待直到它重启后,这个broker上的消息才能够被继续发送(如果没有设置持久化,那么在这种情况下,消息将会丢失)。Master Slave 背后的想法是,消息被复制到slave broker,因此即使master broker遇到了像硬件故障之类的错误,你也可以立即切换到slave broker而不丢失任何消息。 Master Slave是目前ActiveMQ推荐的高可靠性和容错的解决方案。主要有Pure Master Slave、Shared File System Master Slave、JDBC Master Slave三种。Master Broker和Slave Broker可以部署在同一台机器上,也不可部署在不同的机器上。本文档介绍JDBC Master Slave的安装和验证步骤,为了保证高可用性Master Broker和Slave Broker部署在不用的服务器上。Master Broker和Slave Broker的配置基本一致,谁先启动获得数据库的锁谁就是Master Broker。 2.安装前准备 安装环境 操作系统:Red Hat Enterprise Linux 5 JDK版本:JRockit JDK 1.5.0_12-b04 activemq版本:apache-activemq-5.4.2 数据库:oracle 10 服务器:需要两台服务器。文档中以HOST01和HOST02标示这两台服务器软件准备 1.安装JDK,并设置JAVA_HOME、PATH等环境变量。使用java –version验证 java安装和环境变量设置 2.下载apache-activemq-5.4.2,下载地址为: https://www.doczj.com/doc/655656314.html,/dyn/closer.cgi?path=%2Factivemq%2Fapache-active mq%2F5.4.2%2Factivemq-parent-5.4.2-source-release.tar.gz 3.准备oracle 10的JDBC驱动程序ojdbc1 4.jar 3.安装步骤 Master broker的安装 将Master broker安装在HOST01主机上,以下步骤均在HOST01主机上进行1.将apache-activemq-5.4.2-bin.tar.gz和ojdbc14.jar上传到linux下active的 安装目录。后续以$ACTIVEMQ_WORK_DIR代表active的安装目录 2.在$ACTIVEMQ_WORK_DIR目录下解压缩apache-activemq-5.4.2-bin.tar.gz文件, 解压缩后activeMQ相关文件放在$ACTIVEMQ_WORK_DIR/apache-activemq-5.4.2目录下 apache简介 Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache 的特点是简单、速度快、性能稳定,并可做代理服务器来使用。 本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache 有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如https://www.doczj.com/doc/655656314.html,、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。 Apache的诞生极富有戏剧性。当NCSA WWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。 Apache web服务器软件拥有以下特性: 支持最新的HTTP/1.1通信协议 拥有简单而强有力的基于文件的配置过程 支持通用网关接口 支持基于IP和基于域名的虚拟主机 支持多种方式的HTTP认证 集成Perl处理模块 集成代理服务器模块 支持实时监视服务器状态和定制服务器日志 支持服务器端包含指令(SSI) 支持安全Socket层(SSL) 提供用户会话过程的跟踪 支持FastCGI 通过第三方模块可以支持Java Servlets 如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。 Apache有名的几个项目介绍 HTTP Server 这个在前面的段落介绍过了,Apache已经是他的代号了 ActiveMQ 免费开源由java编写符合JMS1.1标准的消息中间件。 另外,它也支持通过除java语言外的语言的使用 Ant 消息队列实施方案 1、背景 异步解耦合、给前端系统提供最高效的反应 2、常见消息队列对比 2、1 ActiveMq ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现 优点: Java语言 支持集群模式 缺点: 性能在消息中间件中处于下游 2、2 Rabbitmq Rabbitmq是基于AMQP使用erlang语言实现的消息队列系统 优点: 1、完整的消息队列系统,支持多种消息队列模式,包括竞争消费; 2、支持集群模式,扩展集群容量和性能比较方便,集成了集群的监控和管理; 3、支持消息的持久化; 缺点: 1、需要学习比较复杂的接口和协议,比较耗费时间; 2、性能不是特别理想大概在1wqps左右; 3、使用Erlang语言,语言基础; 2、3 Kafka Kafka 是LinkedIn 开发的一个高性能、分布式的消息发布订阅系统。 优点: 1、分布式集群可以透明的扩展,增加新的服务器进集群。 2、高性能。单机写入TPS约在百万条/秒 3、容错。数据都会复制到几台服务器上。 缺点: 1、复杂性。Kafka需要zookeeper 集群的支持,T opic通常需要人工来创建,部署和维护较一般消息队列成本更高 定位于日志传输、存在消息丢失的肯能、消息乱序 3、消息发送错误无重试 2、4 RocketMQ RockerMq 是阿里公司中间件团队参考Kafka思想,用Java语言实现的消息传输系统 优点: 1、较高性能,单机写入TPS单实例约7万条/秒 2、容错,多种集群模式、可以解决容错问题 3、消息重试发送 4、顺序消息可以严格执行 缺点: 1、消息重复、消费端需要做去重操作 2、5 选用结论 从项目业务与团队技术偏向考虑,我们应该需要一种数据安全性比较高,保证每个消息都会被执行;有容错机制、支持集群模式高可用;性能不错,可以在毫秒级处理消息;支持顺序消息的消息中间件,RockerMq 可以满足这些要求。 3、RockerMq简介 3、1 RockerMq 产品介绍 参考阿里公司提供的《RocketMQ 开发指南》,最新版针对v3.2.4 3、2 RockerMq集群 3、2、1 部署方式 Rockermq共有四种部署方式,分别是: 1、单个Master 一旦Broker 重启或者宕机时,会导致整个服务不可用 2、多Master 模式 一个集群无Slave,全是Master,例如2 个Master 戒者3 个Master 优点: 1、配置简单, 2、容错,单个Master 宕机或重启维护对应用无影响,在磁盘配置为RAID10 时,即使机器宕机不可恢复情况下,由于RAID10 磁盘非常可靠,在同步刷盘时消息不会丢,异步刷盘丢失少量消息, 3、性能最高。 java项目经理自我介绍 在面试时Java项目经理岗位时,我们会面对形形色色的问题,而最令人哑口无言的,往往是一些最简单和最常见的题目,比如"请你自我介绍一下"。大多数应征者的反应是--我应该如何作答呢?以下是小编为你整理的java项目经理自我介绍,希望大家喜欢。 java项目经理自我介绍篇1 尊敬的XX领导: 您好! 我是20XX年毕业于XX计算机科学技术专业的学生。昨天晚上,在贵公司的官方网站上看到公司在招聘手机软件开发工程师这一职位,于是我写了这封求职信,希望贵公司能给我一次工作的机会。 大学四年时间,我主要学习的是关于C语言、C++、JAVA等编程书籍以及软件,熟悉JAVA的Struts框架。曾经在某电子科技公司完成了手机刷卡器的开发工作,主要完成了注册、应用等一系列流程。 随着触摸屏手机的普及,苹果、三星、HTC手机越来越流行。手机应用开发越来越手欢迎,很多手机游戏、应用造就了一大批软件开发公司的出现。至于为什么读这个专业呢,就是因为这些手机游戏与应用吸引了我,所以大学四年,我一直钻研手机的软件开发,最自豪的是,曾经开发过一款手机游戏,一个月的下载量达到几十万。而正是如此,因为自己所做的东西,受到了别人的肯定,一直鼓励着喔,不断开发新的吸引人的软件。 最后,希望经理看完的这封求职信后能给我一次学习的机会,到贵公司工作,继续满足我这份为自己理想奋斗的心。 java项目经理自我介绍篇2 有三年以上项目经理经验,技术与管理能力俱佳。在JAVA/J2EE方面有深厚的经验,包括javascript, Ajax, jsp, Servlet, JDBC, JSTL, JAVA MAIL and JMS等。在以下主流框架上有深厚的经验,包括Struts,Spring,Hibernate,iBatis,FLEX,另外也熟悉ExtJS。对WEB服务器Tomcat有深厚的经验。对数据库MySQL有深厚的经验,另外也熟悉Oracle。熟悉Windows,Linux操作系统。 在xx公司任职期间,于20xx.12-20xx.06期间带领研发团队进行了人才测评系统的项目研发工作。在xx公司时,于 20xx.02-20xx.09期间带领研发团队进行了Panta FX的项目研发工作,但由于当时日方consulting人员的调研不足,使得我方在系统架构设计方面存在了缺陷,最终导致在性能测试上没有达到客 1 JMS 在介绍ActiveMQ之前,首先简要介绍一下JMS规范。 1.1 JMS的基本构件 1.1.1 连接工厂 连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQConnectionFactory。 1.1.2 连接 JMS Connection封装了客户与JMS提供者之间的一个虚拟的连接。 1.1.3 会话 JMS Session是生产和消费消息的一个单线程上下文。会话用于创建消息生产者(producer)、消息消费者(consumer)和消息 (message)等。会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。 1.1.4 目的地 目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。JMS1.0.2规范中定义了两种消息传递域:点对点 (PTP)消息传递域和发布/订阅消息传递域。 点对点消息传递域的特点如下: 每个消息只能有一个消费者。 消息的生产者和消费者之间没有时间上的相关性。无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。 发布/订阅消息传递域的特点如下: 每个消息可以有多个消费者。 生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。持久订阅允许消费者消费它在未处于激活状态时发送的消息。 在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递域中,目的地被成为主题(topic)。 1.1.5 消息生产者 消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。 1.1.6 消息消费者 消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。消息的消费可以采用以下两种方法之一: 同步消费。通过调用 消费者的receive方法从目的地中显式提取消息。 receive方法可以一直阻塞到消息到达。 异步消费。客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。 1.1.7 消息 JMS消息由以下三部分组成: 消息头。每个消息头字段都有相应的getter和setter方法。 消息属性。如果需要除消息头字段以外的值,那么可以使用消息属性。 消息体。JMS定义的消息类型有TextMessage、MapMessage、BytesMessage、StreamMessage和 ObjectMessage。 1.2 JMS的可靠性机制 1.2.1 确认 JMS消息只有在被确认之后,才认为已经被成功地消费了。消息的成功消费通常包含三个阶段:客户接收消息、客户处理消息和消息被确认。 在事务性会话中,当一个事务被提交的时候,确认自动发生。在非事务性会话中,消息何时被确认取决于创建会话时的应答模式(acknowledgement mode)。该参数有以下三个可选值: ActiveMQ集群部署方式对比 构建高可用的ActiveMQ系统在生产环境中是非常重要的,单点的ActiveMQ作为企业应用无法满足高可用和集群的需求,所以ActiveMQ提供了master-slave、broker cluster等多种部署方式,但通过分析多种部署方式之后我认为需要将两种部署方式相结合才能满足我们公司分布式和高可用的需求。 自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Pure Master Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在。 1、Master-Slave部署方式 1)、Shared Filesystem Master-Slave方式 2)、Shared Database Master-Slave方式 3)、Replicated LevelDB Store方式 第一种方案同样支持N个AMQ实例组网,但由于他是基于kahadb存储策略,亦可以部署在分布式文件系统上,应用灵活、高效且安全。(如果不需要考虑负载问题,则可用考虑用分布式文件系统模式部署) 第二种方案与shared filesystem方式类似,只是共享的存储介质由文件系统改成了数据库而已,支持N个AMQ实例组网,但他的性能会受限于数据库; 第三种方案是ActiveMQ5.9以后才新增的特性,使用ZooKeeper协调选择一个node作为master。被选择的master broker node开启并接受客户端连接。 其他node转入slave模式,连接master并同步他们的存储状态。slave不接受客户端连接。所有的存储操作都将被复制到连接至Master的slaves。 如果master死了,得到了最新更新的slave被允许成为master。fialed node能够重新加入到网络中并连接master进入slave mode。所有需要同步的disk的消息操作都将等待存储状态 Technology Analysis 技术分析 DCW 117 数字通信世界 2019.07 1 系统架构图 本系统建立在J2EE 平台上,将 Netty ,ActiveMQ 消息中间件,MySQL 数据库、redis 、json 等技术相结合,构建更加智能、更加稳定和并发更好的的通信管理平台。通信管理服务系统搭建在云平台之上,充分利用现代化信息技术手段实现农村生活污水处理设施终端数据采集的信息化、集约化,依托云平台的理念和优势,将已有的专业系统纳入其中,为主管部门、运维企业、其他相关部门提供统一的数据服务。系统架构图如图1 所示。 图1 系统架构图 本系统最大的亮点在于使用Netty 作为通信框架,支持海量并发的同时,通过其预制的编码和解码器,实现对不同通信协议的解析后,将数据统一成通用json 格式推送到消息中间件。这样对于监管、运维等应用平台而言,数据格式统一、规范,便于使用。 本文通过对比分析国内现有的数据采集和通信管理解决方案,采用Netty+ActiveMQ 相结合的方式,降低技术难度的同时,实现农村生活污水治理设施终端数据采集、传输管理和及时推送。 2 数采和控制实现 平台可实现系统用户的需求,如查看农村生活污水处理设施的流量计、多功能电表、在线水质检测仪等实时数据,并根据设计好的指令对上述设备进行控制操作。Netty 与消息中间件的结合完美解决了通信链路和消息推送问题,为实现平台的通信管理和数据的实时推送奠定了基础。详细设计图如图2所示:2.1 数采的设计与实现 平台的服务器分为Netty 通信服务与消息中间件两个部分。(1)Netty 通信服务包括平台通用功能和通用接口,用来实现与各下位机(数采仪)的数据传送并将数据按照统一json 格式送入消息中间件,Netty 通信服务在初始化时与消息中间件(ActiceMQ )建立通信连接; (2)消息中间件(ActiveMQ )实现消息的订阅和推送,主 要负责将数据推送给监管平台、企业运维平台、其他授权接入的 第三方平台,实现了数据的实时交互。 图2 通信管理详细设计图 通信管理平台将农村生活污水处理设施终端数据推送到应用平台的流程描述: 下位机(PLC 、单片机、智能网关等)采集各传感器的实时数据,将这些数据上传到Netty 服务器,当与Netty 服务器第一次建立连接时,触发channelActive 方法建立通道,该通道在断开之前一直存在,此后下位机定时发送数据,并直接触发channelRead 方法接收,接收到的数据由平台统一处理,按照事先设计好的数据格式组成通用json 数据包,再按照设计的主题推送至消息中间件(ActiveMQ ),监管平台、运维平台订阅相应主题即可获取推送消息(数据)。 Netty 服务器采用多线程服务器,对于每一个连接请求,dispatcher 都会为其创建并分配一个线程,该线程负责这个请求的处理,优点是执行粒度是完整的处理流程,处理逻辑清晰,易于开发。通信过程中,可通过心跳包实现长连接,通过线程池控制服务端线程数的快速增长。 除了消息中间件(ActiveMQ )以外,平台实现了一组restful 风格的通用数据接口。监管平台、企业运维平台等可以在获取授权后,通过这些接口获取历史数据、终端信息,下达控制指令等。 平台实现了对TCP 字节流(数据帧)、MQTT 的数据解析。2.1.1 T CP 字节流(数据帧) 下位机(数采仪)可以按照约定的数据包格式,将终端监测数据打包,以TCP 字节流(数据帧,字符集为utf-8)的方式上传。数据包格式可做如下设计:服务端收到数据包以后,按照通信协议解包以后,再将数据组合成通用格式的json 数据包,送到消息中间件。 Netty 对于TCP 字节流(数据帧)有多种解码方式,可以采用定长数据或者固定结尾字符(比如以回车换行作为结尾符)等方式,可以有效解决半包、粘包等问题。 基于Netty+ActiveMQ 的农村生活污水处理设施监测 数据通信管理平台设计 刘祥宏1,潘泉涌1,方 宽2 (1.浙江省建筑科学设计研究院有限公司,杭州 310000;2. 衢州市住建局,衢州 324000) 摘要:随着浙江省农村生活污水运维和监管工作的持续推进和规范,以及物联网技术的推广和成熟,针对农村生活污水处理设施 点多、面广、分散的特点,基于Netty 和消息中间件(ActiveMQ)技术,设计并实现了一款既能使用TCP 字节流(数据帧)方式又能满足物联网MQTT 协议(JSON 数据格式)的泛物联网通信管理系统进行数据采集和传输管理,并利用消息中间件(ActiveMQ)技术,可近实时向各级主管部门的监管平台、企业运维平台、授权接入的第三方平台推送监测数据的同时,提供了统一数据接口服务。文中主要介绍了该通信管理平台的设计原理。 关键词:Netty+ActiveMQ 的农村生活污水处理设施监测数据通信管理平台设计;分析基于Netty+ActiveMQ 的农村生活污水处理设施监测数据通信管理平台设计 doi :10.3969/J.ISSN.1672-7274.2019.07.090中图分类号:X799.3 文献标示码:A 文章编码:1672-7274(2019)06-0117-02 ActiveMQ入门 作者:一路向北摘要:本文主要讲述ActiveMQ的基本知识和使用方法,并简单结合spring 使用ActiveMQ。 一、ActiveMQ特性和使用总览 企业消息软件从80年代起就存在,它不只是一种应用间消息传递风格,也是一种集成风格。因此,消息传递可以满足应用间的通知和互相操作。但是开源的解决方案是到最近10年才出现的。Apache ActiveMQ就是其中一种。它使应用间能以异步,松耦合方式交流。本章将向您介绍ActiveMQ。 ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS1.1规范(Ja va Message Service),是消息驱动中间件软件(MOM)。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。ActiveMQ使用Apache许可协议。因此,任何人都可以使用和修改它而不必反馈任何改变。这对于商业上将Activ eMQ用在重要用途的人尤为关键。MOM的工作是在分布式的各应用之间调度事件和消息,使之到达指定的接收者。所以高可用,高性能,高可扩展性尤为关键。 ActiveMQ的目标是在尽可能多的平台和语言上提供一个标准的,消息驱动的应用集成。ActiveMQ实现JMS规范并在此之上提供大量额外的特性。 下面是一个高层次的特性列表。 ·遵循JMS规范----理解ActiveMQ的起始点是明白ActiveMQ的各种特性是JMS1.1规范的实现。本章后面将讨论JMS规范提供的好处和保证。它们包括同步和异步消息传递,一次和只有一次的消息传递,对于预订者的持久消息等等。依附于JMS规范意味着,不论JMS消息提供者是谁,同样的基本特性都是有效的。 ·连接----ActiveMQ提供各种连接选择,包括HTTP,HTTPS,IP多点传送, [MQ]关于ActiveMQ的配置 转自: https://www.doczj.com/doc/655656314.html,/CopyPaster/archive/2012/04/27/24731 79.html 目前常用的消息队列组建无非就是MSMQ和ActiveMQ,至于他们的异同,这里不想做过多的比较。简单来说,MSMQ 内置于微软操作系统之中,在部署上包含一个隐性条件:Server需要是微软操作系统。(对于这点我并去调研过MSMQ 是否可以部署在非微软系统,比如:Linux,只是拍脑袋想了想,感觉上是不可以)。对于ActiveMQ,微软系统和Linux 都是可以部署的。从功能方面来说,一般最常用的就是:消息的收/发,感觉差异不大。从性能上来说,一般的说法是ActiveMQ略高。在稳定性上,个人感觉MSMQ更好。如果这两种常用队列都用过的同学,应该来说最大的差异在于:MSMQ如果要访问远程队列(比如机器A上的程序访问机器B上的队列),会比较恶心。在数据量比较大的情况之下,一般来说队列服务器会专门的一台或者多台(多台的话,用程序去做热备+负载比较方便,也不需要额外的硬件成本。简单来说做法可以这样:消息发送的时候随机向着多台队列服务器上发送消息;接受的时候开多个线程去分别监听;热备方面,可以维护一个带状态的队列连接池,如果消息收发 失败那么将状态置为不可用,然后起一个线程去定时监测坏的连接是否可用,这个过程一般情况下可以不用加锁,为什么,大家根据各自需要去取舍吧)。最近搞完了短彩信的网关连接服务,这两种队列我均使用了。大致的过程是这样的:上层应用如果要发端彩信,那么将消息直接发送至ActiveMQ (目前用的就是上面说的多台热备+负载,因为实际中下行量非常大5千万条/天以上),然后端彩信网关连接服务部署多套,每套均依赖本机的MSMQ。为什么呢?用ActiveMQ 的原因是:上层应用程序和网关连接服务彼此独立,消息需要跨机访问。用MSMQ的原因是:ActiveMQ中的数据是一条不分省的大队列,网关连接服务需要按省流控,所以端彩信网关连接服务:首先把消息从ActiveMQ取出来,然后存至本机上的分省MSMQ,这样做另外的一个好处就是:ActiveMQ不至于过多挤压,他的数据会分摊到N台短彩信网关连接服务所部署的机器上的MSMQ之中,也就说MSMQ可以起到分摊数据和缓冲的作用。 在之前的随笔中,已经介绍过MSMQ,现在先介绍一下ActiveMQ一些配置,目前好像ActiveMQ配置上的介绍还比较少。以下是自己总结一些相关资料,贴出来给大家共享 一、特性及优势 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、下载 https://www.doczj.com/doc/655656314.html,/activemq-510-release.html,下载5.1.0 Windows Distribution版本 2、安装 直接解压至任意目录(如:d:\ apache-activemq-5.1.0) 3、启动ActiveMQ服务器 方法1: 直接运行bin\activemq.bat 方法2(在JVM中嵌套启动): cd example antembedBroker 4、ActiveMQ消息管理后台系统: http://localhost:8161/admin 三、运行附带的示例程序 1、Queue消息示例: * 启动Queue消息消费者 cd example ant consumer * 启动Queue消息生产者 cd example ant producer 简要说明:生产者(producer)发消息,消费者(consumer)接消息,发送/接收2000个消息后自动关闭 2、Topic消息示例: * 启动Topic消息消费者 cd example ant topic-listener * 启动Topic消息生产者 cd example ant topic-publisher 简要说明:重复10轮,publisher每轮发送2000个消息,并等待获取listener 的处理结果报告,然后进入下一轮发送,最后统计全局发送时间。 四、Queue与Topic的比较 1、JMS Queue执行load balancer语义: 一条消息仅能被一个consumer收到。如果在message发送的时候没有可用的consumer,那么它将被保存一直到能处理该message的consumer可用。如果一个consumer收到一条message后却不响应它,那么这条消息将被转到另一个 JMS: JMS基本概念: JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口简化企业应用的开发。它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。 1)点对点方式(point-to-point) 点对点的消息发送方式主要建立在 Message Queue,Sender,Receiver上,Message Queue 存贮消息,Sender发送消息,Receiver接收消息.具体点就是Sender Client发送Message 到Queue中 ,而Receiver Client从Queue中接收消息和"发送消息已接受"到Quere,确认消息接收。消息发送客户端与接收客户端没有时间上的依赖,发送客户端可以在任何时刻发送信息到Queue,而不需要知道接收客户端是不是在运行 2)发布/订阅方式(publish / subscribe) 发布/订阅方式用于多接收客户端的方式.作为发布订阅的方式,可能存在多个接收客户端,并且接收端客户端与发送客户端存在时间上的依赖。一个接收端只能接收他创建以后发送客户端发送的信息。作为subscriber ,在接收消息时有两种方法,destination的receive 方法,和实现message listener 接口的onMessage 方法。 几个重要概念: Destination:消息发送的目的地,也就是所谓的Queue和Topic。创建好一个消息之后,只需要把这个消息发送到目的地,消息的发送者就可以继续做自己的事情,而不用等待消息被处理完成。至于这个消息什么时候,会被哪个消费者消费,完全取决于消息的接受者。Message:从字面上就可以看出是被发送的消息。它有下面几种类型: StreamMessage:Java 数据流消息,用标准流操作来顺序的填充和读取。 MapMessage:一个Map类型的消息;名称为 string 类型,而值为 Java 的基本类型。 TextMessage:普通字符串消息,包含一个String。 ObjectMessage:对象消息,包含一个可序列化的Java 对象 BytesMessage:二进制数组消息,包含一个byte[]。 XMLMessage: 一个XML类型的消息。 最常用的是TextMessage和ObjectMessage。 Session:与JMS提供者所建立的会话,通过Session我们才可以创建一个Message。Connection:与JMS提供者建立的一个连接。可以从这个连接创建一个会话,即Session。ConnectionFactory:那如何创建一个Connection呢?这就需要下面讲到的ConnectionFactory了。通过这个工厂类就可以得到一个与JMS提供者的 连接,即Conection。 Producer:消息的生产者,要发送一个消息,必须通过这个生产者来发送。MessageConsumer:与生产者相对应,这是消息的消费者或接收者,通过它来接收一个消息。 ActiveMQ: ActiveMQ 是Apache出品,能力强劲的开源的消息总线。ActiveMQ 是一个完全支持JMS 和J2EE规范的 JMS Provider实现。 在官方地址: https://www.doczj.com/doc/655656314.html,/上可以下载到ActiveMQ,我们使用的是ActiveMQ5.2版本,下载apache-activemq-5.2.0-bin.zip到本地,解压缩之后即可使用。在相对应解压目录下的apache-activemq-5.2.0\bin\中找到activemq.bat运行它,ActiveMQ就运行起来了。需要注意的是,在运行ActiveMQ之前需要在环境变量中配置好 activeMQ的源码分析-开篇 以前对JMS尤其是activeMQ不了解,一看到什么地方需要使用消息中间件,就比较反感。主要原因是感觉JMS的实现都比较复杂,怕在真实使用过程中出现什么问题时会比较被动。所以,我们基本上是自己写类似的消息中间件,当然功能非常简单。但其实我们自己写出来的中间件,随着功能的不断增加、人员和时间的种种问题,导致最终我们自己做出来的所谓消息中间件越来越不能维护。在吸取了一次一次这种重复发明"轮子"的事情中,我们觉得也许一开始就采用成熟开源的产品也许是条更好的方式。 感觉到现在或将来我们对JMS的使用会更加深入,为了适应这种的需要,作为软件研发人员,需要对在我们工作中占有重要地位的开源产品有源代码级别的熟悉,尤其对我们这些英语不太好的,因为目前用的多的开源产品基本上是以英语作为基础的,那么我们想要提交一个bug 或讨论一个什么用法的时候,就比较被动,而且眼巴巴的等着其他人来解决,自己一点都使不上劲的感觉真的很不舒服。 我们选择activeMQ来分析它的核心架构、源代码,就是希望能尽量少的发生上面的情况,尤其在我们分析activeMQ的过程中,发现其源代码中确实存在不少小问题。消息中间件在许多项目或产品中占有非常重要的地位,虽然我们目前还不是activeMQ的代码提交人员,但希望通过对activeMQ的源码分析这种方式,同样为使用activeMQ的同行们提供一点帮助,也算是间接为开源做点事情。 在后面的一系列文章中,我们将主要从如下几个方面来分析: 一、activeMQ的核心线程的功能和生命周期 二、消息存储的kaha实现的分析 三、消息队列(Queue)实现的分析 作为开篇,首先我们非常尊重activeMQ的所有committer,它是个不错的软件作品,我们的分析是基于5.1版本的代码,就象任何事情一样,尤其是软件产品它的成熟是需要较长时间的过程,我们也会把分析中发现的5.1版本的bug于大家分享,下面我就以一个小bug作为整个activeMQ分析的开篇。 为了表述的方便,我们把这个bug叫做bug_1,为了讲清楚该bug,首先我会把相关的背景做一个介绍: 消息指针(Message cursor)是activeMQ里一个非常重要的核心类,它是提供某种优化消息存储的方法。消息中间件的实现一般都是当消息消费者准备好消费消息的时候,它会从持久化存储中一批一批的读Apache ActiveMQ技术讲解文档
ActiveMQ实践入门指南
ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,尽管 JMS 规范出台已经是很久的 事情了,但是 JMS 在当今的 J2EE 应用中间仍然扮演着特殊的地位。下面我们将分四部分来 介绍 ActiveMQ 的相关内容。
ActiveMQ 实践:松耦合和 ActiveMQ
回到 2003 年,一群开源开发者聚在一起组成了 Apache Geronimo。他们发现没有一个 很好的使用 BSD 风格许可证的消息中间件可用。因为 Geronimo 需要一个 JMS 实现 J2EE 兼 容性,所以一些开发者开始探讨这种可能性。
? ActiveMQ 实践:松耦合和 ActiveMQ
ActiveMQ 实践:特性列表和安装
这一部分,我们将介绍 ActiveMQ 的特性列表和如何进行安装和如何对其进行测试。
? ActiveMQ 实践:特性列表和安装
ActiveMQ 实践:使用场景
在系统架构中,有很多场景 ActiveMQ 和异步消息都会产生深远的影响。这部分中, 我们将介绍一些使用 ActiveMQ 的场景实例。
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 2 of 19
ActiveMQ 实践:ActiveMQ 使用入门
开始使用 ActiveMQ 并不是很难,你只需要启动代理,确保它能够接受连接和发送消 息。这部分中,我们将介绍如何开始使用 ActiveMQ。
? ActiveMQ 实践:ActiveMQ 使用入门
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 3 of 19ActiveMQ面试题及答案
ActiveMQ配置参考手册
activemq master-slave集群安装文档
apache简介
RocketMq消息队列实施方案-完整版
java项目经理自我介绍
ActiveMQ in Action_中文
ActiveMQ部署方案分析对比-精选版-精心整理
基于Netty+ActiveMQ的农村生活污水处理设施监测数据通信管理平台设计
ActiveMQ入门
[MQ]关于ActiveMQ的配置
Apache_ActiveMQ教程
小实验-ActiveMQ实现jms监听队列
activeMQ的源码分析