个人简介

Echo Blog


江湖无名 安心练剑
  • 基于 netty4 手写 rpc-17-interceptor 拦截器
    拦截器 说明 有时候我们需要统计方法的耗时,需要知道统计出参/入参的相关信息。 通过拦截器都可以非常方便的实现。 设计思路 无论是客户端还是服务端,只需要在方法执行前后,加入拦截器相关的方法调用,加入对应的上下文信息即可。 客户端实现 个人理解 目前主要在客户端添加拦截器,其实服务端是类似的。 代码实现 接口定义 package com.github.houbb.rpc...
    2018-08-24 08:23:15 | Java
  • 基于 netty4 手写 rpc-16-gracefully shutdown 优雅关闭
    优雅摘除服务 说明 我觉得这可以说是 rpc 最需要的一个功能。 因为他的实际意义非常重大,就是可以任意时间发布应用,而对业务无损。 以前发布应用都要等到半夜,很累也容易出问题。 思路 结合 java 的 ShutdownHook 以及 linux 的 kill PID 来达到这个目的。 ShutdownHook 讲解 服务提供方 停止时,先标记为不接收新请求,...
    2018-08-24 08:23:15 | Java
  • 基于 netty4 手写 rpc-15-generic 泛化调用
    generic 泛化调用 说明 泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现。 GenericService barService = (GenericService) applicationContext....
    2018-08-24 08:23:15 | Java
  • 基于 netty4 手写 rpc-14-fail 失败策略
    fail 失败策略 说明 当我们调用服务失败的时候,有很多策略。 比如: FailFast 快速失败 FailOver 尝试下一次调用 等等其他各种策略。 实现思路 不同的失败策略方式只是处理失败的方式不同而已。 这个主要放在客户端,当调用失败的时候,重新进行尝试即可。 代码实现 接口 首先,是失败策略的接口定义。 package com.git...
    2018-08-24 08:23:15 | Java
  • 基于 netty4 手写 rpc-13-callType 调用方式
    callType 调用方式 说明 不同的场景我们会希望有不同的调用方式。 常见的有三种调用方式: (1)sync 同步调用 (2)async 异步调用 (3)oneWay 单向调用 个人感觉(1)(3)是最常见的需求,所以本次优先实现了这两种。 实现思路 不同的调用方式只是处理的行为不同而已。 可以将这个配置传递,分别在 client/server 的端进行相应的处理。 ...
    2018-08-24 08:23:15 | Java
  • 基于 netty4 手写 rpc-12-load balance 负载均衡
    load balance 当我们有多个服务端时,就需要负载均衡进行选择。 策略 负载均衡的策略有很多,比如随机选择,权重选择,最小负载等等。 实现思路 直接将所有可以选择的服务端列举出来,通过实现对应的策略,选择一个即可。 代码实现 接口 为了便于拓展,我们定义一个接口。 /* * Copyright (c) 2019. houbinbin Inc. * rpc Al...
    2018-08-24 08:23:15 | Java
  • 基于 netty4 手写 rpc-11-register center 注册中心
    register 注册中心 上一节我们实现了 register 注册中心的基本实现,当然客户端和服务端也需要相关的实现调整。 服务端 ServiceRegistry 接口 调整如下: package com.github.houbb.rpc.server.registry; /** * 服务注册类 * (1)每个应用唯一 * (2)每个服务的暴露协议应该保持一致 * 暂...
    2018-08-24 08:23:15 | Java
  • 基于 netty4 手写 rpc-10-register center 注册中心
    register 注册中心 需求 服务的注册与发现,是一个很常见也很有用的需求。 可以让我们不关心服务端的 ip 信息,只关心服务本身。 思路 实现的方式 SimpleRpcRegister 为 rpc 提供的默认实现方案。 实际可以结合 redis,zk 等常见的成熟框架实现。 其实可以把 register 当做是服务端,此时的 server/client 都是客户端。 ...
    2018-08-24 08:23:15 | Java