ActiveMQ 和消息简介

Apache ActiveMQ 是远程系统间进行通讯的消息代理,实现了 JMS(Java Message Service,Java 消息服务)。尽管 ActiveMQ 是使用 Java 写的,可是其提供了众多语言(包括 C/C++,.NET,Perl,PHP,Python,Ruby等)的 API。本书提供了商业应用里配置,使用 ActiveMQ 须要的知识。
第一部分,咱们将简单介绍 ActiveMQ 带你入门。咱们讨论跟面向消息的中间件和 JMS 相关的概念以便你能了解企业消息发展背景。咱们介绍了书中的例子,包括它们的使用场景以及如何运行这些例子。咱们将在全书中使用这些例子,因此学习每章时透彻理解这些例子是很是重要的。第一部分提供了学习本书剩余章节的基础知识。html

背景

企业消息软件早在 1980 年就存在了。它不只是应用之间进行交流的一种方式,也是集成的一种方式。可是,开源的解决方案在近十年快速增多。Apache ActiveMQ 就是这么一种解决方案,它为应用提供了一种异步地,松耦合地,通讯方式。这章将向你介绍 ActiveMQ。
ActiveMQ 是来自 Apache 软件基金会听从 Java Message Service(JMS)1.1 规范的面向消息的中间件,它提供了高可用性,高性能,可伸缩性以及安全的企业消息服务。ActiveMQ 使用了 Apache 许可,Apache 许但是自由的,商业友好的许可证书。也所以,任何人均可以使用和修改 ActiveMQ 并从新发布而不须要任何咨询。这对于商业公司在基础架构上无偿使用 ActiveMQ 是很是重要的。正如第二章描述的那样,一个面向消息的中间件充当了多个应用间事件交流的媒介,保证了它们能够被准确地送达接收者那里。所以,高可用性,高性能,和可伸缩性对一个消息中间件来讲是很是重要的。
ActiveMQ 的目标提供跨越多种编程语言和平台的标准的消息中间件。ActiveMQ 实现了 JMS 规范并额外提供了一打的特性。额外的特性咱们将在本书的其余章节详细介绍。
你学习ActiveMQ 的爱之初体验对你从此可否成功地运用 ActiveMQ 是很是重要的。对于菜鸟来讲,ActiveMQ 看起来多是很是复杂难学的,可是对于经验丰富的老手来讲,它是很是容易理解的。本章就是以一种轻松的方式带你熟悉 ActiveMQ。你将不只学习 ActiveMQ 的特性,也能了解到在你的开发中为何使用 ActiveMQ 以及什么时候使用 ActiveMQ。编程

ActiveMQ 特性

通过多年的努力改进,ActiveMQ 提供了不少丰富的特性。咱们将在本书讨论的特性以下:安全

  • 服从 JMS 规范:ActiveMQ 是 JMS 1.1 规范的一种实现。正如本章后面要说的,JMS 规范提供了良好的标准和保证,包括:同步或异步的消息分发,一次和仅一次的消息分发,消息接收和订阅等等。听从 JMS 规范的好处在于,不论使用什么 JMS 实现提供者,这些基础特性都是可用的。
  • 链接性:ActiveMQ 提供了普遍的链接选项,支持的协议有:HTTP/S,IP 多播,SSL,STOMP,TCP,UDP,XMPP等等。对众多协议的支持让 ActiveMQ 拥有了很好的灵活性。许多已存在的系统使用了一个特定的协议且没有其余可选项,这对于使用者来讲有很是高的学习门槛。尽管链接性是很是重要的,但和其余容器的集成也是很是重要的。第四章就主要讲解了 ActiveMQ 中传输层的链接和网络的链接。
  • 持久化插件和安全插件:ActiveMQ 提供了多种持久化选择。并且,ActiveMQ 的安全性也能够彻底依据用户需求进行自定义鉴权和受权。例如,ActiveMQ 使用了 KahaDB 实现了自身的持久化功能,但它也提供了标准的 JDBC 的访问支持。ActiveMQ 不光支持使用配置文件进行鉴权和受权,也支持标准的 JAAS 登陆模块。这两个主题将在第 5 章 和 第 6 章讨论。
  • 使用 Java 构建面向消息的应用:ActiveMQ 大部分是用于 Java 应用中来发送和接收消息。咱们将在第 7 章讨论 JMS 规范 API 的使用。
  • 和应用服务器集成:ActiveMQ 一般的用法是和应用服务器集成。第 8 章将提供具体的 ActiveMQ 和流行的应用服务(包括:Apache Tomcat,Jetty, Apache Geronimo 以及 JBoss)进行集成的例子。
  • 客户端 API:ActiveMQ 为众多编程语言提供了完整的 API,除了 Java 以外,还有:C/C++,.NET,Perl,PHP,Python,Ruby 等等。因此在除了 Java 以外的其余编程语言的世界里也是可使用 ActiveMQ 的。许多其余编程语言也可使用 ActiveMQ 提供的全部特性和优点。固然了 ActiveMQ 代理仍是运行于 Java 虚拟机之上,可是客户端可使用支持的任何语言来编写。咱们将在第 9 章讨论客户端的链接问题。
  • 代理集群:多个 ActiveMQ 代理能够组成一个集群来提供服务。咱们将在第 10 章讨论这个话题。
  • 众多高级代理特性和客户端可选项:ActiveMQ 提供了不少复杂的特性用于代理和客户端链接代理。ActiveMQ 也支持使用 Apache Camel 在 XML 配置文件中使用。咱们将在第 11 章和第 12 章讨论这些高级特性。
  • 异常简单的管理:ActiveMQ 是以开发者思惟被设计的。因此,它并不须要专门的管理员,由于它提供了简单又使用的管理特性。有不少中方法能够监控 ActiveMQ 不一样层面的数据,包括使用在 JConsole 或者 ActiveMQ 的Web Console 中使用 JMX,经过处理 JMX 的告警消息,经过使用命令行脚本,甚至能够经过监控各类类型的日志。咱们将在第 14 章讨论这些内容。

这里只是对 ActiveMQ 特性的初体验。正如上面所说,这些主题将在本书后面的章节逐步讲解。为了演示的目的,咱们提供了几个例子,这些例子将在第 3 章开始引入。可是在提供这些例子以前,想必你定是想问为何要使用 ActiveMQ?服务器

为何使用 ActiveMQ?

早在 2003 年,一群开源社区的开发者走到一块组建了 Apache Geronimo。之因此这么作,是由于他们发现世界上居然没有一个使用了 BSD 风格许可证的好用的消息代理。Geronimo 为了兼容 Java EE,须要实现 JMS 规范。这些开发者们都拥有丰富的使用消息代理的经验,有些人甚至之前本身写过简单的消息代理,很快他们开始讨论写一个开源的消息代理的可行性。而当时市场上的消息代理服务都是闭源且收费的,这更刺激了开发者们建立开源消息代理的决心。很快,使用 Apache 许可证的开源消息中间件 ActiveMQ 项目启动了。
那么,咱们为何选择使用 ActiveMQ 呢?网络

松耦合

松耦合架构通常是相对于基于 RPC(Remote Procedure Calls)的紧耦合架构来讲的。这种松耦合架构一般来讲是异步的,一个消息发起调用后并不关心其余系统的动做,不一样系统间没有独立性和实时性依赖。ActiveMQ 能够为应用提供消息分发到对端的保证。所以,消息生产者仅仅是生产和发送消息,并不关心消息怎么被分发以及什么时候被分发;消息消费者也是如此,它们不关心消息来自哪里以及它们是怎么被发送到 ActiveMQ 的。这在异构环境下是很是重要的,客户端可使用不一样的语言甚至不一样的协议来编写。ActiveMQ 在异构环境中充当中间媒介,以异步的方式和不一样系统进行交互。下一章咱们再详细讨论这些内容。
当咱们设计分布式系统时,耦合性是必然要考虑到的一点。耦合是指两个应用系统或多个应用系统之间的内部独立性。耦合概念的一个简单解释是一个应用的改变是否影响其余系统做出改变。一个应用变化是否会强制引发另一个应用变化呢?若是是,那么这两个应用就是紧耦合;不然,这两个应用就是松耦合的。通常来讲,紧耦合的系统比松耦合的系统更难维护,也就是说,松耦合系统更容易应对未来的变化。
第二章讨论的中间件(包括 COM,CORBA,DCE 以及 EJB)均是使用 RPC 来进行远程通讯的,都被认为是紧耦合系统。使用 RPC 后,一个系统调用另一个系统,调用者将阻塞直到被调用者发回响应。
而在系统架构中加上消息中间件后,系统就成了松耦合的了。架构

何时使用 ActiveMQ

何时使用 ActiveMQ 须要咱们仔细考虑。下面是一些使用了 ActiveMQ 的场景:异步

  • 异构应用集成:当系统中拥有多种编程语言编写的应用时,使用 ActiveMQ 就行松耦合解耦将是很是合适的。
  • 做为 RPC 替代品:使用了 RPC 的系统通常都是紧耦合的同步系统,替换成 ActiveMQ 后就变成了松耦合的异步系统,这两种系统之间的优劣我也就不废话了,你们都懂得。

这里做者扯了一大堆皮,无非就是使用 ActiveMQ 解耦系统,将系统异步化,好处多多之类的!编程语言

下载,安装,运行

下载和安装就没必要说了,能够直接去官网看文档了!
运行自带的例子的化,能够去读一下 ./docs/user-guide.html,这个文档浅显易懂,比本身瞎折腾好多了!分布式

相关文章
相关标签/搜索