ActiveMQ消息中间件详细介绍和使用总结

概念

ActiveMQ 是由 Apache 出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。 它的设计目标是提供标准的、面向消息的、多语言的应用集成消息通信中间件。ActiveMQ 实现了 JMS 1.1 并提供了很多附加的特性,比如 JMX 管理、主从管理、消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化、消息队列监控等等。

特性

  • 支持Java,C,C ++,C#,Ruby,Perl,Python,PHP等各种跨语言客户端和协议
  • 适用于Java,C,C ++,C#的高性能客户端的OpenWire
  • Stomp支持,以便客户端可以轻松地用C,Ruby,Perl,Python,PHP,ActionScript / Flash,Smalltalk编

写,以便与ActiveMQ以及任何其他流行的Message Broker交谈

  • AMQP v1.0支持
  • MQTT v3.1支持允许在物联网环境中进行连接。
  • 完全支持JMS客户端和Message Broker中的企业集成模式
  • 支持许多高级功能,如消息组,虚拟目标,通配符和复合目标
  • 完全支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息传递
  • Spring支持,以便ActiveMQ可以轻松嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置
    在流行的J2EE服务器中进行测试,例如TomEE,Geronimo,JBoss,GlassFish和WebLogic

包括用于入站和出站消息传递的JCA 1.5资源适配器,以便ActiveMQ可以在任何符合J2EE 1.4的服务器中自动部署

  • 支持可插拔传输协议,如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输
  • 使用JDBC和高性能日志支持非常快速的持久性
  • 专为高性能群集,客户端 - 服务器,基于对等的通信而设计
  • REST API,为消息传递提供技术无关和基于语言的中性Web API
  • Ajax支持使用纯DHTML对Web浏览器的Web流支持,允许Web浏览器成为消息传递结构的一部分
    CXF和Axis支持,以便可以轻松地将ActiveMQ放入这些Web服务堆栈中,以提供可靠的消息传递

可用作内存中的JMS提供程序,非常适合单元测试JMS

运行原理

首先需要创建连接工厂(ConnectionFactory ),用于连接ActiveMQ的服务端,其中ConnectionFactory 又有两个子类分别是队列连接工厂(QueueConnectionFactory)和主题连接工厂(TopicConnectionFactory),在我们发送消息的时候具体使用哪个连接工厂是由消息发送的目的地(Destination)来决定的,Destination是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic),对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)
然后在确定了使用哪种连接工厂后,就通过该连接工厂创建出连接对象(Connection),该连接对象是对TCP/IP socket的包装。连接对象可以产生多个会话(session),通过会话来发送消息(Message),这就是我们发送和接受的消息。

基本组件

ActiveMQ 使用时包含的基本组件各与 JMS 是相同的:

  1. Broker,消息代理,表示消息队列服务器实体,接受客户端连接,提供消息通信的核心服务。
  2. Producer,消息生产者,业务的发起方,负责生产消息并传输给 Broker 。
  3. Consumer,消息消费者,业务的处理方,负责从 Broker 获取消息并进行业务逻辑处理。
  4. Topic,主题,发布订阅模式下的消息统一汇集地,不同生产者向 Topic 发送消息,由 Broker 分发到不同的订阅者,实现消息的广播。
  5. Queue,队列,点对点模式下特定生产者向特定队列发送消息,消费者订阅特定队列接收消息并进行业务逻辑处理。
  6. Message,消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务 数据,实现消息的传输。

消息存储

JMS 规范中消息的分发方式有两种:非持久化和持久化。对于非持久化消息 JMS 实现者须保证尽最大努力分发消息,但消息不会持久化存储;而持久化方式分发的消息则必须进行持久化存储。非持久化消息常用于发送通知或实时数据,当你比较看重系统性能并且即使丢失一些消息并不影响业务正常运作时可选择非持久化消息。持久化消息被发送到消息服务器后如果当前消息的消费者并没有运行则该消息继续存在,只有等到消息被处理并被消息消费者确认之后,消息才会从消息服务器中删除。

对以上这两种方式 ActiveMQ 都支持,并且还支持通过缓存在内存中的中间状态消息的方式来恢复消息。概括起来看 ActiveMQ 的消息存储有三种:存储到内存、存储到文件、存储到数据库。具体使用上 ActiveMQ 提供了一个插件式的消息存储机制,类似于消息的多点传播,主要实现了如下几种:

  • AMQ,是 ActiveMQ 5.0及以前版本默认的消息存储方式,它是一个基于文件的、支持事务的消息存储解决方案。 在此方案下消息本身以日志的形式实现持久化,存放在 Data Log 里。并且还对日志里的消息做了引用索引,方便快速取回消息。
  • KahaDB,也是一种基于文件并具有支持事务的消息存储方式,从5.3开始推荐使用 KahaDB 存储消息,它提供了比 AMQ 消息存储更好的可扩展性和可恢复性。
  • JDBC,基于 JDBC 方式将消息存储在数据库中,将消息存到数据库相对来说比较慢,所以 ActiveMQ 建议结合 journal 来存储,它使用了快速的缓存写入技术,大大提高了性能。
  • 内存存储,是指将所有要持久化的消息放到内存中,因为这里没有动态的缓存,所以需要注意设置消息服务器的 JVM 和内存大小。
  • LevelDB,5.6版本之后推出了 LevelDB 的持久化引擎,它使用了自定义的索引代替常用的 BTree 索引,其持久化性能高于 KahaDB,虽然默认的持久化方式还是 KahaDB,但是 LevelDB 将是趋势。在5.9版本还提供了基于 LevelDB 和 Zookeeper 的数据复制方式,作为 Master-Slave 方式的首选数据复制方案。

安装启动

ActiveMQ支持多系统平台下的安装实用,要使用ActiveMQ,请先下载最新版本,点击我下载

Windows安装启动

  1. 1. 解压ActiveMQ安装包
    2. 进入到解压文件夹路径:E:\devsoft\apache-activemq-5.15.8\bin\win64
    3. 点击activemq.bat启动,如果想要后台启动可以先安装服务InstallService.bat 再启动服务

    Linux安装启动

  2.    1. 解压ActiveMQ安装包
       2.  进入解压文件夹路径:/home/yancheng/dev-soft/apache-activemq-5.9.1/bin
       3.  命令行启动: ./activemq start    命令行停止: ./activemq stop
管理控制台监控页面地址:http://localhost:8161/    账号密码 默认amdin=admin

broker-url=tcp://localhost:61616

Springboot集成

如何使用Springbooot集成

点击查看集成框架

标签: none

添加新评论