中间件
文章平均质量分 72
不务正业的攻城狮
这个作者很懒,什么都没留下…
展开
-
手写RPC(十) 优化
经过了前面的九节(千难万阻)我们终于拿到了想要的结果,但是这就结束了吗?作为一个合格的程序员,一定要学会对需求说不!,呃,这也没喝酒呀,怎么就吐真言了呢?作为一个合格的程序员,一定要学会对不好的代码说不!。比如我们服务端收到请求以后,反射调用方法时生成对象的时候需要依赖相关的配置(META-INF/services),每次调用都会生成一个新的对象(clz.newINSTANCE()) ,作为一个有追求的程序员。这怎么能忍!spring的作用之一不就是管理bean的生命周期么?说干就干!父pom.xm原创 2021-12-10 07:15:00 · 503 阅读 · 0 评论 -
手写RPC(九) 测试
编写测试方法:package com.info.consumer;import com.info.api.Animal;public class ConsumerApplication { public static void main(String[] args) { ClientProxy proxy = new ClientProxy(); Animal animal = proxy.clientProxy(Animal.class, "localh原创 2021-12-09 07:15:00 · 494 阅读 · 0 评论 -
关于 LengthFieldBasedFrameDecoder 不得不说的事
LengthFieldBasedFrameDecoder 是什么?LengthFieldBasedFrameDecoder对于不经常接触netty 的人来说可能有些陌生,但是对于经常使用netty的人来说,对它一定不陌生。A decoder that splits the received ByteBufs dynamically by the value of the length field in the message. It is particularly useful when you de原创 2021-12-09 07:15:00 · 2041 阅读 · 15 评论 -
手写RPC(八) provider、consumer 实现
首先,我们的provider是需要提供rpc服务的,而我们 rpc底层是需要依赖netty的,因此我们需要依赖我们已经编写好的rpc-protocol模块。rpc-provider模块 pom.xml文件添加 <dependency> <groupId>com.info</groupId> <artifactId>rpc-protocol</artifactId> <version>1.0-原创 2021-12-08 07:15:00 · 1612 阅读 · 2 评论 -
手写RPC(七) 核心模块网络协议模块编写 ---- 实现客户端
相对服务端,客户端的实现就简单了许多,因为编码器已经实现好了,实现客户端的处理器:package com.info.core;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.SimpleChannelInboundHandler;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class CustomClientHandler extends SimpleC原创 2021-12-07 07:00:00 · 286 阅读 · 0 评论 -
手写RPC(六) 核心模块网络协议模块编写 ---- 实现编解码器
前面的基础已经写好了,现在我们来实现编码器。为什么需要编码器?netty只负责传输数据,至于数据长什么样它是不关注的。前面也提到了自定义协议就是把我们要传输的数据按照我们的规则进行组织、传输、解码,编码器就是对我们要发送的数据进行组织的作用。netty已经为我们做好了封装,我们只需要集成MessageToByteEncoder实现其encode方法即可,然后把这个编码器添加到我们netty处理器的pipeline(流水线)即可。package com.info.protocol.netty.core原创 2021-12-06 18:45:00 · 1006 阅读 · 0 评论 -
手写RPC(五) 核心模块网络协议模块编写 ---- 自定义协议
自定义协议?第一次听到这个名词的时候,感觉好高大上!后面学习了这块类容以后,发现也就那样,所谓的自定义协议,就是自己定义一套数据传输的规则。这么说你不一定明白我们知道只有二进制才能在网络中传输,所以 RPC 请求在发送到网络中之前,他需要把方法调用的请求参数转成二进制但,在传输过程中,RPC 并不会把请求参数的所有二进制数据整体一下子发送到对端机器上,中间可能会拆分成好几个数据包,也可能会合并其他请求的数据包(合并的前提是同一个 TCP 连接上的数据),至于怎么拆分合并,这其中的细节会涉及到系统参数原创 2021-12-05 12:13:06 · 1838 阅读 · 0 评论 -
手写RPC(四) 核心模块网络协议模块编写 ---- netty服务端
从哪下手?接上一节的内容,两个最单的模块我们已经编码完成,现在开始正餐,但是从哪下手呢?前面我们提到,数据经过网络传输需要有一个序列化 反序列化的过程,那不妨就从序列化开始,因为目前知识写一个乞丐版,暂不考虑不同序列化方式对rpc性能以及传输是否压缩数据等问题,本着能简就减的原则,直接使用jdk自带的序列化方法,余下的后期再调整。先看看pom文件,rpc-protocol pom.xml<?xml version="1.0" encoding="UTF-8"?><project原创 2021-12-04 14:55:49 · 312 阅读 · 0 评论 -
常见MQ的选择
MQ(Message Queue)消息队列,指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递。现代系统中或多或少都会用到MQ,同时MQ作为分布式系统中的重要组件,也是面试必问的考点之一。消息队列的使用场景主要包括以下几点:一、异步处理一个核心多步骤的流程可以把多个步骤拆分出来分为核心的和非核心步骤,一个情况过来可以先处理核心步骤(扣减库存),然后通过消息队列来处理余下的非核心步骤(生成订单、发送短信),同步处理的流程大大缩短,可以极大的提高系统的请求的响应时间和系统的吞吐量。二、流量控原创 2021-11-15 15:23:40 · 732 阅读 · 0 评论