small-rpc 框架(一)-项目结构
项目结构
- hello-api: 接口
- urpc-example-client: 客户端
- urpc-example-server: 服务端
- urpc-frame-annotation: 注解依赖
- urpc-frame-core: 核心包
流程
- 注册中心启动
- RPC服务注册
- RPC客户端服务调用
目标
- 注册中心使用 zookeeper 实现 RPC服务过程
urpc-frame 最外层
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<version>1.0-SNAPSHOT</version>
<groupId>org.example.urpc</groupId>
<artifactId>urpc-frame</artifactId>
<packaging>pom</packaging>
<name>urpc-frame</name>
<url>http://maven.apache.org</url>
<modules>
<module>urpc-example-client</module>
<module>urpc-example-server</module>
<module>urpc-frame-core</module>
<module>hello-api</module>
<module>urpc-frame-annotation</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
hello-api
接口定义,这里比较简单
@URpcClient(value = "mic-hello")
public interface HelloService {
String hello(Hello hello);
Hello hello2(Hello hello);
}
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Builder
@ToString
public class Hello implements Serializable {
private String message;
private String description;
}
maven的xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.example.urpc</groupId>
<artifactId>urpc-frame</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>hello-api</artifactId>
<name>hello-api</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.example.urpc</groupId>
<artifactId>urpc-frame-annotation</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
urpc-frame-annotation
rpc 相关注解定义, 接口在定义的时候需要依赖这个包,比如hello-api
/**
* @Date: 2024/8/23 16:01
* rpc 服务依赖注入
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface URpcAutowired {
}
/**
* @Date: 2024/8/23 16:01
* 客户端获取服务名称
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface URpcClient {
/**
* 服务名称
* @return
*/
String value();
}
/**
* @Date: 2024/8/23 16:01
* 服务器端 rpc服务实现
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface URpcService {
}
maven xml 配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example.urpc</groupId>
<artifactId>urpc-frame</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>org.example.urpc</groupId>
<artifactId>urpc-frame-annotation</artifactId>
<packaging>jar</packaging>
<name>urpc-frame-annotation</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>