摘要:
使用 netty,在业务层我们通常是调用 channel.write 或 channel.writeAndFlush,但是代码一路跟下来,没有发现加锁动作。 原因是,netty 在创建 channel 的时候,为每个 channel 分配一个 IO 线程,为每个 handler 分配一个业务线程,所 阅读全文
摘要:
以 nacos StatefulSet 的部署为例 pod 的名字分别是 nacos-0,nacos-1,nacos-2 进入容器查看 /etc/hosts 文件 kubectl exec -it nacos-0 --container k8snacos -- /bin/bash cat /etc/ 阅读全文
摘要:
java 中的对象,请求和响应都是一个 RemotingCommand 对象。 RemotingCommand code 请求码,请求码/响应码 CommandCustomHeader 对应的请求头 byte[] 请求体,非必需 如下是一个 RegisterBrokerRequestHeader 对 阅读全文
摘要:
demo public class ByteBufferTest { /** * 1. ByteBuffer 分为 2 种,HeapByteBuffer 和 DirectByteBuffer,即堆内和堆外 * 2. ByteBuffer 的使用,就是 put 和 get,同时伴随着移动 postit 阅读全文
摘要:
java 引用分为强,软,弱,虚 强引用,即平常创建对象得到的引用,如果一个对象存在强引用,它是不会被 GC 回收的。 但是如果一个对象只有软引用或弱引用,则当发生 GC 时 软引用:如果内存不足,则回收 弱引用:不管内存是否充足,回收 这里主要总结下弱引用的使用方法:弱引用对象被回收时,对象被回收 阅读全文
摘要:
DefaultMQPushConsumerImpl 拉取消息,放入 processQueue 的 TreeMap 中 // org.apache.rocketmq.client.impl.consumer.DefaultMQPushConsumerImpl#pullMessage boolean d 阅读全文
摘要:
producer 在发送消息的时候,会生成一个 "唯一" 的 msgId,broker 会为这个 msgId 创建哈希索引 UNIQ_KEY 由客户端生成 org.apache.rocketmq.common.message.MessageClientIDSetter#createUniqID ms 阅读全文
摘要:
netty 是用 Recycler 实现对象池。 每个线程有一个 ThreadLocalMap 变量,ThreadLocalMap 本质是一个哈希表,用 index + 1 来避免槽冲突,键是 ThreadLocal 变量,值是尖括号里的对象。netty 里面大量使用 ThreadLocal,目的是 阅读全文
摘要:
linux 分用户态和内核态,两者权限不一样,逻辑地址空间不一样 以 write 为例,用户程序可能是把数据写入了自己的缓冲区,然后把用户进程缓冲区的数据拷入内核缓冲区,再刷到磁盘 read 则是,把内核缓冲区的数据拷入用户进程缓冲区,再从用户进程缓冲区取出数据 而对于零拷贝: mmap 针对文件 阅读全文
摘要:
// org.apache.rocketmq.store.AllocateMappedFileService // 创建 MappedFile 的请求 static class AllocateRequest implements Comparable<AllocateRequest> { // F 阅读全文