1)ActiveMQ 是一个开放源码
2)基于 Apache 2.0 licenced 发布并实现了 JMS 1.1。
3)ActiveMQ 现在已经和作为很多项目的异步消息通信核心了
4)在很多中小型项目中采用 ActiveMQ+SPRING+TOMCAT 开发模式。
4.编程模式
4.1 消息产生者向 JMS 发送消息的步骤
(1)创建连接使用的工厂类 JMS ConnectionFactory
(2)使用管理对象 JMS ConnectionFactory 建立连接 Connection
(3)使用连接 Connection 建立会话 Session
(4)使用会话 Session 和管理对象 Destination 创建消息生产者 MessageSender
(5)使用消息生产者 MessageSender 发送消息
4.2 消息消费者从 JMS 接受消息的步骤
(1)创建连接使用的工厂类 JMS ConnectionFactory
(2)使用管理对象 JMS ConnectionFactory 建立连接 Connection
(3)使用连接 Connection 建立会话 Session
(4)使用会话 Session 和管理对象 Destination 创建消息消费者 MessageReceiver
(5)使用消息消费者 MessageReceiver 接受消息,需要用 setMessageListener 将 MessageListener
接口绑定到 MessageReceiver
消息消费者必须实现了 MessageListener 接口,需要定义 onMessage 事件方法。
哪里使用:
目前常用的消息队列组建无非就是 MSMQ 和 ActiveMQ,至于他们的异同,
这里不想做过多的比较。简单来说,MSMQ 内置于微软操作系统之中,在部署
上包含一个隐性条件:Server 需要是微软操作系统。(对于这点我并去调研过
MSMQ 是否可以部署在非微软系统,比如:Linux,只是拍脑袋想了想,感觉上
是不可以)。对于 ActiveMQ,微软系统和 Linux 都是可以部署的。从功能方
面来说,一般最常用的就是:消息的收/发,感觉差异不大。从性能上来说,一
般的说法是 ActiveMQ 略高。在稳定性上,个人感觉 MSMQ 更好。如果这两
种常用队列都用过的同学,应该来说最大的差异在于:MSMQ 如果要访问远程
队列(比如机器 A 上的程序访问机器 B 上的队列),会比较恶心。在数据量比
较大的情况之下,一般来说队列服务器会专门的一台或者多台(多台的话,用
程序去做热备+负载比较方便,也不需要额外的硬件成本。简单来说做法可以
这样:消息发送的时候随机向着多台队列服务器上发送消息;接受的时候开多
个线程去分别监听;热备方面,可以维护一个带状态的队列连接池,如果消息
收发失败那么将状态置为不可用,然后起一个线程去定时监测坏的连接是否可
用,这个过程一般情况下可以不用加锁,为什么,大家根据各自需要去取舍
吧)。最近搞完了短彩信的网关连接服务,这两种队列我均使用了。大致的过
程是这样的:上层应用如果要发端彩信,那么将消息直接发送至 ActiveMQ
(目前用的就是上面说的多台热备+负载,因为实际中下行量非常大 5 千万条/
天以上),然后端彩信网关连接服务部署多套,每套均依赖本机的 MSMQ。为
什么呢?用 ActiveMQ 的原因是:上层应用程序和网关连接服务彼此独立,消
息需要跨机访问。用 MSMQ 的原因是:ActiveMQ 中的数据是一条不分省的大