# artemis-rpc
**Repository Path**: zbwq/artemis-rpc
## Basic Information
- **Project Name**: artemis-rpc
- **Description**: 基于Netty的轻量级RPC框架,使用Zookeeper作为注册中心,Kryo作为序列化工具。
- **Primary Language**: Java
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 2
- **Created**: 2019-05-05
- **Last Updated**: 2025-02-17
## Categories & Tags
**Categories**: rpc
**Tags**: None
## README
# 基于 Netty 的轻量级 RPC 框架 artemis-rpc 使用说明
当前版本:0.3.5
#### 介绍
artemis-rpc 是基于 Netty 的轻量级 RPC 框架,使用 Kryo 框架进行序列化和反序列, 使用 Zookeeper 作为注册中心。
## 定义 RPC 接口
> 参见 artemis-demo-api 模块
```java
public interface DemoService {
Demo loadDemo (String id );
}
```
需要将 RPC 接口与 RPC 实现分别存放在不同的模块中
## 发布 RPC 服务
> 参见 artemis-demo-provider 模块
### 第一步:添加 Maven 依赖
#### pom.xml
```xml
kim.artemis
artemis-demo-api
${artemis.version}
kim.artemis
artemis-core
${artemis.version}
```
- RPC Demo Api: RPC 接口所在模块的依赖
- RPC Core:RPC 服务端的依赖
### 第二步:实现 RPC 接口
```java
@Slf4j
@ArtemisRpcService
public class DemoServiceImpl implements DemoService {
@Override
public String demo(String str) {
log.info(">>>>>>> 调用成功");
return str.concat(" 调用成功");
}
}
```
- 必须用 ArtemisRpcService 注解中指定 RPC 接口
### 第三步:配置 RPC 服务端
```java
@Configuration
public class ArtemisConfiguration {
private String address = "127.0.0.1:2181";
@Bean
public ArtemisRpcServerFactory artemisRpcServerFactory () {
ArtemisRpcServerFactory artemisRpcServerFactory = new ArtemisRpcServerFactory();
artemisRpcServerFactory.setRegistry("Zookeeper");
artemisRpcServerFactory.setAddress(address);
artemisRpcServerFactory.setPort(19427);
return artemisRpcServerFactory;
}
}
```
### 第四步:启动 RPC 服务
```java
@SpringBootApplication
public class ArtemisDemoProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ArtemisDemoProviderApplication.class, args);
}
}
```
先启动 Zookeeper
然后运行 ArtemisDemoProviderApplication 类,将对外发布 RPC 服务,同时向 Zookeeper 进行服务注册
## 调用 RPC 服务
> 参见 artemis-demo-consumer 模块
### 第一步:添加 Maven 依赖
#### pom.xml
```xml
kim.artemis
artemis-demo-api
${artemis.version}
kim.artemis
artemis-core
${artemis.version}
```
- RPC Common API:RPC 接口所在模块的依赖
- RPC Core:RPC 客户端框架的依赖
### 第二步:配置 RPC 消费者端
```java
@Configuration
public class ArtemisConfiguration {
private String address = "192.168.0.102:2181";
@Bean
public ArtemisRpcClientFactory artemisRpcClientFactory () {
ArtemisRpcClientFactory artemisRpcClientFactory = new ArtemisRpcClientFactory();
artemisRpcClientFactory.setRegistry("Zookeeper");
artemisRpcClientFactory.setAddress(address);
return artemisRpcClientFactory;
}
}
```
### 第三步:调用 RPC 服务
```java
@RestController
public class DemoController {
@ArtemisRpcReference()
DemoService demoService;
@GetMapping("/demo")
public String demo (String id) {
long startTime = System.currentTimeMillis();
Demo demo = demoService.loadDemo(id);
long endTime = System.currentTimeMillis();
long timeLong = endTime - startTime;
double timeDouble= Double.parseDouble(Long.toString(timeLong));
log.info("该方法执行时间为" + timeDouble+ "毫秒,即" + timeDouble/(double)1000 + "秒");
log.info("demo: " +demo.toString());
return demo.toString();
}
}
```
- 必须用 ArtemisRpcReference 注解中指定 RPC 接口
### 第四步:启动 RPC 消费者端
```java
@SpringBootApplication
public class ArtemisDemoConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ArtemisDemoConsumerApplication.class, args);
}
}
```
运行 ArtemisDemoConsumerApplication 类,将从 Zookeeper 中获取响应的服务,首次请求与服务端建立连接,并且动态代理调用过程.