徒手编写服务发现框架系列一:项目简介

徒手编写服务发现框架系列一:项目简介_第1张图片

背景及简介

        在微服务架构大行其道的今天,服务发现及rpc通信框架扮演的“戏份”也越来越重,业界使用较广泛的有阿里系的dubbo,或者为中小型项目而生的spring cloud全家桶等等,都得到了实践与认可。大部分初学者的学习往往只能停留在使用层面,为了更深入的了解服务发现机制以及rpc的原理,后续的文章《徒手编写服务发现框架》系列,我们一起揭开它的神秘面纱,自己动手实现一款简单的服务发现框架!

       我们目标是要编写一款集服务发现、rpc通信于一体的框架,通信层基于netty实现,底层原理基于反射、动态代理实现。 纯基于Javaconfig方式配置,无xml。配置中心基于redis。

特性

  • 传输方式:TCP长连接,NIO异步通信
  • 序列化:json
  • 适用场景:服务间高性能、低延迟调用

注意事项

  • 注册中心目前采用redis实现,注册中心可用性暂不保证

进阶篇(待实现)

  • 心跳检测
  • 负载均衡
  • 链路监控
  • 熔断

服务提供端配置:

@Configuration 
 public class RpcConfig { 
     @Bean
     public RegistryConfig registryConfig(){
         RegistryConfig registryConfig = new RegistryConfig();
         registryConfig.setRegistryHost("127.0.0.1");
         registryConfig.setRegistryPort(6379);
         registryConfig.setPort(3333);
         registryConfig.setServerName("spring-boot-demo");
         registryConfig.setProviderConfigs(providerConfig());
         return registryConfig;
     }

     private Set providerConfig(){
         Set providerConfigs = new HashSet<>();
         ProviderConfig providerConfig = new ProviderConfig<>();
         providerConfig.setApiName("com.zxm.rpc.api.IUserServiceApi");
         providerConfig.setImplementsClass(IUserServiceApiImpl.class);
         providerConfigs.add(providerConfig);
         return providerConfigs;
     }

     @Bean
     public RegistryHandler registryHandler() throws UnknownHostException{
         RegistryHandler registryHandler = new RegistryHandler(registryConfig());
         registryHandler.registry();
         return registryHandler;
     }

     @Bean
     public ProviderProxyInvoker providerProxyInvoker()throws UnknownHostException{
         return new ProviderProxyInvoker(registryConfig(),registryHandler());
     }
 }

 

服务消费端配置:

@Configuration
public class RefConfig {
    @Bean
    public IUserServiceApi referenceConfig() {
        ReferenceConfig referenceConfig = ReferenceConfig
                .instance()
                .apiName("com.zxm.rpc.api.IUserServiceApi")
                .providerName("spring-boot-demo")
                .registryHost("10.13.1.210")
                .registryPort(6379)
                .timeout(5000)
                .build();
        return referenceConfig.register();
    }
}

项目地址: https://github.com/zhangxiaomin1993/rpc-server-sdk

声明:文章和项目不以商业盈利为目的,仅作为本人技术积累的沉淀,分享给大家,有兴趣的朋友欢迎访问交流,共同学习和进步!大佬和专家路过,不喜勿喷!

你可能感兴趣的:(服务发现)