分布式消息中间件RocketMQ

分布式消息中间件RocketMQ

一、特点:
1、 具有灵活的可扩展性,天然支持集群。核心的四大组件(NameServer、Broker、Producer、Consumer)支持水平扩展。
2、 海量消息堆积能力。
3、 支持顺序消息。可以保证消息消费者按照消息的发送顺序对消息进行消费。生产者通过将消息发送到同一个队列来实现。
4、 支持多种消息过滤方式。服务端过滤和消费端过滤。
5、 支持事务消息。
6、 支持回溯消费。

二、基本概念

在这里插入图片描述
1、 生产者
1) 同步发送: 发出数据后,会在收到接收方发回的响应后才发送下一个数据包。
2) 异步发送:发出数据后,不等待接收方发回响应,就接着发送下一个数据包。
3) 单向发送:只负责发送而不等待服务器回应且没有回调函数。

生产者组:一类生产者的集合,发送一类消息且发送逻辑一致
2、 消费者
1) 拉取型:主动从消息服务器拉取消息,只要批量拉取到消息,消费应用就会启动消费过程
2) 推送型:封装了消息的拉取、消费进度和其他内部维护工作。将消息到达时执行的回调接口留给应用程序实现。要注册消费监听器。

消费者组:一类消费者的集合。消费同一类消息且消费逻辑一致。分组机制实现了天然的消息负载均衡。
3、 消息服务器
消息服务器(Broker)是消息存储中心。其主要作用是接收来之生产者的消息并进行存储。消费者从这里拉取消息。还存储消息相关的元数据,包括用户组、消费进度偏移量、队列信息。部署上,有Master和Slave两种类型,Master可读可写,Slaver只读。实现了主从结构。

集群部署方案

1)同步双写:producer往master写入一个消息,然后master往slave复制这个消息至少一个slave复制到这个消息后,才返回成功消息。
2)异步复制:只要producer往master写入一个消息就返回成功,然后master的消息通过异步复制方式写入slave
4、名称服务器
用来保存Broker相关元数据,并给生产和消费者查找Broker信息。设计成无状态,可以横向扩展、节点间无通信。每个Broker启动时会到名称服务器上注册,生产者发送消息时会根据主题到名称服务器上获取Broker的路由信息。功能上和ZooKeeper类似。

5、消息
一条消息必须有一个主题,可以看做信件要邮寄的地址。
主题:消息的归类。消息的一级类型,如交易、物流消息
标签:二级类型,如交易的创建、完成。提供了额外的灵活性。
6、队列:主题被划分为一个或多个子主题,即队列。在一个主题下可以设置多个队列。

7、 消息消费模式:集群模式和广播模式。默认是集群消费,一个队列只会被一个消费者消费,如果该消费者挂掉了,分组内的其他消费者会接替它继续消费。而广播消费会将消息发送给消费者组中的每一个消费者进行消费。
8、 消息顺序:顺序消费(Orderly)和并行消费(Concurrently)。并行消费不保证消费顺序。
9、 重复消费:为了防止重复消费问题,在消费信息时由消费者提供幂等接口。
10、 消息重试:任何MQ产品都可能存在各种异常,因此提供消息失败的重试机制。分为生产者端重试和消费者端重试。生产者端设置消息发送失败重试次数。消费者端如果是MQ发送失败,MQ内部会不断重新发送。如果是消费者内部业务问题,为了保证消息至少被消费成功一次,则会把失败的消息发回给Broker,在接下来的某个时间点再次投递,如果一直重复消费失败,当到达一定次数时,加入死信队列进行人工干预。
11、 消息的幂等处理。创建消息处理日志表记录成功处理的消息ID。
12、 定时消息:是指消息的延迟发送时间。
13、 批量发送:构造消息集合对象,当消息到一定大小时进行一次性发送,提高效率。

RocketMQ提供的分布式事务解决方案:设计上借鉴了两阶段提交,即将一个分布式事务拆分成(系统A的本地事务+发消息)+(系统B的本地事务)。
1、 事务发起方首先发送propare消息到MQServer。
2、 MQ Server 向事务发起方ACK确认消息发送成功。
3、 事务发起方接到确认消息后执行本地事务。
4、 事务发起方根据本地执行结果返回commit或者rollback,从而向MQ Server发起二次确认。如果是rollback,MQ将不再向消费者下发消息。
5、 如果MQ没有收到二次确认,将在一段时间后对消息发起方发起消息回查,不停询问同组其他Producer来获取状态。
6、 消费端的消费成功机制由MQ保证。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值