您的位置:首页 > 编程语言 > Java开发

Part 1 ——ActiveMQ 概述

2017-04-24 17:46 323 查看
Apache ActiveMQ 是使用JMS(Java Message Service)规范的两个系统间远程通信的一个消息代理(消息中间件)。尽管ActiveMQ是使用Java语言编写的,但它提供了多种语言的APIs,包括C/C++,.NET,Perl,PHP,Python,Ruby等等。ActiveMQ是Apache下的一款开源的软件,遵循JMS1.1规范,是面向消息的中间件(MOM),它为企业通信提供了高可用、高性能、可扩展、可靠和安全性。ActiveMQ旨在为分布式应用间远程通讯。

何时使用ActiveMQ?

异构应用集成

作为RPC的替代物

降低应用间的耦合度

作为消息驱动架构的主干

提高应用的可扩展性 ——许多应用利用消息驱动的架构来提供巨大可扩展性,包括如下领域:电商、政府、制造商、网游等等。

1. 下载安装ActiveMQ

在安装ActiveMQ之前,请先配置好Java开发环境,设置JAVE_HOME等环境变量。

下载ActivieMQ的最新版本:下载ActiveMQ

下载完后解压到一个目录下,接下来验证是否可用。

打开cmd命令窗口,进入ActiveMQ的解压目录,然后再cd 到bin目录下,输入:

C:\apache-activemq-5.14.5>bin\activemq


服务正常启动后在浏览器输入http://127.0.0.1:8161/admin/ 账号密码都是admin,进入管理界面则表示已成功安装ActiveMQ。当然ActiveMQ可以安装为Windows的系统服务而可以随系统自动启动,在bin目录的win64目录下有一个InstallService.bat批处理命令,双击执行就可以安装为系统服务。

2.安装Ant和Maven

此处不做详细介绍,请参考官网介绍。

3. 运行第一个示例

ActiviteMQ解压目录下有一个examples目录,打开cmd窗口,进入到该目录的openwire目录下,再cd到其中一个文件夹下,如swissarmy,然后

执行如下命令:

ant consumer


该命令执行成功后,窗口处于消息等待状态(消费者等待消息的到来)

接下来打开另一个cmd窗口,执行如下命令:

ant producer


执行成功后会在cmd窗口输入2000个消息,同时consumer窗口在不断的接收消息。

4.JMS domains(域、或者模式)

JMS有两种类型的消息传送模式,分别是point-to-point (点对点)和publish/subscribe(发布/订阅)。

4.1 point-to-point (点对点)

point-to-point (PTP) 消息传递模式使用destinations 被称为queues(队列)。通过使用队列,消息的发送和接收可以是同步的或者异步的方式。队列上的每一个消息的接收只会传递一次而且只传递给一个消费者。这有点类似于在邮件服务器上的人对人的邮件的发送。消费者从队列上获取消息时,要么使用MessageConsumer.receive() 方法以同步的方式接收,要么通过注册一个MessageListener示例使用 MessageConsumer.setMessageListener() 方法以异步的方式接收。队列存储所有的消息一直到这些消息被发送或过期。

4.2 publish/subscribe(发布/订阅)

publish/subscribe (pub/sub) 的消息传递模式使用destinations 被称为topics(主题)。Publishers发布者发送消息到这个主题上而注册该主题的Subscribers订阅者则从中接收消息。任何发送到主题上的消息

会自动发送到所有的订阅者。这种消息传递模式有点类似于订阅邮件。这是属于一对多的范例。

持久性订阅(durable subscription): 使用持久性订阅时,当订阅者与JMS provider(MOM)失去连接时,MOM将负责为订阅者存储消息。订阅者一旦连接上,将会从MOM上接收所有未过期的消息。持久性订阅方式允许订阅者与MOM断开连接而不会丢失消息。

非持久性连接(Nondurable subscription) 这种方式订阅,MOM将不会为失去连接的订阅者保存消息。

5 示例

5.1 准备工作

安装最新开发工具Eclipse Java EE IDE for Web Developers.

Eclipse配置好之前安装好的MAVEN路径

把电子书中源码下载下来:ActiveMQ in Action-src.zip

在Eclipse中新建一个Maven project,根据源码的包名新建好对应的package,然后将源码全部复制到工程中,导入后会发现都是红色的x,因为依赖的jar包未导入。



修改pom.xml ,导入相应的jar包,这一步非常重要也非常难(我自己弄了几个小时才弄好),因为很容易出错,往往因为网络原因或其他原因而导致对应的jar包未下载下来,通常需要手动到maven本地仓库(安装时指定的)找到对应的jar目录,从网络上下载下来再放到其中。这里可以推荐一个非常有用的maven仓库地址:Maven 仓库,其中可以搜索到所有的jar包。建议pom.xml中的依赖一个一个的添加进去,成功一个再添加一个,不要一次性全粘贴过去。

右键项目,Run as -> maven clean 然后再maven install,如果控制台打印出BUILD SUCCESS,至此才算成功。

5.2 示例1:the stock portfolio example(股票投资示例,发布/订阅模式)

如果准备工作做好了,下面的事情就轻松了,只需要几个命令就可以了。前提是Maven install执行成功,即编译成功。

- 先启动ActiveMQ服务(如果配置为系统服务,则在Windows服务管理界面启动)

- 打开cmd窗口(消费者),进入到建好的Eclipse项目的目录下(可以看到pom.xml),执行如下命令

mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch3.portfolio.Consumer -Dexec.mainClass=org.apache.activemq.book.ch3.portfolio.Consumer


执行后,首先会自动下载exec-maven-plugin插件依赖的所有的东西(之后就不用下载了)。下载完后,窗口处于信息等待状态。

打开另一个cmd窗口(发布者),输入如下命令:

mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch3.portfolio.Publisher -Dexec.args="CSCO ORCL"


执行成功后,会发送1000个消息,然后consumer窗口会不断接收消息。

5.3 示例2 the job queue example(工作队列示例,点对点模式)

有了示例1的成功执行,接下来容易得多

先启动ActiveMQ服务(如果配置为系统服务,则在Windows服务管理界面启动)

打开cmd窗口(生产者或发布者),进入到建好的Eclipse项目的目录下(可以看到pom.xml),执行如下命令

mvn exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch3.jobs.Publisher


执行成功时可以看到窗口在不断发送消息,共1000个。

打开另一个cmd窗口(消费者),输入如下命令:

mvn exec:java \
-Dexec.mainClass=org.apache.activemq.book.ch3.jobs.Consumer


执行成功后,看到窗口一下子将接收所有消息。

还有一种等效的方法,右键项目,Run as -> Maven build…,然后在Goals填写命令(把mvn去掉)



英文原版电子书下载:ActiveMQ in Action.pdf

电子书中各章节源码下载:ActiveMQ in Action-src.zip

319.《道德经》第七十二章3 此心光明,亦复何言?

原文:知我者希,则我贵矣。是以圣人被褐而怀玉。

翻译:知道我讲的道的原则的人非常稀少,按照道的原则去做的人人生会变得有价值起来。所以悟道的领导者外表看起来很普通但是心里像怀抱玉石一样光明。

内心光明,不阴暗,不纠结,这样的人生才幸福。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ActiveMQ JMS JAVA MQ