自己动手实现一个轻量级的RPC框架
前言
最近学习RPC的时候,自己手动写了一个简易的RPC框架,详细代码可见GitHub:https://github.com/Jeysin/RPC。以下是这个项目的README:
简介
Java语言编写的一个轻量级的RPC框架,基于TCP协议,与SpringBoot集成,让远程调用像本地调用一样便捷。
特性
- 与SpringBoot无缝衔接,实现RPC调用过程对用户无感知。并基于Java的注解与反射机制,实现对业务代码无侵入性的RPC调用。
- 服务的发布端底层利用线程池,可实现将不同的服务发布在不同的端口以供调用,当然了,更常用的方式是将不同的服务发布在同一个端口。
- 服务的调用端底层采用JDK动态代理技术,对用户屏蔽发起远程调用的细节,让远程调用像本地调用一样简单。
用法示例
1、下载编译,打成jar包,放入本地maven库中。
2、在服务发布端和调用端的pom.xml文件中都添加如下依赖:
<dependency>
<groupId>com.jeysin</groupId>
<artifactId>RPC</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3、定义一个需要发布的接口,例如:
package com.jeysin;
public interface HelloWorldService {
String sayHello(String name);
}
4、在服务的发布端实现这个接口,并使用@RPCProvider注解发布这个服务:
package com.jeysin.impl;
import com.jeysin.HelloWorldService;
import com.jeysin.rpc.annotation.RPCProvider;
/**
* @Author: Jeysin
* @Date: 2019/2/24 21:54
* @Desc:
*/
@RPCProvider(serviceInterface = HelloWorldService.class, serviceGroup = "RPC", serviceVersion = "1.0.0.DAILY", clientTimeout = 3000)
public class HelloWorldServiceImpl implements HelloWorldService {
public String sayHello(String name) {
return "Hello, " + name;
}
}
5、在服务的调用端利用@RPCConsumer注解实现服务的调用:
package com.jeysin.controller;
import com.jeysin.HelloWorldService;
import com.jeysin.rpc.annotation.RPCConsumer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: Jeysin
* @Date: 2019/2/24 22:07
* @Desc:
*/
@RestController
public class ConsumerController {
@RPCConsumer(serviceGroup = "RPC", serviceVersion = "1.0.0.DAILY", host = "localhost", port = 8090, clientTimeout = 3000)
private HelloWorldService helloWorldService;
@RequestMapping(value = "/sayhello", method = RequestMethod.GET)
String sayHello(@RequestParam String name){
//发起远程调用
return helloWorldService.sayHello(name);
}
}
分类:
中间件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现