摘要: 当Broker收到生产者的消息发送请求时,会对请求进行处理,从请求中解析发送的消息数据,接下来以单个消息的接收为例,看一下消息的接收过程。 数据校验 封装消息 首先Broker会创建一个MessageExtBrokerInner对象封装从请求中解析到的消息数据,它会将Topic信息、队列ID、消息内 阅读全文
posted @ 2023-08-21 22:38 shanml 阅读(541) 评论(0) 推荐(1) 编辑
摘要: RocketMQ是通过DefaultMQProducer进行消息发送的,它实现了MQProducer接口,MQProducer接口中定义了消息发送的方法,方法主要分为三大类: send同步进行消息发送,向Broker发送消息之后等待响应结果; send异步进行消息发送,向Broker发送消息之后立刻 阅读全文
posted @ 2023-08-16 21:51 shanml 阅读(261) 评论(0) 推荐(3) 编辑
摘要: 最近在看面试题,所以想用自己的理解总结一下,便于加深印象。 为什么使用多线程 使用多线程可以充分利用CPU,提高CPU的使用率。 提高系统的运行效率,对于一些复杂或者耗时的功能,可以对其进行拆分,比如将某个任务拆分了A、B、C三个子任务,如果子任务之间没有依赖关系,那么就可以使用多线程同时运行A、B 阅读全文
posted @ 2023-08-02 23:38 shanml 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 最近在使用fastjson的`JSONObject.toJSONString()`方法将bean对象转为字符串的时候报如下错误: com.alibaba.fastjson.JSONException: write javaBean error, fastjson version 1.2.58, class com.sun.proxy.$Proxy395, fieldName : 0 Caused by: java.lang.NullPointerException: null 阅读全文
posted @ 2023-07-29 22:32 shanml 阅读(2299) 评论(0) 推荐(0) 编辑
摘要: @RequestBody注解可以用于POST请求接收请求体中的参数,使用方式如下: ``` java @Controller public class IndexController { @PostMapping(value = "/submit", produces = MediaType.APP 阅读全文
posted @ 2023-07-21 23:16 shanml 阅读(1087) 评论(0) 推荐(2) 编辑
摘要: NameServer是一个注册中心,提供服务注册和服务发现的功能。NameServer可以集群部署,集群中每个节点都是对等的关系(没有像ZooKeeper那样在集群中选举出一个Master节点),节点之间互不通信。 服务注册 Broker启动的时候会向所有的NameServer节点进行注册,注意这里 阅读全文
posted @ 2023-05-25 23:29 shanml 阅读(496) 评论(0) 推荐(1) 编辑
摘要: 之前一直以为固态硬盘各方面都比机械硬盘性能高,所以首选固态硬盘,直到看了极客时间-深入浅出计算机组成原理中硬盘相关章节的内容,才发现固态硬盘原来是有缺点的,所以这里来做一个总结。 机械硬盘(HDD) 机械硬盘由以下几个部分组成: 盘面:盘面(盘片)上有一层磁性涂层,数据就是存储在这个磁性的涂层上,一 阅读全文
posted @ 2023-04-09 21:51 shanml 阅读(673) 评论(0) 推荐(0) 编辑
摘要: 消息存储 在 【RocketMQ】消息的存储一文中提到,Broker收到消息后会调用CommitLog的asyncPutMessage方法写入消息,在DLedger模式下使用的是DLedgerCommitLog,进入asyncPutMessages方法,主要处理逻辑如下: 调用serialize方法 阅读全文
posted @ 2023-02-26 22:23 shanml 阅读(357) 评论(1) 推荐(1) 编辑
摘要: MySQL隔离级别 读未提交(Read Uncommitted):某个事务读到了其他还未提交的事务对数据所作的修改,也就是某个事务只要修改了数据,其他事务就可以看到所作的修改。 这种隔离级别下会发生脏读、不可重复读、幻读。 读提交(Read Committed):某个事务提交之后,才可以被其他事务看 阅读全文
posted @ 2023-02-25 10:57 shanml 阅读(836) 评论(0) 推荐(0) 编辑
摘要: RocketMQ 4.5版本之前,可以采用主从架构进行集群部署,但是如果master节点挂掉,不能自动在集群中选举出新的Master节点,需要人工介入,在4.5版本之后提供了DLedger模式,使用Raft算法,如果Master节点出现故障,可以自动选举出新的Master进行切换。 Raft协议 R 阅读全文
posted @ 2023-02-15 22:35 shanml 阅读(482) 评论(0) 推荐(0) 编辑