# 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 中获取响应的服务,首次请求与服务端建立连接,并且动态代理调用过程.