Netty
文章平均质量分 72
雨夜归人93
这个作者很懒,什么都没留下…
展开
-
手打RPC-终篇
继续上篇内容,作为最终章,对项目结构进行说以及测试运行效果。项目结构介绍测试效果首先启动nacos如果nacos启动不是standalone模式,文本修改startup.cmd里面的 MODE=“standalone”接着启动consumer,以及provider访问http://localhost:8081/doc.html,进行测试日志拦截器日志请求参数项目详细代码参考...原创 2022-04-27 17:11:08 · 281 阅读 · 0 评论 -
手打RPC- 拦截器与负载均衡
继续上篇内容,本篇讲解三部分内容,分别是拦截器,负载均衡,以及服务降级。一. 拦截器定义RpcFilter 接口,提供对请求对象和响应对象的处理public interface RpcFilter { Object filterRequest(Object params); Object filterResponse(Object result); /** * 是否支持服务端过滤 * @return */ default boolea原创 2022-04-27 16:41:14 · 320 阅读 · 0 评论 -
手打RPC-注册订阅服务
继续上篇内容,本篇讲解注册订阅相关内容。本例中的RPC注册服务采用应用级服务,一个应用只向注册中心注册一个实例。相比方法级的注册,减少大量的注册信息,便于服务总量能进行估算等。一. 选择注册中心这里注册中心选用Nacos,为啥选用nacos呢?nacos 有良好的中文文档可以当作配置中心和注册中心较好的后台可视化界面客户端选择了2.x版本, 引入依赖, <properties> <nacos-client.version>2.0原创 2022-04-27 16:13:12 · 199 阅读 · 0 评论 -
手打RPC-动态注入服务
继续上篇内容,本篇讲解服务启动时,动态注入相关的实例。一.自定义注解自定义的注解分为三部分:容器启动时,自动注入配置的注解服务端注入服务提供者的注解消费端启动引用服务提供者的注解@EnableRainRpc 自动扫包,引入一些默认配置,以及注入RainRpcComponentScanRegistrar,使注解了@RainProvider, @RainConsumer 的类生效。@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNT原创 2022-04-27 11:43:51 · 511 阅读 · 0 评论 -
手打RPC-构建一个通信核心
本篇开始准备手打一个简易的RPC框架。主要实现功能:序列化通信自定义通信协议,进行rpc序列化以及反序列化动态注入服务启动自动注入消费者以及提供者注册中心注册中心获取服务,并监听服务变化拦击器功能提供请求响应拦截功能,提供扩展接口负载均衡实现客户端对服务的负载均衡功能整体流程如下:本章主要实现序列化功能,这里以Netty为核心进行构建。一.pom依赖jdk为1.8,pom 文件依赖如下: <properties> <netty-ver原创 2022-04-26 20:06:37 · 1071 阅读 · 0 评论 -
切片Netty-SingleThreadEventExecutor
Netty源码分析基于主流的Netty4.x版本。之前文章中经常出现如下代码channel.eventLoop().execute(()->{})本文就来分析下,execute都做了哪些操作。 public void execute(Runnable task) { ... // 当前线程是否是eventLoop关联的线程 // 这里返回false,可能是线程不一致或者是EventLoop还未关联线程 boolean inE原创 2021-07-08 21:45:05 · 339 阅读 · 0 评论 -
切片Netty-doBind0
Netty源码分析基于主流的Netty4.x版本。承接上篇的initAndRegister,本篇主要看看bind方法里面doBind0。原创 2021-07-07 16:36:33 · 85 阅读 · 0 评论 -
切片Netty-initAndRegister
Netty源码分析基于主流的Netty4.x版本。继续围绕之前demo,本篇主要看看bind方法里面initAndRegister。一.doBind流程概述略过中间跳转,进入AbstractBootstrap的doBind方法private ChannelFuture doBind(final SocketAddress localAddress) { // 初始化配置并注册 final ChannelFuture regFuture = initAndRegister();原创 2021-07-06 22:52:53 · 119 阅读 · 0 评论 -
切片Netty-NioEventLoopGroup
本文基于Netty4.x版本一. 从New一个对象开始1.NioEventLoopGroup构造接前文的demo,NioEventLoopGroup parentGroup = new NioEventLoopGroup();密密麻麻的构造函数,挑一个最全的构造 public NioEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory,原创 2021-07-05 18:32:48 · 112 阅读 · 0 评论 -
切片Netty-序言
Netty源码分析基于主流的Netty4.x版本。一. Netty模型目前IO模型分为BIO,NIO,AIO三种BIO为堵塞模型NIO模型基于IO多路复用技术AIO模型是真正的异步非堵塞的模型以去营业厅办事为例:BIO 要求你一直在营业厅排队等待,啥事也没法做,直到处理完。NIO 是营业厅改进了服务,提供了播报系统,广播提醒你去办事,期间可以坐在椅子上打打Netty 4.x线程模型基于reactor模型,这是基于NIO模型的技术。reactor模型有可以分为单线程模型,多线程模型,主原创 2021-07-05 17:46:28 · 240 阅读 · 0 评论 -
浅析FastThreadLocal
FastThreadLocal是啥?它本质上还是一个ThreadLocal。但从它的名称,可以知道它比普通的ThrealLocal要快。构造函数实例FastThreadLocal时,获取一个在InternalThreadLocalMap中的索引标识。InternalThreadLocalMap就是一个挂羊头卖狗肉的,内部使用一个数组存数据。 // 用于标志在InternalThreadLocalMap的位置 private final int index; public FastThr原创 2020-12-13 19:33:33 · 855 阅读 · 0 评论