考虑满足几个方面:
- 是否持久化
- 吞吐能力
- 高可用
- 分布式扩展能力
- 兼容现有协议
- 易于维护
- 其他,如消息丢失和重复的处理
- 避免单点故障
- 负载均衡
常见消息系统协议
- STOMP
- AMQP
- 类似 MEMCACHE 的协议
- HTTP
- 自定格式
开源组件:
Kafka/MetaQ
- 优先考虑持久化的设计,依靠 page cache 管理内存
- 高吞吐 112MB/s 11K msgs/s (比 beanstalkd >70x 吞吐能力)
- 支持异步复制
- 高可用、基于 Zookeeper 的集群设计、支持消费者失效后重新负载均衡
- Kafka 提供 PHP 类库
- 支持 ganglia JMX 监控
- 需要策略避免重复消息, 消费者更新 Zookeeper 的 offset 的方式 (MetaQ 已经提供了几种方式避免消息重复)
- MetaQ 提供 HTTP 接口
NSQ – Golang
- 无中心设计、节点自动注册和发现。可以考虑作为内部通讯框架的基础。
- 追求简单部署
- 追求高可用、避免单点故障、无中心设计
- 确保消息送达
- 生产者消费者自动发现、消费者连接所有生产者、向消费者推的模式
- 提供 HTTP 接口
文档资料
考虑的点
- 重试机制:如果ClientB第一次没有执行成功如何对该消息处理
- 错误处理机制:如果ClientB在重试了N次之后还是异常如何处理该消息
- 熔断机制
- 如何对ClientA做一个schedule(计划安排),比如定时发送等
- 消息审计机制
- 对消息的各个状态做追踪
- 事物处理等

This work is licensed under a CC A-S 4.0 International License.