消息队列的简单了解

57 阅读4分钟

消息队列

基础概念

常见的消息队列产品

  • ActiveMQ,是Apatche出品的、采用Java语言编写的、完全基于JMS1.1规范的、面向消息的中间件
  • RabbitMQ,采用Erlang语言实现的AMQP协议的消息中间件
  • RocketMQ,是阿里开源的、由Java语言编写的消息中间件,现已经捐献给了Apache基金会
  • ZeroMQ,基于C/C++开发的消息中间件
  • Kafka

功能维度

队列特性

  • 优先级队列
  • 延时队列
  • 重试队列
  • 死信队列

消息发送方式

  • 同步发送
  • 异步发送
  • 单向发送,不可靠消息发送方式,消息有丢失的风险,但效率最高,常用于日志等

发送数量

  • 批量发送
  • 单条发送

消费模式

  • Push(推)
    • 由Broker主动将消息推送给Consumer
    • 实时性高,但需要评估Consumer的消费能力,避免超出Consumer的处理范围
  • Pull(拉)
    • 由Consumer主动从Broker拉取消息
    • 实时性低,Consumer会根据自身的处理能力拉取消息

消息传递模式

  • 点对点(P2P,Point-To-Point)
  • 发布与订阅(Pub/Sub)

回溯消费

回溯消费是指消息在消费完成之后,还能再次消费之前被消费的消息

  • 使用场景
    • 索引恢复
    • 本地缓存重建
    • 业务补偿

消息堆积与持久化

  • 使用场景
    • 流量削峰填谷
  • 堆积方式
    • 磁盘堆积
    • 内存堆积

消息轨迹

消息审计

消息过滤

消息过滤是指按照既定规则为下游用户(Consumer)提供指定类别的消息

多租户

多重租赁技术,可以确保各用户间数据的隔离性。例如BabbitMQ可以支持多租户技术

消息队列常见协议

  • AMQP
  • MQTT
  • STOMP
  • XMPP

跨语言支持

是否支持多客户端语言(C、C++、Java、Go、PHP、Python等)

流量控制(Flow Control)

指发送方和接收方速度不匹配时,提供速度匹配服务来抑制发送速度

  • 实现方式
    • 滑动窗口
    • 令牌桶
    • Stop-And-Wait

消息顺序性

指的是保证消息的有序性

安全机制

  • 身份认证,指客户端与服务端连接进行身份认证,常见的认证方式:
    • SSL
    • SASL
    • TLS
  • 权限控制,指对服务端进行的操作的权限控制,包括客户端读写、集群控制等

消息幂等性

指的是一次和多次消费(重复消费)产生的结果是一样的

  • 解决方式
    • 在下游用户(Consumer)端,通过去重表进行保证

事务性消息

性能维度

吞吐量

影响性能的项

  • 内存、磁盘、CPU

  • 宽带、IO

  • 集群规模

  • 分区数与副本因子

  • 事务、顺序消息、定时消息、幂等性等

  • 日志、数据刷盘策略

可靠性和可用性

是否支持数据持久化与数据备份

运维管理

  • 资源申请、审核
  • 监控
  • 告警
  • 管理
  • 容灾
  • 部署
  • 社区活跃度以及生态

事件消息总线

简述

  • 事件总线是一种软件设计模式和架构,允许软件应用程序的组件或服务之间进行通信。它充当应用程序不同部分之间通信的中介,允许它们在不需要组件之间直接耦合的情况下进行通信和交换数据
  • 事件总线概念类似于消息队列,其中消息(也称为“事件”)被广播给订阅了特定类型事件的侦听器。事件总线模式支持组件之间的松散耦合,使得修改或替换组件更容易,而不会影响应用程序的其余部分
  • 事件总线使用各种技术实现,例如内存数据结构、消息队列或发布-订阅系统,具体取决于应用程序的具体要求

常见实现方式

  • Java 消息服务 (JMS):一种基于 Java 的消息传递标准,它为基于 Java 的事件总线实现定义了一个通用接口
  • Apache Kafka:一个开源的分布式事件流平台,通常用作大数据和流应用程序的高性能事件总线
  • RabbitMQ:一个实现高级消息队列协议 (AMQP) 的开源消息代理,通常用作微服务架构的事件总线
  • Microsoft Azure 事件网格:Microsoft Azure 提供的完全托管的事件路由服务,支持事件驱动的体系结构和无服务器应用程序