
分布式
文章平均质量分 58
J_Howie
这个作者很懒,什么都没留下…
展开
-
RocketMQ-消息存储(四)、消息消费队列和索引文件构建机制
当消息生产者提交的消息存储在CommitLog文件中时,会及时更新ConsumeQueue、IndexFile。RocketMQ通过开启一个线程ReputMessageService来准实时准发CommitLog文件更新事件,相应的任务处理器根据转发的消息及时更新consumeQueue、IndexFile文件。消息消费转发的核心实现在StoreMessage的doReput方法中实现:1、返...原创 2020-01-17 16:37:40 · 483 阅读 · 0 评论 -
RocketMQ-消息存储(二)、内存映射机制
RocketMQ的存储文件RocketMQ的存储文件包括CommitLog文件、ConsumerQueue文件和IndexFile文件。CommitLog :消息存储文件,所有消息主题的消息都存储在 CommitLog 文件中。Commitlog 文件存储目录为${ROCKET_HOME }/ store/commitlog 目录,每一个文件默认lG,一个文件写满后再创建另外一个,以该文件...原创 2020-01-17 15:53:38 · 926 阅读 · 0 评论 -
RocketMQ-消息存储(一):写入过程
1、当前broker停止工作或为slave则拒绝写入;消息主题长度超过256个字符、消息属性长度超过65536个字符则拒绝该消息写入2、如果消息的延迟级别大于0 ,将消息的原主题名称与原消息队列 ID 存入消息属 性中,用延迟消息主题 SCHEDULE TOPIC 、消息队列 ID 更新原先消息的主题与队列,这是并发消息消费重试关键的一步3、获取当前可以写入的commitLog文件:Comm...原创 2020-01-17 15:39:02 · 1856 阅读 · 0 评论 -
RocketMQ-消息发送(三)、消息发送异常机制
消息发送高可用主要通过两个手段重试与Broker 规避。首先消息发送端采用重试机制 ,由 retryTimesWhenSendFailed 指定同步方式重试次数,异步重试机制在收到消息发送结构后执行回调之前进行重试。由retryTimes WhenSendAsyncFailed 指定,接下来就是循环执行,选择消息队列 、发送消息,发送成功则返回,收到异常则重试。选择消息队列有两种方式send...原创 2020-01-17 15:29:34 · 1728 阅读 · 0 评论 -
RocketMQ-消息发送(二)、消息队列负载机制
消息生产者启动之后,我们就可以按照需要发送消息了,消息发送之前,首先需要获取主题的路由信息,只有获取了这些信息我们才知道消息要发送到具体的Broker节点。查找主题的路由信息tryToFindTopicPublishlnfo 是查找主题的路由信息的方法。如果生产者中缓存了 topic 的路由信息,如果该路由信息中包含了消息队列,则直接返回该路由信息,如果没有缓存 或没有包含消息队列, 则向 N...原创 2020-01-17 15:19:07 · 693 阅读 · 0 评论 -
RocketMQ-消息发送(一)、消息生产者启动流程
RocketMQ 支持 3种消息发送方式 :同步(sync)、 异步(async)、单向( oneway )。同步:发送者向 MQ 执行发送消息 API 时,同步等待,直到消息服务器返回发送结果。异步:发送者向 MQ 执行发送消息 API 时,指定消息发送成功后的回掉函数,然后调 用消息发送 API 后,立即返回,消息发送者线程不阻塞 ,直到运行结束,消息发送成功或失败的回调任务在一个新的线程...原创 2020-01-17 14:55:49 · 477 阅读 · 0 评论 -
RocketMQ之消息存储篇(一):Java也能做高性能存储?
一、RocketMQ存储概要设计RMQ主要存储的文件包括commitlog文件、consumeQueue文件、IndexFile文件。CommitLog是消息存储文件,所有消息主题的消息都存储在CommitLog文件中;ConsumeQueue是消息消费队列文件,消息达到commitlog文件后将被异步转发到消息消费队列,供消息消费者消费;IndexFile是消息索引文件,主要存储的是key和...原创 2019-03-01 15:39:57 · 909 阅读 · 0 评论 -
RocketMQ之Producer篇:可靠的消息传输
一、消息数据结构RMQ的消息封装在org.apache.rocketmq.common.message类中,属性: private String topic; //消息所属topic private int flag; //消息flag private Map<String, Strin...原创 2019-02-28 10:35:21 · 1624 阅读 · 1 评论 -
RocketMQ之源码环境篇:搭建Debug环境
源码地址:https://github.com/apache/incubator-rocketmq导入方式:因为源码托管在git上,使用git命令行导入或者IDE导入都是很方便的,这里就不赘述,我用eclipse直接导入后的源码结构如下:运行环境:现在直接调试源码肯定是不行的,需要做一些代码的修改:1、org.apache.rocketmq.namesrv.NamesrvStart...原创 2019-02-17 10:48:05 · 544 阅读 · 0 评论 -
RocketMQ之Namesrv篇:优雅的服务管理
Namesrv就是RMQ中的路由服务,相当于ZK在Kafka中的作用,实现了路由管理、服务注册、服务发现等功能。一、功能接收broker的请求注册broke路由信息(包括master和slave):broker启动时向所有NameSrv注册,Producer在发送消息前先从Namesrv获取Broker服务器地址列表,通过负载算法选择对应服务器进行消息发送。Namesrv与每台broker保...原创 2019-02-17 10:49:01 · 4696 阅读 · 0 评论 -
Redis学习小结
什么是RedisRedis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis特性更多的数据结构Redis支持的数据格式有String、List、Set、Sorted Set、Hash。这里的区别用一张表阐述: 持久化Redis将数据存储于内存中,或被配置为使用虚拟内存。Redis的所有数据都是保存原创 2017-11-16 09:47:03 · 226 阅读 · 0 评论