Home
img of docs

讲解ActiveMQ的核心概念,深入探讨ActiveMQ的特性,分析其与其他消息中间件的区别

chou403

/ ActiveMQ

/ c:

/ u:

/ 7 min read


一学一个不吱声

ActiveMQ 介于 ZeroMQ 和 RabbitMQ 之间。类似于 ZeroMQ,它可以部署于代理模式和 P2P(点对点)模式。类似于 RabbitMQ,它易于实现高级场景,而且只需付出低消耗,被誉为消息中间件的”瑞士军刀”。

支持 OpenWire,Stomp,AMQP v1.0,MQTT v3.1,REST,Ajax,Webservice 等多种协议,完全支持 JMS1.1 和 J2EE 1.4规范(事务,持久化,XA消息),支持持久化到数据库。但是 ActiveMQ 不够轻巧,而且对于队列较多的情况支持不好,据说还有丢消息的情况。

Apache ActiveMQ 是一个功能强大的开源消息代理,它以其高性能和灵活性而闻名。你所提到的内容是对 ActiveMQ 的一部分功能的总结,以下是详细解读:

STOMP 简介

STOMP(Simple/Streaming Text Oriented Messaging Protocol,简单/流文本定向消息协议)是一种轻量级的,文本为主的消息协议,专注于让消息客户端与消息代理进行交互。由于其简单性和跨平台支持,STOMP 被广泛用于支持多种语言和平台的消息通信。

STOMP 的特点
  1. 协议简单: 采用文本协议,易于阅读和调试。
  2. 多语言支持: 适配各种语言的客户端(如 Java,Python,Ruby 等)。
  3. 跨平台互操作性: 可以连接到任意支持 STOMP 协议的消息代理。
  4. 轻量级: 适合快速开发和部署。

Apache ActiveMQ 的核心功能

  1. 协议支持

    • STOMP: 提供简单的消息通信。
    • AMQP: 高级消息队列协议,专注于可靠性和灵活性。
    • MQTT: 面向物联网设备的轻量级发布/订阅协议。
    • OpenWire: ActiveMQ 的原生协议,性能优异。
  2. 消息消费形式

    • Topic(主题): 支持发布/订阅模式,多消费者共享同一主题。
    • Queue(队列): 支持点对点模式,消息一次传递给一个消费者。
    • 持久订阅: 消息在消费者断开时仍会保留,确保消息不会丢失。
  3. 消息处理

    • 支持消息优先级,延迟消息,消息过滤等功能。
    • 提供事务支持,确保消息的处理符合 ACID 特性。
  4. 安全性

    • 支持用户认证和权限控制。
    • 可与企业安全框架集成,如 LDAP,JAAS 等。
  5. 管理与监控

    • 提供 REST 管理 API,支持消息代理的管理和监控。
    • 提供 ActiveMQ Web 控制台,便于配置和监控消息流。
  6. 持久化与高可用

    • 支持多种消息持久化机制(如文件,数据库)。
    • 支持高可用集群和主从备份。

ActiveMQ 的应用场景

  1. 企业系统集成

    • 在分布式系统中作为消息中间件,解耦服务间的通信。
    • 支持系统的异步通信和事件驱动架构。
  2. 物联网(IoT)

    • 支持 MQTT 协议,适用于设备间的轻量级通信。
    • 适合构建大规模的物联网平台。
  3. 实时消息系统

    • 实现实时数据推送,如股票行情,新闻推送。
    • 支持高频率消息传输。
  4. 日志与事件聚合

    • 收集分布式系统的日志和事件,集中处理和存储。

与其他消息代理的比较

特性ActiveMQRabbitMQKafkaRedis Pub/Sub
协议支持STOMP, AMQP, MQTT, OpenWireAMQP自定义协议无标准协议
模式支持Queue, TopicQueue, TopicPartitioned LogPub/Sub
持久化支持支持强持久化(高吞吐)基本持久化
性能高性能,适合中等吞吐量高性能,适合高并发极高吞吐,适合日志或事件流处理高性能,但功能有限
应用场景企业集成,实时消息企业消息队列,分布式系统大数据日志,实时流分析简单消息通知,轻量级系统

为什么选择 ActiveMQ

  1. 多协议支持: 支持多种协议,适配各种场景和客户端需求。
  2. 灵活性强: Topic 和 Queue 的支持使其既能满足发布/订阅,又能实现点对点通信。
  3. 易于使用: STOMP 的简单性和 ActiveMQ 提供的工具使开发和运维更加高效。
  4. 可扩展性: 支持集群部署,能够处理大规模并发请求。

在项目中使用 ActiveMQ 的配置步骤

1. 安装和启动 ActiveMQ
  1. 下载 ActiveMQ: ActiveMQ 下载链接.
  2. 解压后运行:
       ./bin/activemq start
  3. 访问管理界面(默认端口 8161):http://localhost:8161/admin.
2. 在 Spring 项目中集成
  1. 添加依赖:

       <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-spring-boot-starter</artifactId>
        <version>5.18.0</version>
    </dependency>
  2. 配置文件(application.yml):

       spring:
      activemq:
        broker-url: tcp://localhost:61616
        user: admin
        password: admin
  3. 生产者示例:

       @Service
    public class Producer {
        @Autowired
        private JmsTemplate jmsTemplate;
    
        public void sendMessage(String destination, String message) {
            jmsTemplate.convertAndSend(destination, message);
        }
    }
  4. 消费者示例:

       @Component
    public class Consumer {
        @JmsListener(destination = "test-queue")
        public void receiveMessage(String message) {
            System.out.println("Received message: " + message);
        }
    }

服务发现与配置的结合

  • 如果结合 Spring Cloud 使用:
    • 将 ActiveMQ 用作服务间异步通信的消息中间件。
    • 配置 Eureka/Nacos 等服务发现工具,用于动态发现服务实例。
    • 使用 ActiveMQ 的消息机制实现跨服务事件的发布与消费。

总结

ActiveMQ 是一个全面,灵活的消息代理工具,支持多种协议和消费形式。其设计使其能够适应广泛的场景,从企业集成到物联网平台。通过与 Spring Cloud 集成,开发者可以轻松实现服务的解耦和动态通信。在选择消息中间件时,ActiveMQ 的多功能性和易用性使其成为一个强大的选项。