2024年3月6日
该文所涉及的 RocketMQ 源码版本为 4.9.3。 RocketMQ ConsumeQueue 详解 RocketMQ 基于主题订阅模式实现消息消费,消费者关注每一个主题下的所有消息,但是同一主题下的消息是不连续地存储在 CommitLog 文件中的,如果消费者直接从消息存储文件中遍历查找主题下的消息,效率会特别低。所以为了在查找消息的时候效率更高一些,设计了 ConsumeQueue 文件,可以……
阅读全文
2024年3月6日
该文所涉及的 RocketMQ 源码版本为 4.9.3。 RocketMQ 消息消费流程 拉取消息 成功之后 会调用 org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService#submitConsumeRequest 组装 消费消息 请求 获取 consumeMessageBatchMaxSize,表示一个 ConsumeRequest 包含的消息 数量,默认为 1 入参 msgs 为拉取消息的最大值,默认为 32 如果 msgs 小于等于 consumeMessageBatchMaxSiz……
阅读全文
2024年3月6日
该文所涉及的 RocketMQ 源码版本为 4.9.3。 RocketMQ CommitLog 详解 commitlog 目录主要存储消息,为了保证性能,顺序写入,每一条消息的长度都不相同,每条消息的前面四个字节存储该条消息的总长度,每个文件大小默认为 1G,文件的命名是以 commitLog 起始偏移量命名的,可以通过修改 broker 配置文件中 mappedFileSizeCommitLog 属性改变文件大小 1、获取最小偏移量 org.apache.rocketmq.store.CommitLog#getMinOffset 1……
阅读全文
2024年3月6日
Nacos 服务注册 nacos-spring-boot-project 中有关服务注册的几个项目 nacos-discovery-spring-boot-actuator nacos-discovery-spring-boot-autoconfigure nacos-discovery-spring-boot-starter 1 2 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.alibaba.boot.nacos.discovery.autoconfigure.NacosDiscoveryAutoConfiguration 找到类 NacosDiscoveryAutoConfiguration 1 2 3 4 5 6 7 8 9 10 11 12 13 @ConditionalOnProperty(name = NacosDiscoveryConstants.ENABLED, matchIfMissing = true) @ConditionalOnMissingBean(name = DISCOVERY_GLOBAL_NACOS_PROPERTIES_BEAN_NAME) @EnableNacosDiscovery @EnableConfigurationProperties(value = NacosDiscoveryProperties.class) @ConditionalOnClass(name = "org.springframework.boot.context.properties.bind.Binder") public class NacosDiscoveryAutoConfiguration { @Bean public NacosDiscoveryAutoRegister discoveryAutoRegister() { return new NacosDiscoveryAutoRegister(); } } 注解:EnableNacosDiscovery 1 2 3 4 5 @Target({ ElementType.TYPE, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(NacosDiscoveryBeanDefinitionRegistrar.class) public @interface EnableNacosDiscovery {} import 类 :NacosDiscoveryBeanDefinitionRegistrar 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26……
阅读全文
2024年3月6日
一个简单的 Servlet 容器代码设计 Servlet 算是 Java Web 开发请求链路调用栈中底层的一个技术,当客户端发起一个请求后,到达服务器内部,就会先进入 Servlet(这里不讨论更底层的链路),SpringMVC 的请求分发核心也是一个 Servlet,名叫DispatcherServlet,一个请求首先会进入到这……
阅读全文
2024年3月6日
一个简单的 Web 服务器代码设计 在这篇博客中,我们将介绍如何使用 Java 编写一个简单的 Web 服务器。这个 Web 服务器可以接收客户端的 HTTP 请求,并返回一个静态的 HTML 页面。 1. 代码设计 首先,我们需要创建一个 WebServer 类,这个类将负责接收客户端的请求,并返回响应。以下是 WebServer 类的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19……
阅读全文
2024年3月6日
Servlet 容器详解 Servlet 容器是 Java Web 应用程序的核心组件之一。它负责管理 Servlet 的生命周期、请求分发、会话跟踪等任务。在这篇博客中,我们将详细介绍 Servlet 容器的工作原理和常见实现。 1. Servlet 容器的工作原理 Servlet 容器的工作原理如下: 接收客户端请求:Servlet 容器监听一个或多个端口,等待客户端的请求。 解析请求:Ser……
阅读全文
2024年3月6日
Servlet 基础 Servlet 简介 Servlet(Server Applet)是 J2EE 的内容之一,由 Java 编写的服务器端小程序。它是 web 请求的入口,主要功能在于交互式地(Request 和 Response)浏览和修改数据,生成动态 Web 内容。Servlet 运行于支持 Servlet 的 WEB 容器中,如 Tomcat。从实现上讲,Servle……
阅读全文
2024年3月6日
Spring Security 请求全过程解析 Spring Security 是一款基于 Spring 的安全框架,主要包含认证和授权两大安全模块,和另外一款流行的安全框架 Apache Shiro 相比,它拥有更为强大的功能。Spring Security 也可以轻松的自定义扩展以满足各种需求,并且对常见的 Web 安全攻击提供了防护支持。如果你的 Web 框架选择的是 Spring,那么在安全方面 Spring Security 会……
阅读全文
2024年3月6日
Spring Security 自定义用户认证 在Spring Boot 中开启 Spring Security一节中我们简单地搭建了一个 Spring Boot + Spring Security 的项目,其中登录页、用户名和密码都是由 Spring Security 自动生成的。Spring Security 支持我们自定义认证的过程,如使用自定义的登录页替换默认的登录页,用户信息的获取逻辑、登录成功或失败后的处理逻辑等。这里……
阅读全文