ActiveMQ实践入门指南

ActiveMQ实践入门指南
ActiveMQ实践入门指南

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 实践:ActiveMQ 使用入门
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 3 of 19

ActiveMQ 实践:松耦合和 ActiveMQ
回到 2003 年,一群开源开发者聚在一起组成了 Apache Geronimo。在这种情况下,他 们发现没有一个很好的使用 BSD 风格许可证的消息中间件可用。因为 Geronimo 需要一个 JMS 实现 J2EE 兼容性,所以一些开发者开始探讨这种可能性。他们拥有大量的商业 MOM 经 验,而且他们甚至之前已经创建了一些 MOM,这些开发者打算创建下一代伟大的开源消息 中间件。 ActiveMQ 其他的一些灵感来源于市场上的大多数 MOM 是商业化的这个事实,封闭源 码,而且购买和支持的成本高昂。商业 MOM 的确在业务上很流行,但是很多业务并不能负 担的起不合理的成本。这也进一步增加了创建一个开源替代物的积极性。使用 Apache 许 可证的开源 MOM 确实有着市场潜力。Apache ActiveMQ 随着时间进步。ActiveMQ 打算作为 JMS 的标准,以供分布式应用之间的远程通信。为了更好地理解这个意思,最佳的做法就 是回顾一下分布式应用设计,尤其是通信。 松耦合和 ActiveMQ ActiveMQ 为应用架构提供了松耦合的好处。松耦合通常被引入到一个架构迁移到一个 古典的紧耦合的远程过程调用(RPC)中。这样一个松耦合设计被认为是异步的,调用两 个应用中的任何一个应用对另一个都没有影响;不相互依赖或者有时间要求。应用可以信 任 ActiveMQ 有能力保障消息交付。因此,通常表述为应用发送消息是发送后自寻的。也 就是他们把消息发给 ActiveMQ,并不关心消息如何交付和什么时候交付。同样的,消费应 用也不用关心消息来自哪里何以如何发送到 ActiveMQ 的。这对于在非均匀环境中来说尤 其有用,这种环境中允许客户端使用不同的语言编写,甚至可能是不同的网格协议。 ActiveMQ 充当中间人,允许以异步的方式进行非均匀集成和交互。
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 4 of 19

在考虑分布式应用设计的时候,应用耦合很重要。耦合引用两个或者多个应用或系统 的依赖性。简单的理解耦合就是考虑从系统中任何应用改变对其他应用产生的影响,这种 含义穿过架构中的其他应用作为性能被添加。改变一个应用会迫使所涉及的其他应用改变 呢?如果回答是肯定的,这些应用就是紧耦合。然而,如果一个应用可以在不影响其他应 用的情况下改变,这些应用就是松耦合的。对比松耦合,紧耦合应用很难维护。 像 COM、CORBA、DCE 和 EJB 这样的技术使用的技术称之为远程过程调用(RPC),RPC 被认为是紧耦合的。使用 RPC,当一个应用调用另一个应用的时候,调用者是锁定的,直 到被调用者返还会控制权。图一描述了这个概念。
图一 通信 图一中的调用者是锁定的,直到被调用者返还会控制权。许多系统架构使用 RPC,而 且很成功。然而,是有这种紧耦合设计也有很多缺点,最显著的就是很高的维护费用需 求,可谓一石激起千层浪。在另个应用见正确的时间是必要的。对于应用都必须在同时可 用的这种需求从应用一到应用二,响应从应用二到应用一。这样的时间需求很难处理。对 比这样设计中的紧耦合和松耦合,两个应用彼此完全不知道对方,如图二所示。
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 5 of 19

图二 图二中的应用一给 MOM 发送了一个消息,可能过了一段时间,应用二从 MOM 收到一条 消息。另个应用都不知道对方的存在,在两个应用之间也没有时间需求。这种单一风格的 交互结果维护成本很低,因为一个应用改变对另一个没有影响。因此,松耦合应用在分布 式应用设计中更具优势。 试想在应用必须转移到另一个地点的这种改变。这种情况可能发生在新的硬件需求或 简单的机器转移的时候。紧耦合的系统设计,这样的环境很难转移,因为所有应用片段必 须经历断电。松耦合设计的应用,不同的系统片段可以独立的转移。假如应用一和应用二 都有多个实例,每个实例都属于不同的机器中。ActiveMQ 安装在另外完全独立于这两个应 用的机器上。在这种场景中,这些实例都可以移动,而不影响彼此。实际上,ActiveMQ 的 多个实例被认为是中间件配置网络。它允许 ActiveMQ 实例不影响其他实例的情况下自由 转移。这意味着这个架构中的任何片段可以在任何时间被维护,而无需影响这个系统。
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 6 of 19

因此 ActiveMQ 为应用架构提供了一种不可思议的灵活性,松耦合的概念也成为现 实。但是 ActiveMQ 应该在何时使用呢?欢迎继续关注。
(作者:Bruce Snyder, Dejan Bosanac, Rob Davies 译者:张培颖 来源:TechTarget 中国)
原文链接:https://www.360docs.net/doc/1112052751.html,/showcontent_41843.htm
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 7 of 19

ActiveMQ 实践:特性列表和安装
ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完 全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,尽管 JMS 规范出台已经是很久的 事情了,但是 JMS 在当今的 J2EE 应用中间仍然扮演着特殊的地位。 1. 多种语言和协议编写客户端。语言: Java、C、C++、C#、Ruby、Perl、Python、 PHP。应用协议:OpenWire、Stomp REST、WS Notification、XMPP、AMQP
2. 完全支持 JMS1.1 和 J2EE 1.4 规范 (持久化,XA 消息,事务) 3. 对 Spring 的支持,ActiveMQ 可以很容易内嵌到使用 Spring 的系统里面去,而且 也支持 Spring2.0 的特性 4. 通过了常见 J2EE 服务器(如 Geronimo、JBoss 4、GlassFish、WebLogic)的测 试,其中通过 JCA 1.5 resource adaptors 的配置,可以让 ActiveMQ 可以自动的部署到任 何兼容 J2EE 1.4 商业服务器上 5. 支持多种传送协议:in-VM、TCP、SSL、NIO、UDP、JGroups、JXTA
6. 支持通过 JDBC 和 journal 提供高速的消息持久化 7. 从设计上保证了高性能的集群,客户端-服务器,点对点
8. 支持 Ajax 9. 支持与 Axis 的整合
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 8 of 19

10. 可以很容易得调用内嵌 JMS provider,进行测试 安装 ActiveMQ 首先去 https://www.360docs.net/doc/1112052751.html,/download.html 下载最新版本 4.1.0release, 解压 apache-activemq-4.1-incubator.zip(或者 apache-activemq-4.1-incubator.tar.gz)目录如下: +bin (windows 下面的 bat 和 unix/linux 下面的 sh)
+conf (activeMQ 配置目录,包含最基本的 activeMQ 配置文件) +data (默认是空的)
+docs (index,replease 版本里面没有文档,不知道为啥不带)
+example (几个例子) +lib (activemMQ 使用到的 lib)
-apache-activemq-4.1-incubator.jar (ActiveMQ 的 binary) -LICENSE.txt
-NOTICE.txt
-README.txt
-user-guide.html
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 9 of 19

你可以使用 bin\activemq.bat(activemq) 启动,如果一切顺利,你就会看见类似下面 的信息:
运行信息 几个小提示
1. 这个仅仅是最基础的 ActiveMQ 的配置,很多地方都没有配置因此不要直接使用这 个配置用于生产系统
2. 有的时候由于端口被占用,导致 ActiveMQ 错误,ActiveMQ 可能需要以下端口 1099(JMX),61616(默认的 TransportConnector)
3. 如果没有物理网卡,或者 MS 的 LoopBackAdpater Multicast 会报一个错误
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 10 of 19

测试你的 ActiveMQ 由于 ActiveMQ 是一个独立的 jms provider,所以我们不需要其他任何第三方服务器 就可以马上做我们的测试了。编译 example 目录下面的程序 ProducerTool/ConsumerTool 是 JMS 参考里面提到的典型应用,Producer 产生消息,Consumer 消费消息,而且这个例 子还可以加入参数帮助你测试刚才启动的本地 ActiveMQ 或者是远程的 ActiveMQ。 ProducerTool broker 的地址,默认的是 tcp://localhost:61616
[true|flase] 是否使用 topic,默认是 false
[subject] subject 的名字,默认是 TOOL.DEFAULT
[durabl] 是否持久化消息,默认是 false
[messagecount] 发送消息数量,默认是 10
[messagesize] 消息长度,默认是 255
[clientID] durable 为 true 的时候,需要配置 clientID
[timeToLive] 消息存活时间
[sleepTime] 发送消息中间的休眠时间
[transacte] 是否采用事务
ConsumerTool broker 的地址,默认的是 tcp://localhost:61616
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 11 of 19

[true|flase] 是否使用 topic,默认是 false [subject] subject 的名字,默认是 TOOL.DEFAULT [durabl] 是否持久化消息,默认是 false
[maxiumMessages] 接受最大消息数量,0 表示不限制
[clientID] durable 为 true 的时候,需要配置 clientID
[transacte] 是否采用事务
[sleepTime] 接受消息中间的休眠时间,默认是 0,onMeesage 方法不休眠
[receiveTimeOut] 接受超时
我们可以这样使用: 先启动 activeMQ,再打开两个命令窗口,都进入 D:\activemq\example,一个运行: ant consumer,一个运行:ant producer,如果成功发送/接收了消息就 OK 了。
(来源:百度)
原文链接:https://www.360docs.net/doc/1112052751.html,/showcontent_41902.htm
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 12 of 19

ActiveMQ 实践:使用场景
在系统架构中,有很多场景 ActiveMQ 和异步消息都会产生深远的影响。下面是一些 场景实例: 非均匀应用集成。ActiveMQ 中间件用 Java 语言编写,因此自然提供 Java 客户端 API。但是 ActiveMQ 也为 C/C++、.NET、Perl、PHP、Python、Ruby 喝一些其他语言提供 客户端。在你考虑如何集成不同平台不同语言编写的应用的时候,ActiveMQ 拥有巨大优 势。在这样的例子中,多种客户端 API 通过 ActiveMQ 发送和接受消息成为可能,无论使 用的是什么语言。此外,ActiveMQ 还提供交叉语言功能,该功能整合这种功能,无需使用 远程过程调用(RPC)确实是个优势,因为消息协助应用解耦。 作为 RPC 的替代。应用使用 RPC 风格同步调用十分普遍。假设大多数客户端服务器应 用使用 RPC,包括 ATM、大多数 WEB 应用、信用卡系统、销售点系统等等。尽管很多系统 很成功,转换使用异步消息可以带来很多好处,而且也不会放弃响应保证。系统以来同步 需求典型地限制了扩展,因为最终需求将开始起作用,从而放慢整个系统。取而代之这种 不好的体验,使用异步消息,附加的消息接收器可以轻松添加,假设你的应用可以解耦。 两个应用之间解耦。正如之前讨论的,紧耦合架构可以导致很多问题,尤其是如果他 们是分布的。松耦合架构,在另一方面,真实了更少的依赖性,能够更好地处理不可预见 的改变。你不见可以在系统中改变组件而不影响整个系统,而且组件交互也相当的简单。 取代使用同步方案的组件交互,组件利用异步通信。这样的松耦合遍及系统被称之为事件 驱动架构(EDA)。 作为事件驱动架构的主干。在之前的观点中,解耦、异步风格架构允许软件本身进一 步扩展(水平的可扩展性),而不是依赖硬件的可扩展性(垂直的可扩展性)。想象一下 一种难以置信的流量、电子商务网站像亚马逊。但一个用户在亚马逊上购买,许多分开的
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 13 of 19

阶段贯穿,订单需要履行包括订单配置、创建发票、支付流程、订单完成、运输等。然 而,但一个用户实际上失职了一个订单,用户立即得到一个页面说明,“感谢您的订 单。”不仅如此,没有任何延误。用户也收到了订单已经收到的邮件说明。订单配置流程 由亚马逊雇佣就是个很好的例子,第一步在一种更大的、异步流程中。每一个订单步骤直 接由分开的服务奋力地处理。但用户下了订单,异步调用提交订单,但是全部订单流程不 会落后于通过网页浏览器进行的同步调用。反之,订单被接受并立即被确认。这个流程中 剩余的步骤一步地被处理。如果发生了问题,组织流程进行,用户会被通知。这样的异步 流程提供大量的可扩展性。 改善应用可扩展性。许多应用利用事件驱动架构,为了提供大量的可扩展性,包括像 电子商务、政府、制造业和在线游戏等领域。使用异步消息在业务领域分离一个应用,许 多其他可能性开始合并。考虑使用服务为特定任务设计应用的能力。这正是面向服务架构 (SOA)的主干。每一个服务实现一个独立的功能,而且只是那个功能。应用通过这些服 务构成来创建,在服务间使用异步消息实现通信。这种风格的应用设计被称之为复杂事件 处理(CEP)。使用 CEP,系统中组件之间的交互可以被进一步的分析跟踪。在考虑异步消 息在系统的组件之间添加一种迂回的时候,这些可能性是无止境的。
(作者:Bruce Snyder, Dejan Bosanac, Rob Davies 译者:张培颖 来源:TechTarget 中国)
原文链接:https://www.360docs.net/doc/1112052751.html,/showcontent_41897.htm
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 14 of 19

ActiveMQ 实践:ActiveMQ 使用入门
开始使用 ActiveMQ 并不是很难,你只需要启动代理,确保它能够接受连接和发送消 息。ActiveMQ 附带了一些例子,有助于你完成这个任务,但是,首先你需要安装 Java, 并下载 ActiveMQ。 第一次要下载并安装 Java SE 和 ActiveMQ,检查 ActiveMQ 目录,启动 ActiveMQ。 1.下载并安装 Java SE ActiveMQ 至少需要 Sun Java SE 1.5。在本章中,必须优先安装。如果你没有安装 Sun J2SE 1.5,你需要使用 Linux, Solaris 或者 Windows 从下面的地址下载并安装它: https://www.360docs.net/doc/1112052751.html,/javase/downloads/index_jdk5.jsp 请确保,你没有下载 Netbeans 的 JDK 5.0 或者 Java 运行时环境!你需要下载 JDK 5.0 Update 22。如果你使用 MacOS X 系统,你应该已经安装了 Java。但是以防万一,你 可以从下面网址获得它:https://www.360docs.net/doc/1112052751.html,/java/download/ 一旦你安装了 Java SE,你需要测试它是否设置正确。 这样做,打开一个终端或者命令行,输入如下命令:
以下是引用片段: [~]$ java -version java version "1.5.0_13" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_13-b05-237) Java HotSpot(TM) Client VM (build 1.5.0_13-119, mixed mode, sharing)
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 15 of 19

你的输出可能会略有不同,这取决于你使用的操作系统,但是最重要的部分是 Java SE 的输出。上面的命令行告诉我们两件事情; J2SE 已经正确安装,你使用的版本是 1.5。 如果你不能看到类似的输出,那么,你需要在进入下一章节之前,纠正这个环境。 2.下载 ActiveMQ ActiveMQ 可以在下面地址的 Apache ActiveMQ 网站上获得: https://www.360docs.net/doc/1112052751.html,/download.html 点击超链接 5.4.1 release,你会找到 tarball 和 zip 两种可用的压缩格式(tarball 在 Linux 和 Unix 上可用,而 zip 在 Windows 可用)。一旦你下载了这个包,并解压它,你就 要继续进行下去。一旦到了这一步,你应该设置好了 Java SE,并正常工作,那么你就要 准备看一下 ActiveMQ 的目录了。 在命令行中,进行 apache-activemq-5.3.0 目录,并列出它。 3. 检查 ActiveMQ 的目录 目录:
以下是引用片段: [apache-activemq-5.3.0]$ ls -1 LICENSE NOTICE README.txt WebConsole-README.txt activemq-all-5.3.0.jar bin conf data
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 16 of 19

docs example lib user-guide.html webapps 该目录的内容相当简单:
?
LICENSE – 由于法律目的,ASF 需要的文件,包括 ActiveMQ 用到的所有 的库的许可证
?
NOTICE – 另一个由于法律目的,ASF 需要的文件,它包括 ActiveMQ 用到 的所有的库的版权信息
?
README.txt – 该文件包含了一些程序说明书的地址,让新用户开始使用 ActiveMQ
? ?
WebConsole-README.txt - 包含使用 ActiveMQ web 控制台的信息 activemq-all-5.3.0.jar - 一个 jar 文件,为了方便起见放置在这里,如 果你需要,可以获得并使用它
?
bin – bin 目录包含 ActiveMQ 的二进制/可执行文件; 启动角本在这个目 录中
? ? ? ? ? ? ?
conf – conf 目录包含 ActiveMQ 所有的配置信息 data – data 目录用来存放日志文件和持久性消息数据 docs – 包含一个简单的 index.html 文件,用来引用 ActiveMQ 网站 example – ActiveMQ 的例子; 用来迅速检验 ActiveMQ。 lib – lib 目录包含 ActiveMQ 需要的所有库文件。 user-guide.html – 一个非常短的指南,用来讲述 ActiveMQ 和运行例子 webapps – webapps 目录包含 ActiveMQ web 控制台和一些其他 web 相关 的演示
下一个任务是启动 ActiveMQ,并用例子来验证它。
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 17 of 19

4.启动 ActiveMQ 下载并解压 ActiveMQ 包之后,就可以使用它了。二进制分发提供了基本的配置,让 你更容易的开始,这就是我们将要使用的例子。所以,现在启动 ActiveMQ,在 Linux/Unix 环境下运行下面的命令:
以下是引用片段: [apache-activemq-5.3.0]$ ./bin/activemq Java Runtime: Apple Inc. 1.5.0_16 /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home Heap sizes: current=1984k free=1449k max=520256k JVM args: -Xmx512M https://www.360docs.net/doc/1112052751.html,eDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties Dcom.sun.management.jmxremote -Dactivemq.classpath=/tmp/apache-activemq-5.3.0/conf; -Dactivemq.home=/tmp/apache-activemq-5.3.0 -Dactivemq.base=/tmp/apache-activemq-5.3.0 ACTIVEMQ_HOME: /tmp/apache-activemq-5.3.0 ACTIVEMQ_BASE: /tmp/apache-activemq-5.3.0 Loading message broker from: xbean:activemq.xml INFO | Using Persistence Adapter: org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter@5bc68c INFO | ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting INFO | For help or more information please see: https://www.360docs.net/doc/1112052751.html,/ INFO | Listening for connections at: tcp://mongoose.local:61616 INFO | Connector openwire Started INFO | ActiveMQ JMS Message Broker (localhost, ID:mongoose.local-56371-1255406832102-0:0) started
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 18 of 19

INFO | Logging to org.slf4j.impl.JCLLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog INFO | jetty-6.1.9 INFO | ActiveMQ WebConsole initialized. INFO | Initializing Spring FrameworkServlet 'dispatcher' INFO | ActiveMQ Console at http://0.0.0.0:8161/admin INFO | Initializing Spring root WebApplicationContext INFO | Connector vm://localhost Started INFO | Camel Console at http://0.0.0.0:8161/camel INFO | ActiveMQ Web Demos at http://0.0.0.0:8161/demo INFO | RESTful file access application at http://0.0.0.0:8161/fileserver INFO | Started SelectChannelConnector@0.0.0.0:8161 此命令可以启动 ActiveMQ 代理,一些连接器可以通过一些协议暴露给客户,如 TCP, SSL, STOMP 和 XMPP。 要知道 ActiveMQ 的启动,提供给客户的四种可用协议和用到的每一个端口号。这些 配置将在第三章讨论。现在,上面的输出告诉你,ActiveMQ 已经建立和运行,并可以使 用。现在,开始准备处理一些消息。 最好的方法是用 ActiveMQ 的例子发送并接收消息。下一章将为你循序渐进的讲述。
(作者:Bruce Snyder, Dejan Bosanac, Rob Davies 译者:刘志超 来源: TechTarget 中国)
原文链接:https://www.360docs.net/doc/1112052751.html,/showcontent_42007.htm
TT SOA 技术专题之“ActiveMQ 实践入门指南”
Page 19 of 19

相关主题
相关文档
最新文档