消息中间件

前言

  • 消息中间件关注于数据的发送与接收,利用高效可靠的异步消息传递机制集成分布式系统。

  • 消息中间件是专门用来做订阅,广播等业务行为的工具,解决服务调用之间的耦合。

  • 消息中间件解耦服务调用,松耦合。使用中间件,不用等调用的服务处理完才返回结果,提高效率。

  • Java 消息中间件

  • 消息中间件 快速入门

1、ActiveMQ

  • ActiveMQ 是用 Java 语言开发的消息中间件,简单易用。

  • ActiveMQ 官网

  • 安装 ActiveMQ

    • 下载好了之后,运行 32 或者 64 位操作系统对应的 activemq.bat 就启动了。
    • 启动好之后,访问地址 http://127.0.0.1:8161/ 就可以看到管理界面,默认账号:admin,密码:admin。
  • ActiveMQ 模式

    • 队列模式

      • 其实就是分食模式。比如生产方发了 10 条消息到 ActiveMQ 服务器,而此时有多个消费方,那么这些消费方就会瓜分这些 10 条消息,一条消息只会被一个消费方得到。
    • 主题模式

      • 就是订阅模式。比如生产方发了 10 条消息,而此时有多个消费方,那么多个消费方都能得到这 10 条消息,就如同订阅公众号那样。
      • 主题模式就是每个订阅了的消费者,都可以获取所有的消息,而不像队列模式那样要争抢。
      • 需要注意的一点是,对于主题模式而言,消费者要先启动。如果在生产者生产完成之后,再启动,是看不到之前的消息的。
  • Spring 方式

    1
    2
    3
    4
    5
    <dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-client</artifactId>
    <version>5.13.4</version>
    </dependency>

2、RabbitMQ

  • 与 ActiveMQ 一样,RabbitMQ 也是一种消息中间件的实现。

  • 与 ActiveMQ 的区别在于,RabbitMQ 更专业,更灵活,大企业,大型高要求的应用,普遍会采用 RabbitMQ 来支持。

  • RabbitMQ 官网

  • 安装 RabbitMQ

    • RabbitMQ 是基于 erlang 语言开发的,就如同 ActiveMQ 需要安装 java 环境一样, 为了使用 RabbitMQ 需要安装 erlang 环境。
    • 启动好之后,访问地址 http://127.0.0.1:15672 就可以看到管理界面,默认账号:guest,密码:guest。
  • 模式

    • 与 ActiveMQ 不一样,RabbitMQ 使用的是一种叫做 AMQP 的协议来通信。AMQP 是 dvanced Message Queuing Protocol 的缩写。通过这种协议,可以处理更为复杂的业务需求。

    • Fanout 模式

      • Fanout 模式就是广播模式,消息来了,会发给所有的队列。
    • Direct 模式

      • Direct 模式就是指定队列模式,消息来了,只发给指定的 Queue, 其他 Queue 都收不到。
    • Topic 模式

      • 主题模式,注意这里的主题模式,和 ActivityMQ 里的不一样。ActivityMQ 里的主题,更像是广播模式。
    • Header 模式

      • Header 模式在实际使用中较少。

3、Kafka

  • Kafka 是一种高吞吐量的分布式发布订阅消息系统,是一个分布式的、分区的、可靠的分布式日志存储服务。

    • 通过 O(1) 的磁盘数据结构提供消息的持久化,对以 TB 的消息存储也能够保持长时间的稳定性能。
    • 高吞吐量:即使是非常普通的硬件,Kafka 也可以支持每秒数百万的消息。
    • Partition、Consumer Group。
  • Kafka 官网

4、综合比较

Propertity ActiveMQ RabbitMQ Kafka
跨语言 支持(Java 优先) 语言无关 支持(Java 优先)
支持协议 OpenWire,Stomp,XMPP,AMQP AMQP
优点 遵循 JMS 规范;安装部署方便 继承 Erlang 天生的并发性,稳定性,安全性有保障
缺点 消息丢失;社区不活跃 Erlang 语言难度较大;不支持动态扩展 严格的顺序机制,不支持消息优先级;不支持标准的消息协议,不利于平台迁移
综合评价 适合中小企业级消息应用场景,不适合上千个队列的应用场景 适合对稳定性要求高的企业级应用 一般应用在大数据日志处理或对实时性、可靠性要求稍低的场景
文章目录
  1. 1. 前言
  2. 2. 1、ActiveMQ
  3. 3. 2、RabbitMQ
  4. 4. 3、Kafka
  5. 5. 4、综合比较
隐藏目录