Apache ActiveMQ 是远程系统间进行通信的消息代理,实现了 JMS(Java Message Service,Java 消息服务)。尽管 ActiveMQ 是使用 Java 写的,但是其提供了众多语言(包括 C/C++,.NET,Perl,PHP,Python,Ruby等)的 API。本书提供了商业应用里配置,使用 ActiveMQ 需要的知识。

第一部分,我们将简单介绍 ActiveMQ 带你入门。我们讨论跟面向消息的中间件和 JMS 相关的概念以便你能了解企业消息发展背景。我们介绍了书中的例子,包括它们的使用场景以及如何运行这些例子。我们将在全书中使用这些例子,所以学习每章时透彻理解这些例子是非常重要的。第一部分提供了学习本书剩余章节的基础知识。

背景

企业消息软件早在 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,这个文档浅显易懂,比自己瞎折腾好多了!

ActiveMQ 和消息简介的更多相关文章

  1. ActiveMQ发消息和收消息

    来自:http://blog.163.com/chengwei_1104/blog/static/53645274201382315625329/ ActiveMQ 是Apache出品,最流行的,能力 ...

  2. ActiveMQ之消息指针

    消息指针(Message cursor)是activeMQ里一个非常重要的核心类,它是提供某种优化消息存储的方法.消息中间件的实现一般都是当消费者准备好消费消息的时候,它会从持久化存储中一批一批的读取 ...

  3. 消息中间件--ActiveMQ&JMS消息服务

    ### 消息中间件 ### ---------- **消息中间件** 1. 消息中间件的概述 2. 消息中间件的应用场景 * 异步处理 * 应用解耦 * 流量削峰 * 消息通信   --------- ...

  4. ActiveMQ的消息持久化机制

    为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制. ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,无论使用哪种持久化方式 ...

  5. 【ActiveMQ入门-5】ActiveMQ学习-消息持久性

    ActiveMQ中的消息持久性     ActiveMQ很好的支持了消息的持久性(Persistence).消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是 ...

  6. 【Java Web开发学习】Spring消息-ActiveMQ发送消息

    ActiveMQ发送消息 转载:http://www.cnblogs.com/yangchongxing/p/9042401.html Java消息服务(Java Message Service, J ...

  7. 商城08——activeMQ 使用消息队列同步索引库

    1.  课程计划 1.什么是MQ 2.MQ的应用场景 3.ActiveMQ的使用方法. 4.使用消息队列实现商品同步. 2.  同步索引库分析 方案一:在taotao-manager中,添加商品的业务 ...

  8. activemq的消息确认机制ACK

    一.简介 消息消费者有没有接收到消息,需要有一种机制让消息提供者知道,这个机制就是消息确认机制. ACK(Acknowledgement)即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符 ...

  9. java实现基于activeMQ的消息推送

    一. 准备工作 1. 点击此下载相关的第三方jar包,并在工程中引用 二. spring配置文件:application.xml <?xml version="1.0" en ...

随机推荐

  1. SQL检索记录

    <<第一章检索记录>>:关于表使用SELECT语句和特殊字符"*": *:SELECT * from emp; 1:分别列出每一行:SELECT empno ...

  2. Machine Learning——Supervised Learning(机器学习之监督学习)

    监督学习是指:利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程. 我们来看一个例子:预测房价(注:本文例子取自业界大牛吴恩达老师的机器学习课程) 如下图所示:横轴表示房子的面积,单位是 ...

  3. bzoj1834 [ZJOI2010]网络扩容

    Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的 ...

  4. cin 字符串输入

    cin 字符串输入 在学习c的时候,关于字符串的输入,记得有 scanf("%s",s); gets(s); 还有...o.o 好想没了... scanf("%s&quo ...

  5. CAS单点登录(SSO)服务端的部署和配置---连接MySQL进行身份认证

    一.修改系统host,加入 127.0.0.1 server.test.com127.0.0.1 client1.test.com127.0.0.1 client2.test.com 二.安装grad ...

  6. single number i && ii && iii

    Problem statement Elementary knowledge: There is a popular question when I seeked my job at Beijing: ...

  7. LINQ基础(一)

    LINQ(Language Integrated Query,语言集成查询),在C#语言中集成了查询语法,可以用相同的语法访问不同的数据源. LINQ提供了不同数据源的抽象层,所以可以使用相同的语法. ...

  8. Java中的Classpath

    classpath实际上就是编译后的,以classes文件夹为起点的路径各种path获取到的路径的区别 Demo.class.getResource("");//得到的是Demo类 ...

  9. 学习spring前,先了解了解代理模式

    什么是代理模式 举个例子,我是一个包租公,我现在想卖房,但是我不想麻烦,每天被电话骚扰,所以这个时候我找了楼下一个中介,让他帮我代理这些事,那么他自然有租房的方法.以后如果有人想租房,直接找中介就行了 ...

  10. C#中设置TextBox控件中仅可以输入数字且设置上限

    首先设置只可以输入数字: 首先设置TextBox控件的KeyPress事件:当用户按下的键盘的键不在数字位的话,就禁止输入 private void textBox1_KeyPress(object ...