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. bzoj4031 [HEOI2015]小Z的房间

    Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. ...

  2. CSS vertical-align属性

    之前也经常用到vertical-align进行垂直居中对齐,突然发现其中的一些属性值根本就没使用过,也不清楚效果,将今天的研究成果记录下. vertical-align 属性 下表是w3c上列举的属性 ...

  3. 移动端 H5图片裁剪插件,内置简单手势操作

    前面曾经写过一篇<H5图片裁剪升级版>,但里面需要借助第三方手势库,这次就不需要使用手势库,全部封装在代码中. 下图是裁剪的展示,下面就做了拖放和裁剪,没有做缩放,在插件中需要用到大量的计 ...

  4. SQL Server 数据库连接方法

    我们用c#写ado或者是asp,都需要连接数据库来读写数据,今天我们就来总结一下数据库连接都有哪些方法. 首先我们就写最直接的方法,在事件中直接连接.(在这里就用WEB页面来展示) 首先我们建立web ...

  5. [原创]ssget过滤动态块的方式

    Autocad在2006增加了新的动态块功能,方便了对块的动态修改,但是修改动态块后,块名会变成一个匿名块,导致无法通过块名来快速过滤. 明经论坛上有人通过全选块后再来遍历筛选,我通过研究简化了这个问 ...

  6. Mirantis MCP 1.0:OpenStack 和 Kubernetes 整合的第一步

    1.前言 Mirantis 公司在2014年9月14日宣布收购 TCPCloud,然后宣布在2017年第一季度会推出全新的私有云产品.从那时候开始,我就一直满怀期待.终于,今年4月19日,Mirant ...

  7. SSH免密码(日志三)

    上一篇:JDK安装以及安装过程中出现的问题(日志二) 原理,就是RSA加密,含有公钥和私钥,具体言之,用公钥来确认请求人是否是私钥的持有人. 1, 2, 3, 4, ssh免密码过程中遇到的问题:需要 ...

  8. [刷题]算法竞赛入门经典(第2版) 6-1/UVa673 6-2/UVa712 6-3/UVa536

    这三题比较简单,只放代码了. 题目:6-1 UVa673 - Parentheses Balance //UVa673 - Parentheses Balance //Accepted 0.000s ...

  9. 网页web前端学习技巧

    1. 写js效果时一定要注意先分析好效果的行为,尽量用最简单通用性的代码.分析步骤可以是1.先把要实现的功能一步一步的写在纸上(即自然语言)2.再根据自然语言翻译成机器语言,用jquery写的代码一定 ...

  10. JavaScript性能优化 DOM编程

    最近在研读<高性能JavaScript>,在此做些简单记录.示例代码可在此处查看到. 一.DOM 1)DOM和JavaScript 文档对象模型(DOM)是一个独立于语言的,用于操作XML ...