一个专业的消息队列,必须要做到两点:

  1. 消息不丢
  2. 消息可堆积

PHP+ActiveMQ+Stomp

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

ActiveMQ 和 JAVA 比较亲,其他的语言大部分需要靠 STOMP(全名为 Simple [or Streaming] Text Orientated Messaging Protocol。)。

功能特性

成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好。

Go+NSQ

NSQ 是一个基于 Go 语言的分布式实时消息处理平台,它基于 MIT 开源协议发布,由 bitly 公司开源出来的一款简单易用的消息中间件。其设计的目的是用来大规模地处理每天数以十亿计级别的消息。

详情见另一篇专讲 NSQ 的博文。

Kafka

Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。

Kafka 的基本术语

  • 消息:Kafka 中的数据单元被称为消息,也被称为记录,可以把它看作数据库表中某一行的记录。
  • 批次:为了提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息。
  • 主题:消息的种类称为 主题(Topic),可以说一个主题代表了一类消息。相当于是对消息进行分类。主题就像是数据库中的表。
  • 分区:主题可以被分为若干个分区(partition),同一个主题中的分区可以不在一个机器上,有可能会部署在多个机器上,由此来实现 kafka 的伸缩性,单一主题中的分区有序,但是无法保证主题中所有的分区有序

功能特性

只支持主要的 MQ 功能,像一些消息查询、消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用广。

好文推荐

多维度对比5款主流分布式MQ消息队列

真的,Kafka 入门一篇文章就够了