1. ActiveMQ是什么
ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位
2. ActiveMQ特性
- queue的消息默认是持久化的
- 消息的优先级默认是4
- 消息发送时设置了时间戳
- 消息的过期时间默认是永不过期,过期的消息进入DLQ,可以配置DLQ及其处理策略
- 如果消息时重发的,将会标记出来
- JMSReplyTo标识响应消息发送到哪个queue
- JMSCorelationID标识此消息相关联的消息id,可以用这个标识把多个消息连接起来
- JMS同时也记录了消息重发的次数,默认是6次
- 如果有一组关联的消息需要处理,可以分组:只需要设置消息组的名字和这个消息时第几个消息
- 如果消息中一个事务环境,则TXID将被设置
- 此外ActiveMQ在服务器端额外设置了消息入列和出列的时间戳 其实还添加了一个属性JMSMimeType,值为jms/message ActiveMQ里消息属性的值,不仅可以用基本类型,还可以用List或Map类型
3. 什么时候使用ActiveMQ
-
异构应用, ActiveMQ虽然为是JAVA平台的, 但它有很多客户端.C/C++, .NET, Perl, PHP, Python, Ruby, 同时ActiveMQ也是跨平台的.
-
替代RPC的解决方案, 应用程序广泛地使用RPC风格调用实现同步. 很多C/S应用程序使用RPC包括ATMs, 大多数的web应用程序,信息卡系统,POS机等. 如果同步出现down机情况, 用户体验相当不好. 使用异步消息, 更多的消息接收者能更容易增加消息, 支持并发并且处理得更快. 这时,应用程序已经被解耦.
-
使得应用之间松耦合,前面已经提到了, 紧耦合有很多问题,特别是分布式情况下. 松耦合架构, 使得应用程序很灵活,, 也可以引导出event-driven architecture (EDA)
-
事件驱动构架的基石,解耦,异步风格的架构通过调优允许Broker伸缩来更进一步来处理相当多的客户端, 更多是内存分配,等等 (称为垂直可伸缩性), 而不是仅依靠增加Broker节点的数目去处理很多更多客户端(称为水平可伸缩性) 的能力。
-
提高应用伸缩性,许多应用程序利用事件驱动构架为了获取更多的伸缩性, 例如电子商务, 政府, 制造业, 在线游戏. 这也是SOA的基石.
4. 目前比较知名的消息中间件
- IBM MQSeries
- BEA WebLogic JMS Server
- Oracle AQ
- Tibco
- SwiftMQ
- AcitveMQ