RocketMq消息队列服务化方案

作者: 一个没有感情的程序员 | 来源:发表于2019-06-25 12:20 被阅读27次

一、rocketMq目前设计

1. 目前已有功能概况

  • 架构模式
    RocketMQ 与大部分消息中间件 样,采用发布订阅模式,基本的参与组件主要包括
    消息发送者、消息服务器(消息存储)、消息消费、路由发现
  • 顺序消息
    支持严格有序
  • 消息过滤
    支持消息过滤,从broker端或者从消费者端过滤,推荐从broker端过滤
  • 消息存储
    持久化存储,性能极高
  • 消息高可用性
    broker双主双从及以上的集群可以满足消息可靠性要求极高的场合
  • 消息到达(消费)低延迟
    使用长轮询模式实时推送,能做到低延迟
  • 确保消息必须被消费一次
    支持至少消费一次,但是有重复消费的可能,需要手动去重或者让消息消费幂等
  • 回溯消息
    支持毫秒级精度的向前或者向后回溯
  • 消息堆积
    使用磁盘存储,默认保存3天
  • 定时消息
    不支持任意粒度的定时,支持固定粒度的定时任务(基本可以满足所有定时需求)
  • 消息重试机制
    支持消息重试

2. rocketMq 简单架构

  • 物理部署
    avatar
  • 消息消费与发布
    image.png

二、企业级消息队列服务化实现方式

1. 使用HTTP推送方式

  1. 实现方式:消息队列服务方封装生产者和消费者,消息的生产依赖服务调用方调用网络接口,消息的消费由服务方直接使用http请求推送
  2. 优点:实现简单
  3. 缺点:效率不高,依赖网络请求,功能选择也依赖API,不灵活。无法根据消费能力控制消息发送速度。

2. 使用HTTP主动拉取方式

1.实现方式:消息队列服务方封装生产者和消费者,消息的生产通过服务调用方调用网络接口,消息的消费由服务调用者主动调用接口拉取消息。(需要做积压管理)
2.优点:相比HTTP推送性能更高,分散网络压力,服务调用方可以根据消费能力自己控制消费速度
3.缺点:服务调用方需要不停的调用接口来监控是否有消息到达。服务方实现较为困难

3. 使用SDK方式

  1. 实现方式:使用SDK封装二次开发消费者与生产者,把SDK提供给需要使用的服务
  2. 优点:使用rocketMq内部已经实现的消息通信,使用者可以任意使用rocketMQ已有的功能进行消息生产、消费
  3. 缺点: 需要封装SDK,初期可能开发工作量较大,使用消息队列较麻烦,对于只是简单使用消息队列的项目来说较为麻烦(需要引入SDK以及需要懂得简单的RocketMQ操作)

4. 使用基于RocketMq的开源

(也属于SDK的一种实现方式)

滴滴基于RocketMq的开源项目DDMQ

低延迟高吞吐:毫秒级延迟,单机百万条消息吞吐。

丰富的消息类型:具备实时消息、延时消息和分布式事务消息。

海量消息存储,支持消息回溯消费:支持 RocketMQ 和 Kafka 作为实时消息的存储引擎,使用 RocksDB 作为延时消息的存储引擎。

秒级延时消息:支持单条消息设置精确到秒级的延迟时间,提供普通延时消息和循环延时消息。

多语言客户端:提供了主流开发语言 SDK,包括 PHP、Java、Go、C/C++ 与 Python,在 API 上保持着最易使用的 High Level 形式。

多种消费方式:支持通过 Thrift RPC 拉取、HTTP 推送和第三方存储直写的方式消费消息。

支持灵活的消息过滤和转换功能:通过使用 Groovy 脚本在服务端进行消息体的转换和过滤,能够有效减少客户端和服务器的数据传输量,减轻客户端处理消息的负载。

统一的 Web 控制台:方便用户管理 Topic 等资源,通过控制台可以实现配置生产和消费的限流值、消费方式、Groovy 脚本、启停消费与重置消费进度等功能。

完善的监控配套:提供模块的健康检查和消息堆积告警功能。

依赖如下:

  • 64位操作系统,Linux / Unix / Mac
  • 64位JDK 1.8+
  • Maven 3.2.x.
  • MySQL 5.7.x
  • Tomcat 7/8/9
  • Zookeeper 3.4.x

优点 :基于SDK实现方式,SDK已有开源且有web控制台页面。功能基本已经完善。无需开发,调试部署可以满足生产需求
缺点 :目前版本v1.0,2019年1月发布。虽然使用的是原生的RocketMq-4.2.0,但是网上教程较少,遇到问题解决较为麻烦,需要时间熟悉源码。

三、各个模式具备的功能

功能 1. Http推送消费模式 2. Http拉取消费模式 3. SDK模式 模式比较
顺序消息 不支持 支持 支持 3>2>1
消息过滤 支持 支持 支持 1=2=3
消息持久化 支持 支持 支持 1=2=3
高可用 超高 3>2>1
消息低延迟 一般 较低 低延迟 3>2>1
消息延迟因素 依赖网络/机器性能 依赖接口/网络性能 长连接基本无依赖 3>2>1
消息重试 发送http返回失败重试 消费者手动塞回队列重试 消费失败重试 3>1>2
定时消息 不支持 支持 支持 3>2>1
广播模式 支持,需 指定群发地址 不支持 支持 3>1>2
分析 比较
实现难度 2>3>1
预计工时(单人) 1. 预计8天 2. 预计10~15天 3.预计10~15天

四、建议

建议先实现第一种HTTP推送消费模式,然后再拓展兼容第二种HTTP拉取消费模式,最后再实现第三种,开发SDK面向高级用户。
或者先实现第一种,再实现第二种,覆盖初级与高级需求,最后再实现第二种,作为第一种模式的补充 。

如果不打算从零开始建设服务化消息队列,可以使用第四种方案

相关文章

网友评论

    本文标题:RocketMq消息队列服务化方案

    本文链接:https://www.haomeiwen.com/subject/yedtcctx.html