基于 Nacos 与 自定义传输协议 的 RPC 框架实现 —— 简易版 Dubbo

这是一个开源项目PANDA/Panda-Rpc-Framework的简化版,采用Nacos作为服务注册中心,利用Socket/Netty进行传输,并设计了自定义传输协议。框架还实现了服务自动注册、反射注解、多种负载均衡和序列化算法。
摘要由CSDN通过智能技术生成

声明:本项目为开源项目 PANDA/Panda-Rpc-Framework 的自实现版,一切代码仅供学习交流使用。

项目架构

系统架构

技术栈

  • 基于 Nacos 实现的服务注册中心
  • 基于传统 Socket 与 Netty 实现的传输方式
  • 基于自实现的传输协议
  • 基于反射与注解实现的包扫描与自动注册服务
  • 两种负载均衡算法(随机、轮转)
  • 四种序列化&反序列化算法(Json、Kryo、Hessian、Protostuff)

项目结构

  • rpc-api —— 框架通用接口
  • rpc-common —— 实体对象、工具类、异常等公用类
  • rpc-core —— 框架的核心实现
  • test-client —— 测试用客户端
  • test-server —— 测试用服务端

传输协议

自定义传输协议格式如下:

+-----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍一下如何在Spring Boot中使用DubboNacos搭建RPC框架Dubbo是一个高性能、轻量级的开源Java RPC框架,可以提供远程方法调用和服务发现功能。Nacos是阿里巴巴开源的一个服务发现和配置管理平台,也是Dubbo官方推荐的服务注册中心和配置中心。 下面是具体的步骤: 1. 在pom.xml中添加DubboNacos的依赖: ```xml <!-- Dubbo依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- Nacos依赖 --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.2.1</version> </dependency> ``` 2. 在application.properties中配置DubboNacos: ```properties # Dubbo配置 dubbo.application.name=consumer dubbo.registry.address=nacos://localhost:8848 dubbo.registry.username=nacos dubbo.registry.password=nacos # Nacos配置 spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.discovery.username=nacos spring.cloud.nacos.discovery.password=nacos ``` 3. 创建Dubbo服务提供者: ```java @Service public class UserServiceImpl implements UserService { @Override public User getById(Long id) { // 实现自己的业务逻辑 return new User(id, "张三"); } } ``` 4. 在Dubbo服务提供者中配置Dubbo: ```java @Configuration public class DubboProviderConfig { @Value("${dubbo.application.name}") private String appName; @Value("${dubbo.registry.address}") private String registryAddress; @Value("${dubbo.registry.username}") private String registryUsername; @Value("${dubbo.registry.password}") private String registryPassword; @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName(appName); return applicationConfig; } @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress(registryAddress); registryConfig.setUsername(registryUsername); registryConfig.setPassword(registryPassword); return registryConfig; } @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20880); return protocolConfig; } @Bean public ProviderConfig providerConfig() { ProviderConfig providerConfig = new ProviderConfig(); providerConfig.setTimeout(5000); return providerConfig; } } ``` 5. 创建Dubbo服务消费者: ```java @RestController public class UserController { @Reference(version = "1.0.0") private UserService userService; @GetMapping("/user/{id}") public User getUserById(@PathVariable Long id) { return userService.getById(id); } } ``` 6. 在Dubbo服务消费者中配置DubboNacos: ```java @Configuration public class DubboConsumerConfig { @Value("${dubbo.application.name}") private String appName; @Value("${dubbo.registry.address}") private String registryAddress; @Value("${dubbo.registry.username}") private String registryUsername; @Value("${dubbo.registry.password}") private String registryPassword; @Bean public ApplicationConfig applicationConfig() { ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName(appName); return applicationConfig; } @Bean public RegistryConfig registryConfig() { RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setAddress(registryAddress); registryConfig.setUsername(registryUsername); registryConfig.setPassword(registryPassword); return registryConfig; } @Bean public ProtocolConfig protocolConfig() { ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20880); return protocolConfig; } @Bean public ConsumerConfig consumerConfig() { ConsumerConfig consumerConfig = new ConsumerConfig(); consumerConfig.setTimeout(5000); return consumerConfig; } @Bean public NacosDiscoveryProperties nacosDiscoveryProperties() { NacosDiscoveryProperties nacosDiscoveryProperties = new NacosDiscoveryProperties(); nacosDiscoveryProperties.setServerAddr("localhost:8848"); nacosDiscoveryProperties.setUsername("nacos"); nacosDiscoveryProperties.setPassword("nacos"); return nacosDiscoveryProperties; } @Bean public NacosServiceDiscovery nacosServiceDiscovery() { return new NacosServiceDiscovery(); } @Bean public ReferenceConfig<UserService> userServiceReferenceConfig() { ReferenceConfig<UserService> referenceConfig = new ReferenceConfig<>(); referenceConfig.setInterface(UserService.class); referenceConfig.setVersion("1.0.0"); referenceConfig.setCluster("failfast"); return referenceConfig; } @Bean public DubboBootstrap dubboBootstrap() { return DubboBootstrap.getInstance(); } } ``` 这样,我们就成功地在Spring Boot中使用DubboNacos搭建了RPC框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值