加入收藏 | 设为首页 | 会员中心 | 我要投稿 上饶站长网 (https://www.0793zz.com.cn/)- 数据库平台、视觉智能、智能搜索、决策智能、迁移!
当前位置: 首页 > 站长资讯 > 动态 > 正文

消息发给谁和存储在哪里?

发布时间:2021-05-04 17:49:23 所属栏目:动态 来源:互联网
导读:Producer连接NameSever Producer 通过 NameSever 获取指定 Topic 的 Broker 路由信息,并在本地保存一份缓存数据,比如一个Topic有哪些 MessageQueue,MessageQueue 在哪几台 Broker 上,Broker 的ip.port等等。Producer 发送消息只发到 Master Broker上,Sl

Producer连接NameSever

Producer 通过 NameSever 获取指定 Topic 的 Broker 路由信息,并在本地保存一份缓存数据,比如一个Topic有哪些 MessageQueue,MessageQueue 在哪几台 Broker 上,Broker 的ip.port等等。Producer 发送消息只发到 Master Broker上,Slave 通过主从同步获取数据。

那么 Produce 是怎么连接NameSever 的呢

  • 连接:单个生产者者和一台 Nameserver 保持长连接,定时查询topic配置信息,如果该nameserver挂掉,生产者会自动连接下一个nameserver,直到有可用连接为止,并能自动重连。
  • 轮询时间:默认情况下,生产者每隔30秒从nameserver获取所有topic的最新队列情况,这意味着某个broker如果宕机,生产者最多要30秒才能感知,在此期间,发往该broker的消息发送失败。该时间由DefaultMQProducer的pollNameServerInteval参数决定,可手动配置。
  • 心跳:与nameserver没有心跳

Producer连接Broker

  • 连接:生产者 跟 Topic 涉及的所有Broker 保持长连接。
  • 心跳:默认情况下,生产者每隔30秒向所有broker发送心跳。broker每隔10秒钟(此时间无法更改),扫描所有还存活的连接,若某个连接2分钟内(当前时间与最后更新时间差值超过2分钟,此时间无法更改)没有发送心跳数据,则关闭连接

Producer连接上Broker之后,消息会通过轮询的方式发送到Broker上,并且存储在Broker中的CommitLog中,这里面存储的是原始消息,还有一个ConsumeQueue用于存储投递到某一个queue的消息的位置信息。当然,消息队列会持久化到磁盘中的,不影响内存,当然也会定期清理消息。

那消费完的消息去了哪里呢?什么时候清理物理消息文件呢?还有这样设计的好处呢?

这些我们都留在下下一篇中,也就是Broker篇,让你透彻了解Broker这个大脑是如何助力RocketMQ支持这么高的吞吐量的

总之啊,这个问题值得大家深入研究一下,如果再面试的时候,你不仅能说出RocketMQ的用处,你还能说出它的存储原理和寻址原理,那面试官就爱上你了。此时你再拿出王炸,就是解决各种实际问题的能力,比如如何处理重复消息啊、如何保证消息的顺序性啊、在分布式系统中如何保证分布式事务啊

面试官当场给你发offer,say:How much money do you expect to work for us ?

3、消息的种类

RocketMQ种的消息种类大致可以分为四种:普通消息、定时和延时消息、顺序消息、事务消息四种类型,这是重点!

简单介绍下四种类型

  • 普通消息:消息队列RocketMQ版中无特性的消息,区别于有特性的定时和延时消息、顺序消息和事务消息。
  • 定时和延时消息:允许消息生产者对指定消息进行定时(延时)投递,最长支持40天。
  • 顺序消息:允许消息消费者按照消息发送的顺序对消息进行消费。
  • 事务消息:实现类似X或Open XA的分布事务功能,以达到事务最终一致性状态。

消息队列RocketMQ提供的四种消息类型所对应的Topic不能混用,例如,创建的普通消息的Topic只能用于收发普通消息,不能用于收发其他类型的消息;同理,事务消息的Topic也只能收发事务消息,不能用于收发其他类型的消息,以此类推

普通消息

普通消息:消息队列RocketMQ中无特性的消息,区别于有特性的定时和延时消息、顺序消息和事务消息

(编辑:上饶站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读