经常会遇到系统中使用Message Queue/消息队列的情况, 与此类似的模型还有 pubsub/发布订阅模式(publisher/subscriber).
这两种模型的实现也被看做 消息中间件/MOM(Message-Oriented Middleware),因为这种结构解耦了发送端和接收端,简化了架构.
另外常提的一个概念是Messaging Broker, 更多的用于消息验证,转换,路由.
现在有很多流行的开源实现, 对于消息有常用的三种标准:
- AMQP: Advanced Message Queuing Protocol
- STOMP: Streaming Text Oriented Messaging Protocol
- MQTT/ MQ Telemetry Transport: 轻量级协议,IoT标准
其他
- XMPP/Extensible Messaging and Presence Protocol: 基于XML的通讯协议
前两个基于HTTP, 后一个基于TCP/IP.
下面是一些实现的概要描述, 这些实现的比较不全在同一纬度, 只是看那个更适合你的应用场景,语言绑定等.
开源实现
名称 | 语言 | 星数 | 描述 |
---|---|---|---|
ActiveMQ | Java | 1.1 k | Apache基金旗下, 支持JMS |
RabbitMQ | Erlang | 4.3k | 貌似MQ系列的首选,成熟且性能高 |
ZeroMQ | C++ | 4.4k | 高度封装并支持多种收发模式。点对点的消息传输上,能在发送端缓存消息 |
Celery | Python | 10k | 异步任务队列,常用于耗时操作的异步执行 |
Redis | C | 30.3k | 最流行的内存KV数据库/缓存 |
Kafka | Java/Scala | 9k | 早期LinkedIn开源产品,后归于Apache基金. 常用于日志处理分析 |
NATS | Go | 4.4k | CNCF孵化项目 |
NSQ | Go | 12k | 项目近期发布不活跃 |
注: 只接触过Celery,Redis和Kafka, MQ系列没有使用经验不做过多介绍.
示例
TBC…