activeMQ学习之一(简单例子介绍,含spring结合)

1. activeMQ简单介绍

ActiveMQ 中间件用Java语言编写,为JAVA、C/C++、.NET、Perl、PHP、Python、Ruby 和一些其它语言提供客户端。在你考虑如何集成不同平台不同语言编写应用的时候,ActiveMQ 拥有巨大优势。多种客户端API通过ActiveMQ 发送和接受消息成为可能,无论使用的是什么语言。ActiveMQ 还提供交叉语言功能,该功能整合这种功能,无需使用远程过程调用(RPC)确实是个优势,因为消息协助应用解耦。

提供标准的产生、发送、接收消息的接口简化企业应用的开发。
    它支持两种消息通信模型:点到点(point-to-point)(P2P)模型和发布/订阅(Pub/Sub)模型。
    P2P 模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。
    对于点到点模型,消息生产者产生一个消息后,把这个消息发送到一个Queue(队列)中,然后消息接收者再从这个Queue中读取,一旦这个消息被一个接收者读取之后,它就在这个Queue中消失了,所以一个消息只能被一个接收者消费。
    与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。

2.使用场景

2.1不同语言应用集成

ActiveMQ使用java编写,并且提供一个java客户端API。但ActiveMQ也为C/C++,.NET,Perl,PHP,Python,Ruby等提供客户端。当你考虑在不同平台不同语言下的各个应用进行集成时,这将是一个巨大的优势。不同语言的客户端API使各种不同的语言能够通过ActiveMQ发送和接收消息。对于ActiveMQ提供的多语言兼容,还有一个好处是相对于RPC调用,它能帮助系统各应用间的解耦。

2.2.RPC的替代者----应用广泛的使用RPC模式的同步调用。

现在大量使用RPC调用的客户端服务器模式的应用,它们包括ATMs,大多数web应用,信用卡系统,销售点(point-of-sale)系统等。尽管它们大多数是成功的,但是转换到异步消息模式能够在保证正确响应的情况下带来一些好处。使用同步请求的系统在规模上有较大的限制,因为请求会被阻塞,从而导致整个系统变慢。如果使用异步消息替代,可以很容易增加额外的消息接收者,使得消息能被并发消耗,从而加快请求处理。当然,必须你系统应用间是解耦的。

 2.3应用间解耦

紧耦合系统能带来很多问题,特别是在应用是分布式的情况下。松耦合系统,也就是依赖性小的系统,可以更好地适应未知变化。不只是系统某部分的改变不会影响整个系统,而且部件间的交互也更简单。相比使用同步的系统(调用者必须等待被调用者返回信息),异步系统(调用方发送消息后就不管,即fire-and-forget)能够给我们带来事件驱动架构(event-driven architecture EDA).

 2.4作为事件驱动架构的骨架----解耦

异步架构的系统允许通过代理器自己配置更多的客户端,内存等(即vertical scalability)来扩大系统,而不是增加更多的代理器(即horizontal scalability)。考虑如亚马逊这样繁忙的电子商务系统。当用户购买物品,事实上系统需要很多步骤去处理,包括下单,创建发票,付款,执行订单,运输等。但是用户下单后,会立即返回“谢谢你下单”的界面。不只是没有延迟,而且用户还会受到一封邮件表明订单已经收到。在亚马逊下单的例子就是一个多步处理的例子。每一步都由单独的服务去处理。当用户下单是,有一个同步的体积表单动作,但整个处理流程并不通过浏览器同步处理。相反地,订单马上被接受和反馈。而剩下的步骤就通过异步处理。如果在处理过程中出错,用户会通过邮件收到通知。这样的异步处理能提供高负载和高可用性。

2.5 提高系统扩展性

很多使用事件驱动设计的系统是为了获得高可扩展性,例如电子商务,政府,制造业,线上游戏等。通过异步消息分开商业处理步骤给各个应用,能够带来很多可能性。考虑设计一个应用来完成一项特殊的任务。这就是面向服务的架构(service-oriented architecture SOA)。每一个服务完成一个功能并且只有一个功能。应用就通过服务组合起来,服务间使用异步消息和最终一致性。这样的设计便可以引入一个复杂事件处理概念(complex event processing CEP)。使用CEP,部件间的交互可以被记录追踪。在异步消息系统中,可以很容易在部件间增加一层处理。

3. 第一个简单例子helloWorld

3.1 下载安装

可以官方网站下载安装二进制包,   http://activemq.apache.org/download-archives.html,
上面罗列出各个版本,我使用的是这个版本:
http://activemq.apache.org/activemq-590-release.html ,分别下载对应windows和Unix/Linux/Cygwin的版本,其中mac版本也在第二个中

如何启动在 apache-activemq-5.9.0/docs/user-guide.html 写得很清楚
简单描述下:
在windows上解包,可以到apache-activemq-5.9.0\bin\activemq.bat运行ActiveMQ程序, 而在Linux上的apache-activemq-5.10.0-bin.tar.gz,解压命令: tar zxvf apache-activemq-5.9.0.tar.gz,解包到一个目录就可以使用了.

linux 64位运行: apache-activemq-5.9.0/bin/linux-x86-64/activemq  start   (后台进程,启动)
linux 64位运行: apache-activemq-5.9.0/bin/linux-x86-64/activemq  stop   (停止)
mac启动: pache-activemq-5.9.0/bin/macosx/activemq  start
mac停止: pache-activemq-5.9.0/bin/macosx/activemq  stop


ActiveMQ可能需要以下端口1099(JMX),61616(默认的TransportConnector)

windows查看监听端口:
netstat -an|find "61616"

Linux系统:
netstat -an|grep 61616

运行后可以打开web控制台,查看消息的数量、发送情况、多少个客户端等信息:
http://localhost:8161/admin
默认用户名密码:admin  admin


3.2 helloWorld代码

第一个简单的例子需要5个步骤:

1.启动activeMQ的服务

2.程序添加依赖

3.编写消息生产者

4.编写消息接受者(消费者)

5.main方法调试
3.2.1.启动activeMQ的服务

访问:http://localhost:8161/admin
默认用户名密码:admin  admin 登录成功看到如下图,代表消息服务启动成功了。



3.2.2 程序添加依赖

在java工程中,添加依赖,如果是maven项目直接用如下:

<dependency>
          <groupId>org.apache.activemq</groupId>
          <artifactId>activemq-all</artifactId>
          <version>5.9.0</version>
        </dependency>

如果是普通java工程或web工程,依赖包在:下载的解压文件目录下:apache-activemq-5.9.0/activemq-all-5.9.0.jar

3.2.3.编写消息生产者

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
import j
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值