├── README.assets ├── 1720376325450.png ├── 1720376518663.png ├── 1720376674829.png ├── 1720376759165.png ├── 655c04a02b08474e985ff4bf8a561d12.png ├── image.png └── version6.jpg ├── README.md ├── version1 ├── .idea │ ├── compiler.xml │ ├── encodings.xml │ ├── jarRepositories.xml │ ├── misc.xml │ ├── vcs.xml │ └── workspace.xml ├── pom.xml ├── src │ └── main │ │ ├── java │ │ ├── part1 │ │ │ ├── Client │ │ │ │ ├── IOClient.java │ │ │ │ ├── TestClient.java │ │ │ │ └── proxy │ │ │ │ │ └── ClientProxy.java │ │ │ ├── Server │ │ │ │ ├── TestServer.java │ │ │ │ ├── provider │ │ │ │ │ └── ServiceProvider.java │ │ │ │ └── server │ │ │ │ │ ├── RpcServer.java │ │ │ │ │ ├── impl │ │ │ │ │ ├── SimpleRPCRPCServer.java │ │ │ │ │ └── ThreadPoolRPCRPCServer.java │ │ │ │ │ └── work │ │ │ │ │ └── WorkThread.java │ │ │ └── common │ │ │ │ ├── Message │ │ │ │ ├── RpcRequest.java │ │ │ │ └── RpcResponse.java │ │ │ │ ├── pojo │ │ │ │ └── User.java │ │ │ │ └── service │ │ │ │ ├── Impl │ │ │ │ └── UserServiceImpl.java │ │ │ │ └── UserService.java │ │ ├── part2 │ │ │ ├── Client │ │ │ │ ├── IOClient.java │ │ │ │ ├── TestClient.java │ │ │ │ ├── netty │ │ │ │ │ ├── handler │ │ │ │ │ │ └── NettyClientHandler.java │ │ │ │ │ └── nettyInitializer │ │ │ │ │ │ └── NettyClientInitializer.java │ │ │ │ ├── proxy │ │ │ │ │ └── ClientProxy.java │ │ │ │ └── rpcClient │ │ │ │ │ ├── RpcClient.java │ │ │ │ │ └── impl │ │ │ │ │ ├── NettyRpcClient.java │ │ │ │ │ └── SimpleSocketRpcCilent.java │ │ │ ├── Server │ │ │ │ ├── TestServer.java │ │ │ │ ├── netty │ │ │ │ │ ├── handler │ │ │ │ │ │ └── NettyRPCServerHandler.java │ │ │ │ │ └── nettyInitializer │ │ │ │ │ │ └── NettyServerInitializer.java │ │ │ │ ├── provider │ │ │ │ │ └── ServiceProvider.java │ │ │ │ └── server │ │ │ │ │ ├── RpcServer.java │ │ │ │ │ ├── impl │ │ │ │ │ ├── NettyRPCRPCServer.java │ │ │ │ │ ├── SimpleRPCRPCServer.java │ │ │ │ │ └── ThreadPoolRPCRPCServer.java │ │ │ │ │ └── work │ │ │ │ │ └── WorkThread.java │ │ │ └── common │ │ │ │ ├── Message │ │ │ │ ├── RpcRequest.java │ │ │ │ └── RpcResponse.java │ │ │ │ ├── pojo │ │ │ │ └── User.java │ │ │ │ └── service │ │ │ │ ├── Impl │ │ │ │ └── UserServiceImpl.java │ │ │ │ └── UserService.java │ │ └── part3 │ │ │ ├── Client │ │ │ ├── TestClient.java │ │ │ ├── netty │ │ │ │ ├── handler │ │ │ │ │ └── NettyClientHandler.java │ │ │ │ └── nettyInitializer │ │ │ │ │ └── NettyClientInitializer.java │ │ │ ├── proxy │ │ │ │ └── ClientProxy.java │ │ │ ├── rpcClient │ │ │ │ ├── RpcClient.java │ │ │ │ └── impl │ │ │ │ │ ├── NettyRpcClient.java │ │ │ │ │ └── SimpleSocketRpcCilent.java │ │ │ └── serviceCenter │ │ │ │ ├── ServiceCenter.java │ │ │ │ └── ZKServiceCenter.java │ │ │ ├── Server │ │ │ ├── TestServer.java │ │ │ ├── netty │ │ │ │ ├── handler │ │ │ │ │ └── NettyRPCServerHandler.java │ │ │ │ └── nettyInitializer │ │ │ │ │ └── NettyServerInitializer.java │ │ │ ├── provider │ │ │ │ └── ServiceProvider.java │ │ │ ├── server │ │ │ │ ├── RpcServer.java │ │ │ │ ├── impl │ │ │ │ │ ├── NettyRPCRPCServer.java │ │ │ │ │ └── SimpleRPCRPCServer.java │ │ │ │ └── work │ │ │ │ │ └── WorkThread.java │ │ │ └── serviceRegister │ │ │ │ ├── ServiceRegister.java │ │ │ │ └── impl │ │ │ │ └── ZKServiceRegister.java │ │ │ └── common │ │ │ ├── Message │ │ │ ├── RpcRequest.java │ │ │ └── RpcResponse.java │ │ │ ├── pojo │ │ │ └── User.java │ │ │ └── service │ │ │ ├── Impl │ │ │ └── UserServiceImpl.java │ │ │ └── UserService.java │ │ └── resources │ │ └── log4j.properties └── target │ └── classes │ ├── log4j.properties │ ├── part1 │ ├── Client │ │ ├── IOClient.class │ │ ├── TestClient.class │ │ └── proxy │ │ │ └── ClientProxy.class │ ├── Server │ │ ├── TestServer.class │ │ ├── provider │ │ │ └── ServiceProvider.class │ │ └── server │ │ │ ├── RpcServer.class │ │ │ ├── impl │ │ │ ├── SimpleRPCRPCServer.class │ │ │ └── ThreadPoolRPCRPCServer.class │ │ │ └── work │ │ │ └── WorkThread.class │ └── common │ │ ├── Message │ │ ├── RpcRequest$RpcRequestBuilder.class │ │ ├── RpcRequest.class │ │ ├── RpcResponse$RpcResponseBuilder.class │ │ └── RpcResponse.class │ │ ├── pojo │ │ ├── User$UserBuilder.class │ │ └── User.class │ │ └── service │ │ ├── Impl │ │ └── UserServiceImpl.class │ │ └── UserService.class │ ├── part2 │ ├── Client │ │ ├── IOClient.class │ │ ├── TestClient.class │ │ ├── netty │ │ │ ├── handler │ │ │ │ └── NettyClientHandler.class │ │ │ └── nettyInitializer │ │ │ │ ├── NettyClientInitializer$1.class │ │ │ │ └── NettyClientInitializer.class │ │ ├── proxy │ │ │ └── ClientProxy.class │ │ └── rpcClient │ │ │ ├── RpcClient.class │ │ │ └── impl │ │ │ ├── NettyRpcClient.class │ │ │ └── SimpleSocketRpcCilent.class │ ├── Server │ │ ├── TestServer.class │ │ ├── netty │ │ │ ├── handler │ │ │ │ └── NettyRPCServerHandler.class │ │ │ └── nettyInitializer │ │ │ │ ├── NettyServerInitializer$1.class │ │ │ │ └── NettyServerInitializer.class │ │ ├── provider │ │ │ └── ServiceProvider.class │ │ └── server │ │ │ ├── RpcServer.class │ │ │ ├── impl │ │ │ ├── NettyRPCRPCServer.class │ │ │ ├── SimpleRPCRPCServer.class │ │ │ └── ThreadPoolRPCRPCServer.class │ │ │ └── work │ │ │ └── WorkThread.class │ └── common │ │ ├── Message │ │ ├── RpcRequest$RpcRequestBuilder.class │ │ ├── RpcRequest.class │ │ ├── RpcResponse$RpcResponseBuilder.class │ │ └── RpcResponse.class │ │ ├── pojo │ │ ├── User$UserBuilder.class │ │ └── User.class │ │ └── service │ │ ├── Impl │ │ └── UserServiceImpl.class │ │ └── UserService.class │ └── part3 │ ├── Client │ ├── TestClient.class │ ├── netty │ │ ├── handler │ │ │ └── NettyClientHandler.class │ │ └── nettyInitializer │ │ │ ├── NettyClientInitializer$1.class │ │ │ └── NettyClientInitializer.class │ ├── proxy │ │ └── ClientProxy.class │ ├── rpcClient │ │ ├── RpcClient.class │ │ └── impl │ │ │ ├── NettyRpcClient.class │ │ │ └── SimpleSocketRpcCilent.class │ └── serviceCenter │ │ ├── ServiceCenter.class │ │ └── ZKServiceCenter.class │ ├── Server │ ├── TestServer.class │ ├── netty │ │ ├── handler │ │ │ └── NettyRPCServerHandler.class │ │ └── nettyInitializer │ │ │ ├── NettyServerInitializer$1.class │ │ │ └── NettyServerInitializer.class │ ├── provider │ │ └── ServiceProvider.class │ ├── server │ │ ├── RpcServer.class │ │ ├── impl │ │ │ ├── NettyRPCRPCServer.class │ │ │ └── SimpleRPCRPCServer.class │ │ └── work │ │ │ └── WorkThread.class │ └── serviceRegister │ │ ├── ServiceRegister.class │ │ └── impl │ │ └── ZKServiceRegister.class │ └── common │ ├── Message │ ├── RpcRequest$RpcRequestBuilder.class │ ├── RpcRequest.class │ ├── RpcResponse$RpcResponseBuilder.class │ └── RpcResponse.class │ ├── pojo │ ├── User$UserBuilder.class │ └── User.class │ └── service │ ├── Impl │ └── UserServiceImpl.class │ └── UserService.class ├── version2 ├── pom.xml └── src │ └── main │ ├── java │ ├── part1 │ │ ├── Client │ │ │ ├── TestClient.java │ │ │ ├── netty │ │ │ │ ├── handler │ │ │ │ │ └── NettyClientHandler.java │ │ │ │ └── nettyInitializer │ │ │ │ │ └── NettyClientInitializer.java │ │ │ ├── proxy │ │ │ │ └── ClientProxy.java │ │ │ ├── rpcClient │ │ │ │ ├── RpcClient.java │ │ │ │ └── impl │ │ │ │ │ ├── NettyRpcClient.java │ │ │ │ │ └── SimpleSocketRpcCilent.java │ │ │ └── serviceCenter │ │ │ │ ├── ServiceCenter.java │ │ │ │ └── ZKServiceCenter.java │ │ ├── Server │ │ │ ├── TestServer.java │ │ │ ├── netty │ │ │ │ ├── handler │ │ │ │ │ └── NettyRPCServerHandler.java │ │ │ │ └── nettyInitializer │ │ │ │ │ └── NettyServerInitializer.java │ │ │ ├── provider │ │ │ │ └── ServiceProvider.java │ │ │ ├── server │ │ │ │ ├── RpcServer.java │ │ │ │ ├── impl │ │ │ │ │ ├── NettyRPCRPCServer.java │ │ │ │ │ └── SimpleRPCRPCServer.java │ │ │ │ └── work │ │ │ │ │ └── WorkThread.java │ │ │ └── serviceRegister │ │ │ │ ├── ServiceRegister.java │ │ │ │ └── impl │ │ │ │ └── ZKServiceRegister.java │ │ └── common │ │ │ ├── Message │ │ │ ├── MessageType.java │ │ │ ├── RpcRequest.java │ │ │ └── RpcResponse.java │ │ │ ├── pojo │ │ │ └── User.java │ │ │ ├── serializer │ │ │ ├── myCode │ │ │ │ ├── MyDecoder.java │ │ │ │ └── MyEncoder.java │ │ │ └── mySerializer │ │ │ │ ├── JsonSerializer.java │ │ │ │ ├── ObjectSerializer.java │ │ │ │ └── Serializer.java │ │ │ └── service │ │ │ ├── Impl │ │ │ └── UserServiceImpl.java │ │ │ └── UserService.java │ └── part2 │ │ ├── Client │ │ ├── TestClient.java │ │ ├── cache │ │ │ └── serviceCache.java │ │ ├── netty │ │ │ ├── handler │ │ │ │ └── NettyClientHandler.java │ │ │ └── nettyInitializer │ │ │ │ └── NettyClientInitializer.java │ │ ├── proxy │ │ │ └── ClientProxy.java │ │ ├── rpcClient │ │ │ ├── RpcClient.java │ │ │ └── impl │ │ │ │ ├── NettyRpcClient.java │ │ │ │ └── SimpleSocketRpcCilent.java │ │ └── serviceCenter │ │ │ ├── ServiceCenter.java │ │ │ ├── ZKServiceCenter.java │ │ │ └── ZkWatcher │ │ │ └── watchZK.java │ │ ├── Server │ │ ├── TestServer.java │ │ ├── netty │ │ │ ├── handler │ │ │ │ └── NettyRPCServerHandler.java │ │ │ └── nettyInitializer │ │ │ │ └── NettyServerInitializer.java │ │ ├── provider │ │ │ └── ServiceProvider.java │ │ ├── server │ │ │ ├── RpcServer.java │ │ │ ├── impl │ │ │ │ ├── NettyRPCRPCServer.java │ │ │ │ └── SimpleRPCRPCServer.java │ │ │ └── work │ │ │ │ └── WorkThread.java │ │ └── serviceRegister │ │ │ ├── ServiceRegister.java │ │ │ └── impl │ │ │ └── ZKServiceRegister.java │ │ └── common │ │ ├── Message │ │ ├── MessageType.java │ │ ├── RpcRequest.java │ │ └── RpcResponse.java │ │ ├── pojo │ │ └── User.java │ │ ├── serializer │ │ ├── myCode │ │ │ ├── MyDecoder.java │ │ │ └── MyEncoder.java │ │ └── mySerializer │ │ │ ├── JsonSerializer.java │ │ │ ├── ObjectSerializer.java │ │ │ └── Serializer.java │ │ └── service │ │ ├── Impl │ │ └── UserServiceImpl.java │ │ └── UserService.java │ └── resources │ └── log4j.properties ├── version3 ├── pom.xml └── src │ └── main │ ├── java │ ├── part1 │ │ ├── Client │ │ │ ├── TestClient.java │ │ │ ├── cache │ │ │ │ └── serviceCache.java │ │ │ ├── netty │ │ │ │ ├── handler │ │ │ │ │ └── NettyClientHandler.java │ │ │ │ └── nettyInitializer │ │ │ │ │ └── NettyClientInitializer.java │ │ │ ├── proxy │ │ │ │ └── ClientProxy.java │ │ │ ├── rpcClient │ │ │ │ ├── RpcClient.java │ │ │ │ └── impl │ │ │ │ │ ├── NettyRpcClient.java │ │ │ │ │ └── SimpleSocketRpcCilent.java │ │ │ └── serviceCenter │ │ │ │ ├── ServiceCenter.java │ │ │ │ ├── ZKServiceCenter.java │ │ │ │ ├── ZkWatcher │ │ │ │ └── watchZK.java │ │ │ │ └── balance │ │ │ │ ├── LoadBalance.java │ │ │ │ └── impl │ │ │ │ ├── ConsistencyHashBalance.java │ │ │ │ ├── RandomLoadBalance.java │ │ │ │ └── RoundLoadBalance.java │ │ ├── Server │ │ │ ├── TestServer.java │ │ │ ├── netty │ │ │ │ ├── handler │ │ │ │ │ └── NettyRPCServerHandler.java │ │ │ │ └── nettyInitializer │ │ │ │ │ └── NettyServerInitializer.java │ │ │ ├── provider │ │ │ │ └── ServiceProvider.java │ │ │ ├── server │ │ │ │ ├── RpcServer.java │ │ │ │ ├── impl │ │ │ │ │ ├── NettyRPCRPCServer.java │ │ │ │ │ └── SimpleRPCRPCServer.java │ │ │ │ └── work │ │ │ │ │ └── WorkThread.java │ │ │ └── serviceRegister │ │ │ │ ├── ServiceRegister.java │ │ │ │ └── impl │ │ │ │ └── ZKServiceRegister.java │ │ └── common │ │ │ ├── Message │ │ │ ├── MessageType.java │ │ │ ├── RpcRequest.java │ │ │ └── RpcResponse.java │ │ │ ├── pojo │ │ │ └── User.java │ │ │ ├── serializer │ │ │ ├── myCode │ │ │ │ ├── MyDecoder.java │ │ │ │ └── MyEncoder.java │ │ │ └── mySerializer │ │ │ │ ├── JsonSerializer.java │ │ │ │ ├── ObjectSerializer.java │ │ │ │ └── Serializer.java │ │ │ └── service │ │ │ ├── Impl │ │ │ └── UserServiceImpl.java │ │ │ └── UserService.java │ └── part2 │ │ ├── Client │ │ ├── TestClient.java │ │ ├── cache │ │ │ └── serviceCache.java │ │ ├── netty │ │ │ ├── handler │ │ │ │ └── NettyClientHandler.java │ │ │ └── nettyInitializer │ │ │ │ └── NettyClientInitializer.java │ │ ├── proxy │ │ │ └── ClientProxy.java │ │ ├── retry │ │ │ └── guavaRetry.java │ │ ├── rpcClient │ │ │ ├── RpcClient.java │ │ │ └── impl │ │ │ │ ├── NettyRpcClient.java │ │ │ │ └── SimpleSocketRpcCilent.java │ │ └── serviceCenter │ │ │ ├── ServiceCenter.java │ │ │ ├── ZKServiceCenter.java │ │ │ ├── ZkWatcher │ │ │ └── watchZK.java │ │ │ └── balance │ │ │ ├── LoadBalance.java │ │ │ └── impl │ │ │ ├── ConsistencyHashBalance.java │ │ │ ├── RandomLoadBalance.java │ │ │ └── RoundLoadBalance.java │ │ ├── Server │ │ ├── TestServer.java │ │ ├── netty │ │ │ ├── handler │ │ │ │ └── NettyRPCServerHandler.java │ │ │ └── nettyInitializer │ │ │ │ └── NettyServerInitializer.java │ │ ├── provider │ │ │ └── ServiceProvider.java │ │ ├── server │ │ │ ├── RpcServer.java │ │ │ ├── impl │ │ │ │ ├── NettyRPCRPCServer.java │ │ │ │ └── SimpleRPCRPCServer.java │ │ │ └── work │ │ │ │ └── WorkThread.java │ │ └── serviceRegister │ │ │ ├── ServiceRegister.java │ │ │ └── impl │ │ │ └── ZKServiceRegister.java │ │ └── common │ │ ├── Message │ │ ├── MessageType.java │ │ ├── RpcRequest.java │ │ └── RpcResponse.java │ │ ├── pojo │ │ └── User.java │ │ ├── serializer │ │ ├── myCode │ │ │ ├── MyDecoder.java │ │ │ └── MyEncoder.java │ │ └── mySerializer │ │ │ ├── JsonSerializer.java │ │ │ ├── ObjectSerializer.java │ │ │ └── Serializer.java │ │ └── service │ │ ├── Impl │ │ └── UserServiceImpl.java │ │ └── UserService.java │ └── resources │ └── log4j.properties ├── version4 ├── .idea │ ├── .gitignore │ ├── compiler.xml │ ├── encodings.xml │ ├── jarRepositories.xml │ ├── misc.xml │ └── vcs.xml ├── pom.xml └── src │ └── main │ ├── java │ └── part1 │ │ ├── Client │ │ ├── TestClient.java │ │ ├── cache │ │ │ └── serviceCache.java │ │ ├── circuitBreaker │ │ │ ├── CircuitBreaker.java │ │ │ └── CircuitBreakerProvider.java │ │ ├── netty │ │ │ ├── handler │ │ │ │ └── NettyClientHandler.java │ │ │ └── nettyInitializer │ │ │ │ └── NettyClientInitializer.java │ │ ├── proxy │ │ │ └── ClientProxy.java │ │ ├── retry │ │ │ └── guavaRetry.java │ │ ├── rpcClient │ │ │ ├── RpcClient.java │ │ │ └── impl │ │ │ │ ├── NettyRpcClient.java │ │ │ │ └── SimpleSocketRpcCilent.java │ │ └── serviceCenter │ │ │ ├── ServiceCenter.java │ │ │ ├── ZKServiceCenter.java │ │ │ ├── ZkWatcher │ │ │ └── watchZK.java │ │ │ └── balance │ │ │ ├── LoadBalance.java │ │ │ └── impl │ │ │ ├── ConsistencyHashBalance.java │ │ │ ├── RandomLoadBalance.java │ │ │ └── RoundLoadBalance.java │ │ ├── Server │ │ ├── TestServer.java │ │ ├── netty │ │ │ ├── handler │ │ │ │ └── NettyRPCServerHandler.java │ │ │ └── nettyInitializer │ │ │ │ └── NettyServerInitializer.java │ │ ├── provider │ │ │ └── ServiceProvider.java │ │ ├── ratelimit │ │ │ ├── RateLimit.java │ │ │ ├── impl │ │ │ │ └── TokenBucketRateLimitImpl.java │ │ │ └── provider │ │ │ │ └── RateLimitProvider.java │ │ ├── server │ │ │ ├── RpcServer.java │ │ │ ├── impl │ │ │ │ ├── NettyRPCRPCServer.java │ │ │ │ └── SimpleRPCRPCServer.java │ │ │ └── work │ │ │ │ └── WorkThread.java │ │ └── serviceRegister │ │ │ ├── ServiceRegister.java │ │ │ └── impl │ │ │ └── ZKServiceRegister.java │ │ └── common │ │ ├── Message │ │ ├── MessageType.java │ │ ├── RpcRequest.java │ │ └── RpcResponse.java │ │ ├── pojo │ │ └── User.java │ │ ├── serializer │ │ ├── myCode │ │ │ ├── MyDecoder.java │ │ │ └── MyEncoder.java │ │ └── mySerializer │ │ │ ├── JsonSerializer.java │ │ │ ├── ObjectSerializer.java │ │ │ └── Serializer.java │ │ └── service │ │ ├── Impl │ │ └── UserServiceImpl.java │ │ └── UserService.java │ └── resources │ └── log4j.properties ├── version5 ├── .idea │ ├── .gitignore │ ├── compiler.xml │ ├── encodings.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── jarRepositories.xml │ ├── misc.xml │ ├── uiDesigner.xml │ └── vcs.xml ├── krpc-api │ ├── pom.xml │ ├── src │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── kama │ │ │ ├── annotation │ │ │ └── Retryable.java │ │ │ ├── pojo │ │ │ └── User.java │ │ │ └── service │ │ │ └── UserService.java │ └── target │ │ ├── classes │ │ └── com │ │ │ └── kama │ │ │ ├── annotation │ │ │ └── Retryable.class │ │ │ ├── pojo │ │ │ ├── User$UserBuilder.class │ │ │ └── User.class │ │ │ └── service │ │ │ └── UserService.class │ │ ├── krpc-api-1.0-SNAPSHOT.jar │ │ ├── maven-archiver │ │ └── pom.properties │ │ └── maven-status │ │ └── maven-compiler-plugin │ │ └── compile │ │ └── default-compile │ │ ├── createdFiles.lst │ │ └── inputFiles.lst ├── krpc-common │ ├── pom.xml │ ├── src │ │ └── main │ │ │ └── java │ │ │ └── common │ │ │ ├── exception │ │ │ └── SerializeException.java │ │ │ ├── message │ │ │ ├── MessageType.java │ │ │ ├── RpcRequest.java │ │ │ └── RpcResponse.java │ │ │ ├── serializer │ │ │ ├── mycoder │ │ │ │ ├── MyDecoder.java │ │ │ │ └── MyEncoder.java │ │ │ └── myserializer │ │ │ │ ├── HessianSerializer.java │ │ │ │ ├── JsonSerializer.java │ │ │ │ ├── KryoSerializer.java │ │ │ │ ├── ObjectSerializer.java │ │ │ │ ├── ProtostuffSerializer.java │ │ │ │ └── Serializer.java │ │ │ ├── spi │ │ │ └── SpiLoader.java │ │ │ └── util │ │ │ └── ConfigUtil.java │ └── target │ │ └── classes │ │ └── common │ │ ├── exception │ │ └── SerializeException.class │ │ ├── message │ │ ├── MessageType.class │ │ ├── RpcRequest$RpcRequestBuilder.class │ │ ├── RpcRequest.class │ │ ├── RpcResponse$RpcResponseBuilder.class │ │ └── RpcResponse.class │ │ ├── serializer │ │ ├── mycoder │ │ │ ├── MyDecoder.class │ │ │ └── MyEncoder.class │ │ └── myserializer │ │ │ ├── HessianSerializer.class │ │ │ ├── JsonSerializer.class │ │ │ ├── KryoSerializer.class │ │ │ ├── ObjectSerializer.class │ │ │ ├── ProtostuffSerializer.class │ │ │ └── Serializer.class │ │ ├── spi │ │ └── SpiLoader.class │ │ └── util │ │ └── ConfigUtil.class ├── krpc-consumer │ ├── pom.xml │ ├── src │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── kama │ │ │ │ └── consumer │ │ │ │ ├── ConsumerTest.java │ │ │ │ └── ConsumerTestConfig.java │ │ │ └── resources │ │ │ └── application.properties │ └── target │ │ ├── classes │ │ ├── application.properties │ │ └── com │ │ │ └── kama │ │ │ └── consumer │ │ │ ├── ConsumerTest.class │ │ │ └── ConsumerTestConfig.class │ │ ├── krpc-consumer-1.0-SNAPSHOT.jar │ │ ├── maven-archiver │ │ └── pom.properties │ │ └── maven-status │ │ └── maven-compiler-plugin │ │ └── compile │ │ └── default-compile │ │ ├── createdFiles.lst │ │ └── inputFiles.lst ├── krpc-core │ ├── pom.xml │ ├── src │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── kama │ │ │ │ ├── KRpcApplication.java │ │ │ │ ├── client │ │ │ │ ├── cache │ │ │ │ │ └── ServiceCache.java │ │ │ │ ├── circuitbreaker │ │ │ │ │ ├── CircuitBreaker.java │ │ │ │ │ └── CircuitBreakerProvider.java │ │ │ │ ├── netty │ │ │ │ │ ├── NettyClientHandler.java │ │ │ │ │ └── NettyClientInitializer.java │ │ │ │ ├── proxy │ │ │ │ │ └── ClientProxy.java │ │ │ │ ├── retry │ │ │ │ │ └── GuavaRetry.java │ │ │ │ ├── rpcclient │ │ │ │ │ ├── RpcClient.java │ │ │ │ │ └── impl │ │ │ │ │ │ ├── NettyRpcClient.java │ │ │ │ │ │ └── SimpleSocketRpcClient.java │ │ │ │ └── servicecenter │ │ │ │ │ ├── ServiceCenter.java │ │ │ │ │ ├── ZKServiceCenter.java │ │ │ │ │ ├── ZKWatcher │ │ │ │ │ └── watchZK.java │ │ │ │ │ └── balance │ │ │ │ │ ├── LoadBalance.java │ │ │ │ │ └── impl │ │ │ │ │ ├── ConsistencyHashBalance.java │ │ │ │ │ ├── RandomLoadBalance.java │ │ │ │ │ └── RoundLoadBalance.java │ │ │ │ ├── config │ │ │ │ ├── KRpcConfig.java │ │ │ │ └── RpcConstant.java │ │ │ │ ├── server │ │ │ │ ├── netty │ │ │ │ │ ├── NettyRpcServerHandler.java │ │ │ │ │ └── NettyServerInitializer.java │ │ │ │ ├── provider │ │ │ │ │ └── ServiceProvider.java │ │ │ │ ├── ratelimit │ │ │ │ │ ├── RateLimit.java │ │ │ │ │ ├── impl │ │ │ │ │ │ └── TokenBucketRateLimitImpl.java │ │ │ │ │ └── provider │ │ │ │ │ │ └── RateLimitProvider.java │ │ │ │ ├── server │ │ │ │ │ ├── RpcServer.java │ │ │ │ │ ├── impl │ │ │ │ │ │ ├── NettyRpcServer.java │ │ │ │ │ │ └── SimpleRpcServer.java │ │ │ │ │ └── work │ │ │ │ │ │ └── WorkThread.java │ │ │ │ └── serviceRegister │ │ │ │ │ ├── ServiceRegister.java │ │ │ │ │ └── impl │ │ │ │ │ └── ZKServiceRegister.java │ │ │ │ └── test │ │ │ │ ├── balance │ │ │ │ ├── ConsistencyHashBalanceTest.java │ │ │ │ ├── RandomLoadBalanceTest.java │ │ │ │ └── RoundLoadBalanceTest.java │ │ │ │ └── serializer │ │ │ │ ├── HessianSerializerTest.java │ │ │ │ ├── KryoSerializerTest.java │ │ │ │ └── ProtostuffSerializerTest.java │ │ │ └── resources │ │ │ └── META-INF │ │ │ └── serializer │ │ │ └── com.kama.common.serializer.myserializer.Serializer │ └── target │ │ ├── classes │ │ ├── META-INF │ │ │ └── serializer │ │ │ │ └── com.kama.common.serializer.myserializer.Serializer │ │ └── com │ │ │ └── kama │ │ │ ├── KRpcApplication.class │ │ │ ├── client │ │ │ ├── cache │ │ │ │ └── ServiceCache.class │ │ │ ├── circuitbreaker │ │ │ │ ├── CircuitBreaker$1.class │ │ │ │ ├── CircuitBreaker.class │ │ │ │ ├── CircuitBreakerProvider.class │ │ │ │ └── CircuitBreakerState.class │ │ │ ├── netty │ │ │ │ ├── NettyClientHandler.class │ │ │ │ └── NettyClientInitializer.class │ │ │ ├── proxy │ │ │ │ └── ClientProxy.class │ │ │ ├── retry │ │ │ │ ├── GuavaRetry$1.class │ │ │ │ └── GuavaRetry.class │ │ │ ├── rpcclient │ │ │ │ ├── RpcClient.class │ │ │ │ └── impl │ │ │ │ │ ├── NettyRpcClient.class │ │ │ │ │ └── SimpleSocketRpcClient.class │ │ │ └── servicecenter │ │ │ │ ├── ServiceCenter.class │ │ │ │ ├── ZKServiceCenter.class │ │ │ │ ├── ZKWatcher │ │ │ │ ├── watchZK$1.class │ │ │ │ └── watchZK.class │ │ │ │ └── balance │ │ │ │ ├── LoadBalance.class │ │ │ │ └── impl │ │ │ │ ├── ConsistencyHashBalance.class │ │ │ │ ├── RandomLoadBalance.class │ │ │ │ └── RoundLoadBalance.class │ │ │ ├── config │ │ │ ├── KRpcConfig$KRpcConfigBuilder.class │ │ │ ├── KRpcConfig.class │ │ │ └── RpcConstant.class │ │ │ ├── server │ │ │ ├── netty │ │ │ │ ├── NettyRpcServerHandler.class │ │ │ │ └── NettyServerInitializer.class │ │ │ ├── provider │ │ │ │ └── ServiceProvider.class │ │ │ ├── ratelimit │ │ │ │ ├── RateLimit.class │ │ │ │ ├── impl │ │ │ │ │ └── TokenBucketRateLimitImpl.class │ │ │ │ └── provider │ │ │ │ │ └── RateLimitProvider.class │ │ │ ├── server │ │ │ │ ├── RpcServer.class │ │ │ │ ├── impl │ │ │ │ │ ├── NettyRpcServer.class │ │ │ │ │ └── SimpleRpcServer.class │ │ │ │ └── work │ │ │ │ │ └── WorkThread.class │ │ │ └── serviceRegister │ │ │ │ ├── ServiceRegister.class │ │ │ │ └── impl │ │ │ │ └── ZKServiceRegister.class │ │ │ └── test │ │ │ ├── balance │ │ │ ├── ConsistencyHashBalanceTest.class │ │ │ ├── RandomLoadBalanceTest.class │ │ │ └── RoundLoadBalanceTest.class │ │ │ └── serializer │ │ │ ├── HessianSerializerTest.class │ │ │ ├── KryoSerializerTest.class │ │ │ └── ProtostuffSerializerTest.class │ │ ├── krpc-core-1.0-SNAPSHOT.jar │ │ ├── maven-archiver │ │ └── pom.properties │ │ └── maven-status │ │ └── maven-compiler-plugin │ │ └── compile │ │ └── default-compile │ │ ├── createdFiles.lst │ │ └── inputFiles.lst ├── krpc-provider │ ├── pom.xml │ ├── src │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── kama │ │ │ │ └── provider │ │ │ │ ├── ProviderTest.java │ │ │ │ └── impl │ │ │ │ └── UserServiceImpl.java │ │ │ └── resources │ │ │ └── application.properties │ └── target │ │ ├── classes │ │ ├── application.properties │ │ └── com │ │ │ └── kama │ │ │ └── provider │ │ │ ├── ProviderTest.class │ │ │ └── impl │ │ │ └── UserServiceImpl.class │ │ ├── krpc-provider-1.0-SNAPSHOT.jar │ │ ├── maven-archiver │ │ └── pom.properties │ │ └── maven-status │ │ └── maven-compiler-plugin │ │ └── compile │ │ └── default-compile │ │ ├── createdFiles.lst │ │ └── inputFiles.lst └── pom.xml └── version6 ├── .idea ├── .gitignore ├── compiler.xml ├── encodings.xml ├── jarRepositories.xml ├── misc.xml └── vcs.xml ├── krpc-api ├── pom.xml ├── src │ └── main │ │ └── java │ │ └── com │ │ └── kama │ │ ├── annotation │ │ └── Retryable.java │ │ ├── pojo │ │ └── User.java │ │ └── service │ │ └── UserService.java └── target │ └── classes │ └── com │ └── kama │ ├── annotation │ └── Retryable.class │ ├── pojo │ ├── User$UserBuilder.class │ └── User.class │ └── service │ └── UserService.class ├── krpc-common ├── pom.xml ├── src │ └── main │ │ └── java │ │ └── common │ │ ├── exception │ │ └── SerializeException.java │ │ ├── message │ │ ├── MessageType.java │ │ ├── RequestType.java │ │ ├── RpcRequest.java │ │ └── RpcResponse.java │ │ ├── serializer │ │ ├── mycoder │ │ │ ├── MyDecoder.java │ │ │ └── MyEncoder.java │ │ └── myserializer │ │ │ ├── HessianSerializer.java │ │ │ ├── JsonSerializer.java │ │ │ ├── KryoSerializer.java │ │ │ ├── ObjectSerializer.java │ │ │ ├── ProtostuffSerializer.java │ │ │ └── Serializer.java │ │ ├── spi │ │ └── SpiLoader.java │ │ ├── trace │ │ └── TraceContext.java │ │ └── util │ │ └── ConfigUtil.java └── target │ └── classes │ └── common │ ├── exception │ └── SerializeException.class │ ├── message │ ├── MessageType.class │ ├── RequestType.class │ ├── RpcRequest$RpcRequestBuilder.class │ ├── RpcRequest.class │ ├── RpcResponse$RpcResponseBuilder.class │ └── RpcResponse.class │ ├── serializer │ ├── mycoder │ │ ├── MyDecoder.class │ │ └── MyEncoder.class │ └── myserializer │ │ ├── HessianSerializer.class │ │ ├── JsonSerializer.class │ │ ├── KryoSerializer.class │ │ ├── ObjectSerializer.class │ │ ├── ProtostuffSerializer.class │ │ └── Serializer.class │ ├── spi │ └── SpiLoader.class │ ├── trace │ └── TraceContext.class │ └── util │ └── ConfigUtil.class ├── krpc-consumer ├── pom.xml ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── kama │ │ │ └── consumer │ │ │ ├── ConsumerTest.java │ │ │ └── ConsumerTestConfig.java │ │ └── resources │ │ └── application.properties └── target │ └── classes │ ├── application.properties │ └── com │ └── kama │ └── consumer │ ├── ConsumerTest.class │ └── ConsumerTestConfig.class ├── krpc-core ├── pom.xml ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── kama │ │ │ ├── KRpcApplication.java │ │ │ ├── client │ │ │ ├── cache │ │ │ │ └── ServiceCache.java │ │ │ ├── circuitbreaker │ │ │ │ ├── CircuitBreaker.java │ │ │ │ └── CircuitBreakerProvider.java │ │ │ ├── netty │ │ │ │ ├── HeartbeatHandler.java │ │ │ │ ├── MDCChannelHandler.java │ │ │ │ ├── NettyClientHandler.java │ │ │ │ └── NettyClientInitializer.java │ │ │ ├── proxy │ │ │ │ └── ClientProxy.java │ │ │ ├── retry │ │ │ │ └── GuavaRetry.java │ │ │ ├── rpcclient │ │ │ │ ├── RpcClient.java │ │ │ │ └── impl │ │ │ │ │ ├── NettyRpcClient.java │ │ │ │ │ └── SimpleSocketRpcClient.java │ │ │ └── servicecenter │ │ │ │ ├── ServiceCenter.java │ │ │ │ ├── ZKServiceCenter.java │ │ │ │ ├── ZKWatcher │ │ │ │ └── watchZK.java │ │ │ │ └── balance │ │ │ │ ├── LoadBalance.java │ │ │ │ └── impl │ │ │ │ ├── ConsistencyHashBalance.java │ │ │ │ ├── RandomLoadBalance.java │ │ │ │ └── RoundLoadBalance.java │ │ │ ├── config │ │ │ ├── KRpcConfig.java │ │ │ └── RpcConstant.java │ │ │ ├── server │ │ │ ├── netty │ │ │ │ ├── HeartbeatHandler.java │ │ │ │ ├── NettyRpcServerHandler.java │ │ │ │ └── NettyServerInitializer.java │ │ │ ├── provider │ │ │ │ └── ServiceProvider.java │ │ │ ├── ratelimit │ │ │ │ ├── RateLimit.java │ │ │ │ ├── impl │ │ │ │ │ └── TokenBucketRateLimitImpl.java │ │ │ │ └── provider │ │ │ │ │ └── RateLimitProvider.java │ │ │ ├── server │ │ │ │ ├── RpcServer.java │ │ │ │ ├── impl │ │ │ │ │ ├── NettyRpcServer.java │ │ │ │ │ └── SimpleRpcServer.java │ │ │ │ └── work │ │ │ │ │ └── WorkThread.java │ │ │ └── serviceRegister │ │ │ │ ├── ServiceRegister.java │ │ │ │ └── impl │ │ │ │ └── ZKServiceRegister.java │ │ │ ├── test │ │ │ ├── balance │ │ │ │ ├── ConsistencyHashBalanceTest.java │ │ │ │ ├── RandomLoadBalanceTest.java │ │ │ │ └── RoundLoadBalanceTest.java │ │ │ └── serializer │ │ │ │ ├── HessianSerializerTest.java │ │ │ │ ├── KryoSerializerTest.java │ │ │ │ └── ProtostuffSerializerTest.java │ │ │ └── trace │ │ │ ├── TraceIdGenerator.java │ │ │ ├── ZipkinReporter.java │ │ │ └── interceptor │ │ │ ├── ClientTraceInterceptor.java │ │ │ └── ServerTraceInterceptor.java │ │ └── resources │ │ └── META-INF │ │ └── serializer │ │ └── com.kama.common.serializer.myserializer.Serializer └── target │ └── classes │ ├── META-INF │ └── serializer │ │ └── com.kama.common.serializer.myserializer.Serializer │ └── com │ └── kama │ ├── KRpcApplication.class │ ├── client │ ├── cache │ │ └── ServiceCache.class │ ├── circuitbreaker │ │ ├── CircuitBreaker$1.class │ │ ├── CircuitBreaker.class │ │ ├── CircuitBreakerProvider.class │ │ └── CircuitBreakerState.class │ ├── netty │ │ ├── HeartbeatHandler.class │ │ ├── MDCChannelHandler.class │ │ ├── NettyClientHandler.class │ │ └── NettyClientInitializer.class │ ├── proxy │ │ └── ClientProxy.class │ ├── retry │ │ ├── GuavaRetry$1.class │ │ └── GuavaRetry.class │ ├── rpcclient │ │ ├── RpcClient.class │ │ └── impl │ │ │ ├── NettyRpcClient.class │ │ │ └── SimpleSocketRpcClient.class │ └── servicecenter │ │ ├── ServiceCenter.class │ │ ├── ZKServiceCenter.class │ │ ├── ZKWatcher │ │ ├── watchZK$1.class │ │ └── watchZK.class │ │ └── balance │ │ ├── LoadBalance.class │ │ └── impl │ │ ├── ConsistencyHashBalance.class │ │ ├── RandomLoadBalance.class │ │ └── RoundLoadBalance.class │ ├── config │ ├── KRpcConfig$KRpcConfigBuilder.class │ ├── KRpcConfig.class │ └── RpcConstant.class │ ├── server │ ├── netty │ │ ├── HeartbeatHandler.class │ │ ├── NettyRpcServerHandler.class │ │ └── NettyServerInitializer.class │ ├── provider │ │ └── ServiceProvider.class │ ├── ratelimit │ │ ├── RateLimit.class │ │ ├── impl │ │ │ └── TokenBucketRateLimitImpl.class │ │ └── provider │ │ │ └── RateLimitProvider.class │ ├── server │ │ ├── RpcServer.class │ │ ├── impl │ │ │ ├── NettyRpcServer.class │ │ │ └── SimpleRpcServer.class │ │ └── work │ │ │ └── WorkThread.class │ └── serviceRegister │ │ ├── ServiceRegister.class │ │ └── impl │ │ └── ZKServiceRegister.class │ ├── test │ ├── balance │ │ ├── ConsistencyHashBalanceTest.class │ │ ├── RandomLoadBalanceTest.class │ │ └── RoundLoadBalanceTest.class │ └── serializer │ │ ├── HessianSerializerTest.class │ │ ├── KryoSerializerTest.class │ │ └── ProtostuffSerializerTest.class │ └── trace │ ├── TraceIdGenerator$SnowflakeIdGenerator.class │ ├── TraceIdGenerator.class │ ├── ZipkinReporter.class │ └── interceptor │ ├── ClientTraceInterceptor.class │ └── ServerTraceInterceptor.class ├── krpc-provider ├── pom.xml ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── kama │ │ │ └── provider │ │ │ ├── ProviderTest.java │ │ │ └── impl │ │ │ └── UserServiceImpl.java │ │ └── resources │ │ └── application.properties └── target │ └── classes │ ├── application.properties │ └── com │ └── kama │ └── provider │ ├── ProviderTest.class │ └── impl │ └── UserServiceImpl.class └── pom.xml /README.assets/1720376325450.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/README.assets/1720376325450.png -------------------------------------------------------------------------------- /README.assets/1720376518663.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/README.assets/1720376518663.png -------------------------------------------------------------------------------- /README.assets/1720376674829.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/README.assets/1720376674829.png -------------------------------------------------------------------------------- /README.assets/1720376759165.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/README.assets/1720376759165.png -------------------------------------------------------------------------------- /README.assets/655c04a02b08474e985ff4bf8a561d12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/README.assets/655c04a02b08474e985ff4bf8a561d12.png -------------------------------------------------------------------------------- /README.assets/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/README.assets/image.png -------------------------------------------------------------------------------- /README.assets/version6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/README.assets/version6.jpg -------------------------------------------------------------------------------- /version1/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /version1/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /version1/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /version1/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /version1/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /version1/src/main/java/part1/Client/TestClient.java: -------------------------------------------------------------------------------- 1 | package part1.Client; 2 | 3 | 4 | import part1.Client.proxy.ClientProxy; 5 | import part1.common.service.UserService; 6 | import part1.common.pojo.User; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/6 18:39 12 | */ 13 | public class TestClient { 14 | public static void main(String[] args) { 15 | ClientProxy clientProxy=new ClientProxy("127.0.0.1",9999); 16 | UserService proxy=clientProxy.getProxy(UserService.class); 17 | 18 | User user = proxy.getUserByUserId(1); 19 | System.out.println("从服务端得到的user="+user.toString()); 20 | 21 | User u=User.builder().id(100).userName("wxx").sex(true).build(); 22 | Integer id = proxy.insertUserId(u); 23 | System.out.println("向服务端插入user的id"+id); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /version1/src/main/java/part1/Server/TestServer.java: -------------------------------------------------------------------------------- 1 | package part1.Server; 2 | 3 | 4 | import part1.Server.server.RpcServer; 5 | import part1.common.service.Impl.UserServiceImpl; 6 | import part1.common.service.UserService; 7 | import part1.Server.server.impl.SimpleRPCRPCServer; 8 | import part1.Server.provider.ServiceProvider; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/11 19:39 14 | */ 15 | public class TestServer { 16 | public static void main(String[] args) { 17 | UserService userService=new UserServiceImpl(); 18 | 19 | ServiceProvider serviceProvider=new ServiceProvider(); 20 | serviceProvider.provideServiceInterface(userService); 21 | 22 | RpcServer rpcServer=new SimpleRPCRPCServer(serviceProvider); 23 | rpcServer.start(9999); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /version1/src/main/java/part1/Server/provider/ServiceProvider.java: -------------------------------------------------------------------------------- 1 | package part1.Server.provider; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/2/16 17:35 10 | */ 11 | //本地服务存放器 12 | public class ServiceProvider { 13 | //集合中存放服务的实例 14 | private Map interfaceProvider; 15 | 16 | public ServiceProvider(){ 17 | this.interfaceProvider=new HashMap<>(); 18 | } 19 | //本地注册服务 20 | 21 | public void provideServiceInterface(Object service){ 22 | String serviceName=service.getClass().getName(); 23 | Class[] interfaceName=service.getClass().getInterfaces(); 24 | 25 | for (Class clazz:interfaceName){ 26 | interfaceProvider.put(clazz.getName(),service); 27 | } 28 | 29 | } 30 | //获取服务实例 31 | public Object getService(String interfaceName){ 32 | return interfaceProvider.get(interfaceName); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /version1/src/main/java/part1/Server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package part1.Server.server; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/2/12 11:26 7 | */ 8 | public interface RpcServer { 9 | //开启监听 10 | void start(int port); 11 | void stop(); 12 | } 13 | -------------------------------------------------------------------------------- /version1/src/main/java/part1/common/Message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/1 18:30 12 | * 定义发送的消息格式 13 | */ 14 | @Data 15 | @Builder 16 | public class RpcRequest implements Serializable { 17 | //服务类名,客户端只知道接口 18 | private String interfaceName; 19 | //调用的方法名 20 | private String methodName; 21 | //参数列表 22 | private Object[] params; 23 | //参数类型 24 | private Class[] paramsType; 25 | } 26 | -------------------------------------------------------------------------------- /version1/src/main/java/part1/common/Message/RpcResponse.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/1 19:18 12 | */ 13 | @Data 14 | @Builder 15 | public class RpcResponse implements Serializable { 16 | //状态信息 17 | private int code; 18 | private String message; 19 | //具体数据 20 | private Object data; 21 | //构造成功信息 22 | public static RpcResponse sussess(Object data){ 23 | return RpcResponse.builder().code(200).data(data).build(); 24 | } 25 | //构造失败信息 26 | public static RpcResponse fail(){ 27 | return RpcResponse.builder().code(500).message("服务器发生错误").build(); 28 | } 29 | } 30 | 31 | -------------------------------------------------------------------------------- /version1/src/main/java/part1/common/pojo/User.java: -------------------------------------------------------------------------------- 1 | package part1.common.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 17:50 14 | */ 15 | @Builder 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class User implements Serializable { 20 | // 客户端和服务端共有的 21 | private Integer id; 22 | private String userName; 23 | private Boolean sex; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /version1/src/main/java/part1/common/service/Impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package part1.common.service.Impl; 2 | 3 | 4 | import part1.common.pojo.User; 5 | import part1.common.service.UserService; 6 | 7 | import java.util.Random; 8 | import java.util.UUID; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 16:28 14 | */ 15 | public class UserServiceImpl implements UserService { 16 | @Override 17 | public User getUserByUserId(Integer id) { 18 | System.out.println("客户端查询了"+id+"的用户"); 19 | // 模拟从数据库中取用户的行为 20 | Random random = new Random(); 21 | User user = User.builder().userName(UUID.randomUUID().toString()) 22 | .id(id) 23 | .sex(random.nextBoolean()).build(); 24 | return user; 25 | } 26 | 27 | @Override 28 | public Integer insertUserId(User user) { 29 | System.out.println("插入数据成功"+user.getUserName()); 30 | return user.getId(); 31 | } 32 | } -------------------------------------------------------------------------------- /version1/src/main/java/part1/common/service/UserService.java: -------------------------------------------------------------------------------- 1 | package part1.common.service; 2 | 3 | 4 | import part1.common.pojo.User; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/1/28 16:27 10 | */ 11 | public interface UserService { 12 | // 客户端通过这个接口调用服务端的实现类 13 | User getUserByUserId(Integer id); 14 | //新增一个功能 15 | Integer insertUserId(User user); 16 | } 17 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/Client/TestClient.java: -------------------------------------------------------------------------------- 1 | package part2.Client; 2 | 3 | 4 | import part2.Client.proxy.ClientProxy; 5 | import part2.common.pojo.User; 6 | import part2.common.service.UserService; 7 | 8 | 9 | /** 10 | * @author wxx 11 | * @version 1.0 12 | * @create 2024/2/6 18:39 13 | */ 14 | public class TestClient { 15 | public static void main(String[] args) { 16 | ClientProxy clientProxy=new ClientProxy("127.0.0.1",9999,0); 17 | UserService proxy=clientProxy.getProxy(UserService.class); 18 | 19 | User user = proxy.getUserByUserId(1); 20 | System.out.println("从服务端得到的user="+user.toString()); 21 | 22 | User u=User.builder().id(100).userName("wxx").sex(true).build(); 23 | Integer id = proxy.insertUserId(u); 24 | System.out.println("向服务端插入user的id"+id); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/Client/rpcClient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package part2.Client.rpcClient; 2 | 3 | import part2.common.Message.RpcRequest; 4 | import part2.common.Message.RpcResponse; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/5/2 18:55 10 | */ 11 | public interface RpcClient { 12 | 13 | //定义底层通信的方法 14 | RpcResponse sendRequest(RpcRequest request); 15 | } 16 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/Server/TestServer.java: -------------------------------------------------------------------------------- 1 | package part2.Server; 2 | 3 | 4 | import part2.Server.server.impl.NettyRPCRPCServer; 5 | import part2.common.service.Impl.UserServiceImpl; 6 | import part2.common.service.UserService; 7 | import part2.Server.provider.ServiceProvider; 8 | import part2.Server.server.RpcServer; 9 | import part2.Server.server.impl.SimpleRPCRPCServer; 10 | 11 | /** 12 | * @author wxx 13 | * @version 1.0 14 | * @create 2024/2/11 19:39 15 | */ 16 | public class TestServer { 17 | public static void main(String[] args) { 18 | UserService userService=new UserServiceImpl(); 19 | 20 | ServiceProvider serviceProvider=new ServiceProvider(); 21 | serviceProvider.provideServiceInterface(userService); 22 | 23 | RpcServer rpcServer=new NettyRPCRPCServer(serviceProvider); 24 | rpcServer.start(9999); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/Server/provider/ServiceProvider.java: -------------------------------------------------------------------------------- 1 | package part2.Server.provider; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/2/16 17:35 10 | */ 11 | public class ServiceProvider { 12 | private Map interfaceProvider; 13 | 14 | public ServiceProvider(){ 15 | this.interfaceProvider=new HashMap<>(); 16 | } 17 | 18 | public void provideServiceInterface(Object service){ 19 | String serviceName=service.getClass().getName(); 20 | Class[] interfaceName=service.getClass().getInterfaces(); 21 | 22 | for (Class clazz:interfaceName){ 23 | interfaceProvider.put(clazz.getName(),service); 24 | } 25 | 26 | } 27 | 28 | public Object getService(String interfaceName){ 29 | return interfaceProvider.get(interfaceName); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/Server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package part2.Server.server; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/2/12 11:26 7 | */ 8 | public interface RpcServer { 9 | void start(int port); 10 | void stop(); 11 | } 12 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/common/Message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package part2.common.Message; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/1 18:30 12 | * 定义发送的消息格式 13 | */ 14 | @Data 15 | @Builder 16 | public class RpcRequest implements Serializable { 17 | //服务类名,客户端只知道接口 18 | private String interfaceName; 19 | //调用的方法名 20 | private String methodName; 21 | //参数列表 22 | private Object[] params; 23 | //参数类型 24 | private Class[] paramsType; 25 | } 26 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/common/Message/RpcResponse.java: -------------------------------------------------------------------------------- 1 | package part2.common.Message; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/1 19:18 12 | */ 13 | @Data 14 | @Builder 15 | public class RpcResponse implements Serializable { 16 | //状态信息 17 | private int code; 18 | private String message; 19 | //具体数据 20 | private Object data; 21 | 22 | public static RpcResponse sussess(Object data){ 23 | return RpcResponse.builder().code(200).data(data).build(); 24 | } 25 | public static RpcResponse fail(){ 26 | return RpcResponse.builder().code(500).message("服务器发生错误").build(); 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/common/pojo/User.java: -------------------------------------------------------------------------------- 1 | package part2.common.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 17:50 14 | */ 15 | @Builder 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class User implements Serializable { 20 | // 客户端和服务端共有的 21 | private Integer id; 22 | private String userName; 23 | private Boolean sex; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /version1/src/main/java/part2/common/service/Impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package part2.common.service.Impl; 2 | 3 | 4 | import part2.common.pojo.User; 5 | import part2.common.service.UserService; 6 | 7 | import java.util.Random; 8 | import java.util.UUID; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 16:28 14 | */ 15 | public class UserServiceImpl implements UserService { 16 | @Override 17 | public User getUserByUserId(Integer id) { 18 | System.out.println("客户端查询了"+id+"的用户"); 19 | // 模拟从数据库中取用户的行为 20 | Random random = new Random(); 21 | User user = User.builder().userName(UUID.randomUUID().toString()) 22 | .id(id) 23 | .sex(random.nextBoolean()).build(); 24 | return user; 25 | } 26 | 27 | @Override 28 | public Integer insertUserId(User user) { 29 | System.out.println("插入数据成功"+user.getUserName()); 30 | return user.getId(); 31 | } 32 | } -------------------------------------------------------------------------------- /version1/src/main/java/part2/common/service/UserService.java: -------------------------------------------------------------------------------- 1 | package part2.common.service; 2 | 3 | 4 | import part2.common.pojo.User; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/1/28 16:27 10 | */ 11 | public interface UserService { 12 | // 客户端通过这个接口调用服务端的实现类 13 | User getUserByUserId(Integer id); 14 | //新增一个功能 15 | Integer insertUserId(User user); 16 | } 17 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/Client/TestClient.java: -------------------------------------------------------------------------------- 1 | package part3.Client; 2 | 3 | 4 | import lombok.extern.slf4j.Slf4j; 5 | import part3.common.pojo.User; 6 | import part3.common.service.UserService; 7 | import part3.Client.proxy.ClientProxy; 8 | 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/6 18:39 14 | */ 15 | 16 | public class TestClient { 17 | public static void main(String[] args) { 18 | ClientProxy clientProxy=new ClientProxy(); 19 | //ClientProxy clientProxy=new part2.Client.proxy.ClientProxy("127.0.0.1",9999,0); 20 | UserService proxy=clientProxy.getProxy(UserService.class); 21 | 22 | User user = proxy.getUserByUserId(1); 23 | System.out.println("从服务端得到的user="+user.toString()); 24 | 25 | User u=User.builder().id(100).userName("wxx").sex(true).build(); 26 | Integer id = proxy.insertUserId(u); 27 | System.out.println("向服务端插入user的id"+id); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/Client/netty/handler/NettyClientHandler.java: -------------------------------------------------------------------------------- 1 | package part3.Client.netty.handler; 2 | 3 | import io.netty.channel.ChannelHandlerContext; 4 | import io.netty.channel.SimpleChannelInboundHandler; 5 | import io.netty.util.AttributeKey; 6 | import part3.common.Message.RpcResponse; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/26 17:29 12 | */ 13 | public class NettyClientHandler extends SimpleChannelInboundHandler { 14 | @Override 15 | protected void channelRead0(ChannelHandlerContext ctx, RpcResponse response) throws Exception { 16 | // 接收到response, 给channel设计别名,让sendRequest里读取response 17 | AttributeKey key = AttributeKey.valueOf("RPCResponse"); 18 | ctx.channel().attr(key).set(response); 19 | ctx.channel().close(); 20 | } 21 | 22 | @Override 23 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 24 | cause.printStackTrace(); 25 | ctx.close(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/Client/rpcClient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package part3.Client.rpcClient; 2 | 3 | import part3.common.Message.RpcRequest; 4 | import part3.common.Message.RpcResponse; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/5/2 18:55 10 | */ 11 | public interface RpcClient { 12 | 13 | //定义底层通信的方法 14 | RpcResponse sendRequest(RpcRequest request); 15 | } 16 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/Client/serviceCenter/ServiceCenter.java: -------------------------------------------------------------------------------- 1 | package part3.Client.serviceCenter; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 21:42 9 | */ 10 | //服务中心接口 11 | public interface ServiceCenter { 12 | // 查询:根据服务名查找地址 13 | InetSocketAddress serviceDiscovery(String serviceName); 14 | } 15 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/Server/TestServer.java: -------------------------------------------------------------------------------- 1 | package part3.Server; 2 | 3 | 4 | import lombok.extern.slf4j.Slf4j; 5 | import part3.Server.server.impl.NettyRPCRPCServer; 6 | import part3.common.service.Impl.UserServiceImpl; 7 | import part3.common.service.UserService; 8 | import part3.Server.provider.ServiceProvider; 9 | import part3.Server.server.RpcServer; 10 | import part3.Server.server.impl.SimpleRPCRPCServer; 11 | 12 | /** 13 | * @author wxx 14 | * @version 1.0 15 | * @create 2024/2/11 19:39 16 | */ 17 | 18 | public class TestServer { 19 | public static void main(String[] args) { 20 | UserService userService=new UserServiceImpl(); 21 | 22 | ServiceProvider serviceProvider=new ServiceProvider("127.0.0.1",9999); 23 | serviceProvider.provideServiceInterface(userService); 24 | 25 | RpcServer rpcServer=new NettyRPCRPCServer(serviceProvider); 26 | rpcServer.start(9999); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/Server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package part3.Server.server; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/2/12 11:26 7 | */ 8 | public interface RpcServer { 9 | void start(int port); 10 | void stop(); 11 | } 12 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/Server/serviceRegister/ServiceRegister.java: -------------------------------------------------------------------------------- 1 | package part3.Server.serviceRegister; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 16:58 9 | */ 10 | // 服务注册接口 11 | public interface ServiceRegister { 12 | // 注册:保存服务与地址。 13 | void register(String serviceName, InetSocketAddress serviceAddress); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/common/Message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package part3.common.Message; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/1 18:30 12 | * 定义发送的消息格式 13 | */ 14 | @Data 15 | @Builder 16 | public class RpcRequest implements Serializable { 17 | //服务类名,客户端只知道接口 18 | private String interfaceName; 19 | //调用的方法名 20 | private String methodName; 21 | //参数列表 22 | private Object[] params; 23 | //参数类型 24 | private Class[] paramsType; 25 | } 26 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/common/Message/RpcResponse.java: -------------------------------------------------------------------------------- 1 | package part3.common.Message; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/1 19:18 12 | */ 13 | @Data 14 | @Builder 15 | public class RpcResponse implements Serializable { 16 | //状态信息 17 | private int code; 18 | private String message; 19 | //具体数据 20 | private Object data; 21 | 22 | public static RpcResponse sussess(Object data){ 23 | return RpcResponse.builder().code(200).data(data).build(); 24 | } 25 | public static RpcResponse fail(){ 26 | return RpcResponse.builder().code(500).message("服务器发生错误").build(); 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/common/pojo/User.java: -------------------------------------------------------------------------------- 1 | package part3.common.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 17:50 14 | */ 15 | @Builder 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class User implements Serializable { 20 | // 客户端和服务端共有的 21 | private Integer id; 22 | private String userName; 23 | private Boolean sex; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /version1/src/main/java/part3/common/service/Impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package part3.common.service.Impl; 2 | 3 | 4 | import part3.common.pojo.User; 5 | import part3.common.service.UserService; 6 | 7 | import java.util.Random; 8 | import java.util.UUID; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 16:28 14 | */ 15 | public class UserServiceImpl implements UserService { 16 | @Override 17 | public User getUserByUserId(Integer id) { 18 | System.out.println("客户端查询了"+id+"的用户"); 19 | // 模拟从数据库中取用户的行为 20 | Random random = new Random(); 21 | User user = User.builder().userName(UUID.randomUUID().toString()) 22 | .id(id) 23 | .sex(random.nextBoolean()).build(); 24 | return user; 25 | } 26 | 27 | @Override 28 | public Integer insertUserId(User user) { 29 | System.out.println("插入数据成功"+user.getUserName()); 30 | return user.getId(); 31 | } 32 | } -------------------------------------------------------------------------------- /version1/src/main/java/part3/common/service/UserService.java: -------------------------------------------------------------------------------- 1 | package part3.common.service; 2 | 3 | 4 | import part3.common.pojo.User; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/1/28 16:27 10 | */ 11 | public interface UserService { 12 | // 客户端通过这个接口调用服务端的实现类 13 | User getUserByUserId(Integer id); 14 | //新增一个功能 15 | Integer insertUserId(User user); 16 | } 17 | -------------------------------------------------------------------------------- /version1/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=ERROR, stdout 2 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 | 4 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 6 | log4j.appender.logfile=org.apache.log4j.FileAppender 7 | log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n 9 | -------------------------------------------------------------------------------- /version1/target/classes/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=ERROR, stdout 2 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 | 4 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 6 | log4j.appender.logfile=org.apache.log4j.FileAppender 7 | log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n 9 | -------------------------------------------------------------------------------- /version1/target/classes/part1/Client/IOClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Client/IOClient.class -------------------------------------------------------------------------------- /version1/target/classes/part1/Client/TestClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Client/TestClient.class -------------------------------------------------------------------------------- /version1/target/classes/part1/Client/proxy/ClientProxy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Client/proxy/ClientProxy.class -------------------------------------------------------------------------------- /version1/target/classes/part1/Server/TestServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Server/TestServer.class -------------------------------------------------------------------------------- /version1/target/classes/part1/Server/provider/ServiceProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Server/provider/ServiceProvider.class -------------------------------------------------------------------------------- /version1/target/classes/part1/Server/server/RpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Server/server/RpcServer.class -------------------------------------------------------------------------------- /version1/target/classes/part1/Server/server/impl/SimpleRPCRPCServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Server/server/impl/SimpleRPCRPCServer.class -------------------------------------------------------------------------------- /version1/target/classes/part1/Server/server/impl/ThreadPoolRPCRPCServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Server/server/impl/ThreadPoolRPCRPCServer.class -------------------------------------------------------------------------------- /version1/target/classes/part1/Server/server/work/WorkThread.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/Server/server/work/WorkThread.class -------------------------------------------------------------------------------- /version1/target/classes/part1/common/Message/RpcRequest$RpcRequestBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/common/Message/RpcRequest$RpcRequestBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part1/common/Message/RpcRequest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/common/Message/RpcRequest.class -------------------------------------------------------------------------------- /version1/target/classes/part1/common/Message/RpcResponse$RpcResponseBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/common/Message/RpcResponse$RpcResponseBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part1/common/Message/RpcResponse.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/common/Message/RpcResponse.class -------------------------------------------------------------------------------- /version1/target/classes/part1/common/pojo/User$UserBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/common/pojo/User$UserBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part1/common/pojo/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/common/pojo/User.class -------------------------------------------------------------------------------- /version1/target/classes/part1/common/service/Impl/UserServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/common/service/Impl/UserServiceImpl.class -------------------------------------------------------------------------------- /version1/target/classes/part1/common/service/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part1/common/service/UserService.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/IOClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/IOClient.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/TestClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/TestClient.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/netty/handler/NettyClientHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/netty/handler/NettyClientHandler.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/netty/nettyInitializer/NettyClientInitializer$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/netty/nettyInitializer/NettyClientInitializer$1.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/netty/nettyInitializer/NettyClientInitializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/netty/nettyInitializer/NettyClientInitializer.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/proxy/ClientProxy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/proxy/ClientProxy.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/rpcClient/RpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/rpcClient/RpcClient.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/rpcClient/impl/NettyRpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/rpcClient/impl/NettyRpcClient.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Client/rpcClient/impl/SimpleSocketRpcCilent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Client/rpcClient/impl/SimpleSocketRpcCilent.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/TestServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/TestServer.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/netty/handler/NettyRPCServerHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/netty/handler/NettyRPCServerHandler.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/netty/nettyInitializer/NettyServerInitializer$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/netty/nettyInitializer/NettyServerInitializer$1.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/netty/nettyInitializer/NettyServerInitializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/netty/nettyInitializer/NettyServerInitializer.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/provider/ServiceProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/provider/ServiceProvider.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/server/RpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/server/RpcServer.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/server/impl/NettyRPCRPCServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/server/impl/NettyRPCRPCServer.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/server/impl/SimpleRPCRPCServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/server/impl/SimpleRPCRPCServer.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/server/impl/ThreadPoolRPCRPCServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/server/impl/ThreadPoolRPCRPCServer.class -------------------------------------------------------------------------------- /version1/target/classes/part2/Server/server/work/WorkThread.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/Server/server/work/WorkThread.class -------------------------------------------------------------------------------- /version1/target/classes/part2/common/Message/RpcRequest$RpcRequestBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/common/Message/RpcRequest$RpcRequestBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part2/common/Message/RpcRequest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/common/Message/RpcRequest.class -------------------------------------------------------------------------------- /version1/target/classes/part2/common/Message/RpcResponse$RpcResponseBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/common/Message/RpcResponse$RpcResponseBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part2/common/Message/RpcResponse.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/common/Message/RpcResponse.class -------------------------------------------------------------------------------- /version1/target/classes/part2/common/pojo/User$UserBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/common/pojo/User$UserBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part2/common/pojo/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/common/pojo/User.class -------------------------------------------------------------------------------- /version1/target/classes/part2/common/service/Impl/UserServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/common/service/Impl/UserServiceImpl.class -------------------------------------------------------------------------------- /version1/target/classes/part2/common/service/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part2/common/service/UserService.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/TestClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/TestClient.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/netty/handler/NettyClientHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/netty/handler/NettyClientHandler.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/netty/nettyInitializer/NettyClientInitializer$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/netty/nettyInitializer/NettyClientInitializer$1.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/netty/nettyInitializer/NettyClientInitializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/netty/nettyInitializer/NettyClientInitializer.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/proxy/ClientProxy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/proxy/ClientProxy.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/rpcClient/RpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/rpcClient/RpcClient.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/rpcClient/impl/NettyRpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/rpcClient/impl/NettyRpcClient.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/rpcClient/impl/SimpleSocketRpcCilent.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/rpcClient/impl/SimpleSocketRpcCilent.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/serviceCenter/ServiceCenter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/serviceCenter/ServiceCenter.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Client/serviceCenter/ZKServiceCenter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Client/serviceCenter/ZKServiceCenter.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/TestServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/TestServer.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/netty/handler/NettyRPCServerHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/netty/handler/NettyRPCServerHandler.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/netty/nettyInitializer/NettyServerInitializer$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/netty/nettyInitializer/NettyServerInitializer$1.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/netty/nettyInitializer/NettyServerInitializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/netty/nettyInitializer/NettyServerInitializer.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/provider/ServiceProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/provider/ServiceProvider.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/server/RpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/server/RpcServer.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/server/impl/NettyRPCRPCServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/server/impl/NettyRPCRPCServer.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/server/impl/SimpleRPCRPCServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/server/impl/SimpleRPCRPCServer.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/server/work/WorkThread.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/server/work/WorkThread.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/serviceRegister/ServiceRegister.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/serviceRegister/ServiceRegister.class -------------------------------------------------------------------------------- /version1/target/classes/part3/Server/serviceRegister/impl/ZKServiceRegister.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/Server/serviceRegister/impl/ZKServiceRegister.class -------------------------------------------------------------------------------- /version1/target/classes/part3/common/Message/RpcRequest$RpcRequestBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/common/Message/RpcRequest$RpcRequestBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part3/common/Message/RpcRequest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/common/Message/RpcRequest.class -------------------------------------------------------------------------------- /version1/target/classes/part3/common/Message/RpcResponse$RpcResponseBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/common/Message/RpcResponse$RpcResponseBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part3/common/Message/RpcResponse.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/common/Message/RpcResponse.class -------------------------------------------------------------------------------- /version1/target/classes/part3/common/pojo/User$UserBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/common/pojo/User$UserBuilder.class -------------------------------------------------------------------------------- /version1/target/classes/part3/common/pojo/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/common/pojo/User.class -------------------------------------------------------------------------------- /version1/target/classes/part3/common/service/Impl/UserServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/common/service/Impl/UserServiceImpl.class -------------------------------------------------------------------------------- /version1/target/classes/part3/common/service/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version1/target/classes/part3/common/service/UserService.class -------------------------------------------------------------------------------- /version2/src/main/java/part1/Client/TestClient.java: -------------------------------------------------------------------------------- 1 | package part1.Client; 2 | 3 | 4 | import part1.Client.proxy.ClientProxy; 5 | import part1.common.service.UserService; 6 | import part1.common.pojo.User; 7 | 8 | 9 | /** 10 | * @author wxx 11 | * @version 1.0 12 | * @create 2024/2/6 18:39 13 | */ 14 | 15 | public class TestClient { 16 | public static void main(String[] args) { 17 | ClientProxy clientProxy=new ClientProxy(); 18 | //ClientProxy clientProxy=new part2.Client.proxy.ClientProxy("127.0.0.1",9999,0); 19 | UserService proxy=clientProxy.getProxy(UserService.class); 20 | 21 | User user = proxy.getUserByUserId(1); 22 | System.out.println("从服务端得到的user="+user.toString()); 23 | 24 | User u=User.builder().id(100).userName("wxx").sex(true).build(); 25 | Integer id = proxy.insertUserId(u); 26 | System.out.println("向服务端插入user的id"+id); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/Client/netty/handler/NettyClientHandler.java: -------------------------------------------------------------------------------- 1 | package part1.Client.netty.handler; 2 | 3 | import io.netty.channel.ChannelHandlerContext; 4 | import io.netty.channel.SimpleChannelInboundHandler; 5 | import io.netty.util.AttributeKey; 6 | import part1.common.Message.RpcResponse; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/26 17:29 12 | */ 13 | public class NettyClientHandler extends SimpleChannelInboundHandler { 14 | @Override 15 | protected void channelRead0(ChannelHandlerContext ctx, RpcResponse response) throws Exception { 16 | // 接收到response, 给channel设计别名,让sendRequest里读取response 17 | AttributeKey key = AttributeKey.valueOf("RPCResponse"); 18 | ctx.channel().attr(key).set(response); 19 | ctx.channel().close(); 20 | } 21 | 22 | @Override 23 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 24 | cause.printStackTrace(); 25 | ctx.close(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/Client/rpcClient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package part1.Client.rpcClient; 2 | 3 | import part1.common.Message.RpcRequest; 4 | import part1.common.Message.RpcResponse; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/5/2 18:55 10 | */ 11 | public interface RpcClient { 12 | 13 | //定义底层通信的方法 14 | RpcResponse sendRequest(RpcRequest request); 15 | } 16 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/Client/serviceCenter/ServiceCenter.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 21:42 9 | */ 10 | //服务中心接口 11 | public interface ServiceCenter { 12 | // 查询:根据服务名查找地址 13 | InetSocketAddress serviceDiscovery(String serviceName); 14 | } 15 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/Server/TestServer.java: -------------------------------------------------------------------------------- 1 | package part1.Server; 2 | 3 | 4 | import part1.Server.provider.ServiceProvider; 5 | import part1.Server.server.impl.NettyRPCRPCServer; 6 | import part1.Server.server.RpcServer; 7 | import part1.common.service.Impl.UserServiceImpl; 8 | import part1.common.service.UserService; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/11 19:39 14 | */ 15 | 16 | public class TestServer { 17 | public static void main(String[] args) { 18 | UserService userService=new UserServiceImpl(); 19 | 20 | ServiceProvider serviceProvider=new ServiceProvider("127.0.0.1",9999); 21 | serviceProvider.provideServiceInterface(userService); 22 | 23 | RpcServer rpcServer=new NettyRPCRPCServer(serviceProvider); 24 | rpcServer.start(9999); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/Server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package part1.Server.server; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/2/12 11:26 7 | */ 8 | public interface RpcServer { 9 | void start(int port); 10 | void stop(); 11 | } 12 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/Server/serviceRegister/ServiceRegister.java: -------------------------------------------------------------------------------- 1 | package part1.Server.serviceRegister; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 16:58 9 | */ 10 | // 服务注册接口 11 | public interface ServiceRegister { 12 | // 注册:保存服务与地址。 13 | void register(String serviceName, InetSocketAddress serviceAddress); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/common/Message/MessageType.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/6/2 22:29 9 | */ 10 | @AllArgsConstructor 11 | public enum MessageType { 12 | REQUEST(0),RESPONSE(1); 13 | private int code; 14 | public int getCode(){ 15 | return code; 16 | } 17 | } -------------------------------------------------------------------------------- /version2/src/main/java/part1/common/Message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 18:30 14 | * 定义发送的消息格式 15 | */ 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | @Data 19 | @Builder 20 | public class RpcRequest implements Serializable { 21 | //服务类名,客户端只知道接口 22 | private String interfaceName; 23 | //调用的方法名 24 | private String methodName; 25 | //参数列表 26 | private Object[] params; 27 | //参数类型 28 | private Class[] paramsType; 29 | } 30 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/common/Message/RpcResponse.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 19:18 14 | */ 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | @Data 18 | @Builder 19 | public class RpcResponse implements Serializable { 20 | //状态信息 21 | private int code; 22 | private String message; 23 | //更新:加入传输数据的类型,以便在自定义序列化器中解析 24 | private Class dataType; 25 | //具体数据 26 | private Object data; 27 | 28 | public static RpcResponse sussess(Object data){ 29 | return RpcResponse.builder().code(200).dataType(data.getClass()).data(data).build(); 30 | } 31 | public static RpcResponse fail(){ 32 | return RpcResponse.builder().code(500).message("服务器发生错误").build(); 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/common/pojo/User.java: -------------------------------------------------------------------------------- 1 | package part1.common.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 17:50 14 | */ 15 | @Builder 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class User implements Serializable { 20 | // 客户端和服务端共有的 21 | private Integer id; 22 | private String userName; 23 | private Boolean sex; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/common/serializer/mySerializer/Serializer.java: -------------------------------------------------------------------------------- 1 | package part1.common.serializer.mySerializer; 2 | 3 | 4 | /** 5 | * @author wxx 6 | * @version 1.0 7 | * @create 2024/6/2 22:31 8 | */ 9 | public interface Serializer { 10 | // 把对象序列化成字节数组 11 | byte[] serialize(Object obj); 12 | // 从字节数组反序列化成消息, 使用java自带序列化方式不用messageType也能得到相应的对象(序列化字节数组里包含类信息) 13 | // 其它方式需指定消息格式,再根据message转化成相应的对象 14 | Object deserialize(byte[] bytes, int messageType); 15 | // 返回使用的序列器,是哪个 16 | // 0:java自带序列化方式, 1: json序列化方式 17 | int getType(); 18 | // 根据序号取出序列化器,暂时有两种实现方式,需要其它方式,实现这个接口即可 19 | static Serializer getSerializerByCode(int code){ 20 | switch (code){ 21 | case 0: 22 | return new ObjectSerializer(); 23 | case 1: 24 | return new JsonSerializer(); 25 | default: 26 | return null; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /version2/src/main/java/part1/common/service/Impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package part1.common.service.Impl; 2 | 3 | 4 | import part1.common.service.UserService; 5 | import part1.common.pojo.User; 6 | 7 | import java.util.Random; 8 | import java.util.UUID; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 16:28 14 | */ 15 | public class UserServiceImpl implements UserService { 16 | @Override 17 | public User getUserByUserId(Integer id) { 18 | System.out.println("客户端查询了"+id+"的用户"); 19 | // 模拟从数据库中取用户的行为 20 | Random random = new Random(); 21 | User user = User.builder().userName(UUID.randomUUID().toString()) 22 | .id(id) 23 | .sex(random.nextBoolean()).build(); 24 | return user; 25 | } 26 | 27 | @Override 28 | public Integer insertUserId(User user) { 29 | System.out.println("插入数据成功"+user.getUserName()); 30 | return user.getId(); 31 | } 32 | } -------------------------------------------------------------------------------- /version2/src/main/java/part1/common/service/UserService.java: -------------------------------------------------------------------------------- 1 | package part1.common.service; 2 | 3 | 4 | import part1.common.pojo.User; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/1/28 16:27 10 | */ 11 | public interface UserService { 12 | // 客户端通过这个接口调用服务端的实现类 13 | User getUserByUserId(Integer id); 14 | //新增一个功能 15 | Integer insertUserId(User user); 16 | } 17 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/Client/TestClient.java: -------------------------------------------------------------------------------- 1 | package part2.Client; 2 | 3 | 4 | import part2.Client.proxy.ClientProxy; 5 | import part2.common.pojo.User; 6 | import part2.common.service.UserService; 7 | 8 | 9 | /** 10 | * @author wxx 11 | * @version 1.0 12 | * @create 2024/2/6 18:39 13 | */ 14 | 15 | public class TestClient { 16 | public static void main(String[] args) throws InterruptedException { 17 | ClientProxy clientProxy=new ClientProxy(); 18 | //ClientProxy clientProxy=new part2.Client.proxy.ClientProxy("127.0.0.1",9999,0); 19 | UserService proxy=clientProxy.getProxy(UserService.class); 20 | 21 | User user = proxy.getUserByUserId(1); 22 | System.out.println("从服务端得到的user="+user.toString()); 23 | 24 | User u=User.builder().id(100).userName("wxx").sex(true).build(); 25 | Integer id = proxy.insertUserId(u); 26 | System.out.println("向服务端插入user的id"+id); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/Client/netty/handler/NettyClientHandler.java: -------------------------------------------------------------------------------- 1 | package part2.Client.netty.handler; 2 | 3 | import io.netty.channel.ChannelHandlerContext; 4 | import io.netty.channel.SimpleChannelInboundHandler; 5 | import io.netty.util.AttributeKey; 6 | import part2.common.Message.RpcResponse; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/26 17:29 12 | */ 13 | public class NettyClientHandler extends SimpleChannelInboundHandler { 14 | @Override 15 | protected void channelRead0(ChannelHandlerContext ctx, RpcResponse response) throws Exception { 16 | // 接收到response, 给channel设计别名,让sendRequest里读取response 17 | AttributeKey key = AttributeKey.valueOf("RPCResponse"); 18 | ctx.channel().attr(key).set(response); 19 | ctx.channel().close(); 20 | } 21 | 22 | @Override 23 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 24 | cause.printStackTrace(); 25 | ctx.close(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/Client/netty/nettyInitializer/NettyClientInitializer.java: -------------------------------------------------------------------------------- 1 | package part2.Client.netty.nettyInitializer; 2 | 3 | 4 | import io.netty.channel.ChannelInitializer; 5 | import io.netty.channel.ChannelPipeline; 6 | import io.netty.channel.socket.SocketChannel; 7 | import part2.Client.netty.handler.NettyClientHandler; 8 | import part2.common.serializer.myCode.MyDecoder; 9 | import part2.common.serializer.myCode.MyEncoder; 10 | import part2.common.serializer.mySerializer.JsonSerializer; 11 | 12 | /** 13 | * @author wxx 14 | * @version 1.0 15 | * @create 2024/2/26 17:26 16 | */ 17 | public class NettyClientInitializer extends ChannelInitializer { 18 | @Override 19 | protected void initChannel(SocketChannel ch) throws Exception { 20 | ChannelPipeline pipeline = ch.pipeline(); 21 | //使用自定义的编/解码器 22 | pipeline.addLast(new MyEncoder(new JsonSerializer())); 23 | pipeline.addLast(new MyDecoder()); 24 | pipeline.addLast(new NettyClientHandler()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/Client/rpcClient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package part2.Client.rpcClient; 2 | 3 | import part2.common.Message.RpcRequest; 4 | import part2.common.Message.RpcResponse; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/5/2 18:55 10 | */ 11 | public interface RpcClient { 12 | 13 | //定义底层通信的方法 14 | RpcResponse sendRequest(RpcRequest request); 15 | } 16 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/Client/serviceCenter/ServiceCenter.java: -------------------------------------------------------------------------------- 1 | package part2.Client.serviceCenter; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 21:42 9 | */ 10 | //服务中心接口 11 | public interface ServiceCenter { 12 | // 查询:根据服务名查找地址 13 | InetSocketAddress serviceDiscovery(String serviceName); 14 | } 15 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/Server/TestServer.java: -------------------------------------------------------------------------------- 1 | package part2.Server; 2 | 3 | 4 | import part2.Server.provider.ServiceProvider; 5 | import part2.Server.server.RpcServer; 6 | import part2.Server.server.impl.NettyRPCRPCServer; 7 | import part2.common.service.Impl.UserServiceImpl; 8 | import part2.common.service.UserService; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/11 19:39 14 | */ 15 | 16 | public class TestServer { 17 | public static void main(String[] args) throws InterruptedException { 18 | UserService userService=new UserServiceImpl(); 19 | 20 | ServiceProvider serviceProvider=new ServiceProvider("127.0.0.1",9999); 21 | 22 | serviceProvider.provideServiceInterface(userService); 23 | 24 | RpcServer rpcServer=new NettyRPCRPCServer(serviceProvider); 25 | rpcServer.start(9999); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/Server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package part2.Server.server; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/2/12 11:26 7 | */ 8 | public interface RpcServer { 9 | void start(int port); 10 | void stop(); 11 | } 12 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/Server/serviceRegister/ServiceRegister.java: -------------------------------------------------------------------------------- 1 | package part2.Server.serviceRegister; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 16:58 9 | */ 10 | // 服务注册接口 11 | public interface ServiceRegister { 12 | // 注册:保存服务与地址。 13 | void register(String serviceName, InetSocketAddress serviceAddress); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/common/Message/MessageType.java: -------------------------------------------------------------------------------- 1 | package part2.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/6/2 22:29 9 | */ 10 | @AllArgsConstructor 11 | public enum MessageType { 12 | REQUEST(0),RESPONSE(1); 13 | private int code; 14 | public int getCode(){ 15 | return code; 16 | } 17 | } -------------------------------------------------------------------------------- /version2/src/main/java/part2/common/Message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package part2.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 18:30 14 | * 定义发送的消息格式 15 | */ 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | @Data 19 | @Builder 20 | public class RpcRequest implements Serializable { 21 | //服务类名,客户端只知道接口 22 | private String interfaceName; 23 | //调用的方法名 24 | private String methodName; 25 | //参数列表 26 | private Object[] params; 27 | //参数类型 28 | private Class[] paramsType; 29 | } 30 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/common/Message/RpcResponse.java: -------------------------------------------------------------------------------- 1 | package part2.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 19:18 14 | */ 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | @Data 18 | @Builder 19 | public class RpcResponse implements Serializable { 20 | //状态信息 21 | private int code; 22 | private String message; 23 | //更新:加入传输数据的类型,以便在自定义序列化器中解析 24 | private Class dataType; 25 | //具体数据 26 | private Object data; 27 | 28 | public static RpcResponse sussess(Object data){ 29 | return RpcResponse.builder().code(200).dataType(data.getClass()).data(data).build(); 30 | } 31 | public static RpcResponse fail(){ 32 | return RpcResponse.builder().code(500).message("服务器发生错误").build(); 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/common/pojo/User.java: -------------------------------------------------------------------------------- 1 | package part2.common.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 17:50 14 | */ 15 | @Builder 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class User implements Serializable { 20 | // 客户端和服务端共有的 21 | private Integer id; 22 | private String userName; 23 | private Boolean sex; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/common/serializer/mySerializer/Serializer.java: -------------------------------------------------------------------------------- 1 | package part2.common.serializer.mySerializer; 2 | 3 | 4 | /** 5 | * @author wxx 6 | * @version 1.0 7 | * @create 2024/6/2 22:31 8 | */ 9 | public interface Serializer { 10 | // 把对象序列化成字节数组 11 | byte[] serialize(Object obj); 12 | // 从字节数组反序列化成消息, 使用java自带序列化方式不用messageType也能得到相应的对象(序列化字节数组里包含类信息) 13 | // 其它方式需指定消息格式,再根据message转化成相应的对象 14 | Object deserialize(byte[] bytes, int messageType); 15 | // 返回使用的序列器,是哪个 16 | // 0:java自带序列化方式, 1: json序列化方式 17 | int getType(); 18 | // 根据序号取出序列化器,暂时有两种实现方式,需要其它方式,实现这个接口即可 19 | static Serializer getSerializerByCode(int code){ 20 | switch (code){ 21 | case 0: 22 | return new ObjectSerializer(); 23 | case 1: 24 | return new JsonSerializer(); 25 | default: 26 | return null; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /version2/src/main/java/part2/common/service/Impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package part2.common.service.Impl; 2 | 3 | 4 | import part2.common.pojo.User; 5 | import part2.common.service.UserService; 6 | 7 | import java.util.Random; 8 | import java.util.UUID; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 16:28 14 | */ 15 | public class UserServiceImpl implements UserService { 16 | @Override 17 | public User getUserByUserId(Integer id) { 18 | System.out.println("客户端查询了"+id+"的用户"); 19 | // 模拟从数据库中取用户的行为 20 | Random random = new Random(); 21 | User user = User.builder().userName(UUID.randomUUID().toString()) 22 | .id(id) 23 | .sex(random.nextBoolean()).build(); 24 | return user; 25 | } 26 | 27 | @Override 28 | public Integer insertUserId(User user) { 29 | System.out.println("插入数据成功"+user.getUserName()); 30 | return user.getId(); 31 | } 32 | } -------------------------------------------------------------------------------- /version2/src/main/java/part2/common/service/UserService.java: -------------------------------------------------------------------------------- 1 | package part2.common.service; 2 | 3 | 4 | import part2.common.pojo.User; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/1/28 16:27 10 | */ 11 | public interface UserService { 12 | // 客户端通过这个接口调用服务端的实现类 13 | User getUserByUserId(Integer id); 14 | //新增一个功能 15 | Integer insertUserId(User user); 16 | } 17 | -------------------------------------------------------------------------------- /version2/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=ERROR, stdout 2 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 | 4 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 6 | log4j.appender.logfile=org.apache.log4j.FileAppender 7 | log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n 9 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Client/TestClient.java: -------------------------------------------------------------------------------- 1 | package part1.Client; 2 | 3 | 4 | import part1.Client.proxy.ClientProxy; 5 | import part1.common.pojo.User; 6 | import part1.common.service.UserService; 7 | 8 | 9 | /** 10 | * @author wxx 11 | * @version 1.0 12 | * @create 2024/2/6 18:39 13 | */ 14 | 15 | public class TestClient { 16 | public static void main(String[] args) throws InterruptedException { 17 | ClientProxy clientProxy=new ClientProxy(); 18 | //ClientProxy clientProxy=new proxy.Client.part1.ClientProxy("127.0.0.1",9999,0); 19 | UserService proxy=clientProxy.getProxy(UserService.class); 20 | 21 | User user = proxy.getUserByUserId(1); 22 | System.out.println("从服务端得到的user="+user.toString()); 23 | 24 | User u=User.builder().id(100).userName("wxx").sex(true).build(); 25 | Integer id = proxy.insertUserId(u); 26 | System.out.println("向服务端插入user的id"+id); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Client/netty/handler/NettyClientHandler.java: -------------------------------------------------------------------------------- 1 | package part1.Client.netty.handler; 2 | 3 | import io.netty.channel.ChannelHandlerContext; 4 | import io.netty.channel.SimpleChannelInboundHandler; 5 | import io.netty.util.AttributeKey; 6 | import part1.common.Message.RpcResponse; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/26 17:29 12 | */ 13 | public class NettyClientHandler extends SimpleChannelInboundHandler { 14 | @Override 15 | protected void channelRead0(ChannelHandlerContext ctx, RpcResponse response) throws Exception { 16 | // 接收到response, 给channel设计别名,让sendRequest里读取response 17 | AttributeKey key = AttributeKey.valueOf("RPCResponse"); 18 | ctx.channel().attr(key).set(response); 19 | ctx.channel().close(); 20 | } 21 | 22 | @Override 23 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 24 | cause.printStackTrace(); 25 | ctx.close(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Client/netty/nettyInitializer/NettyClientInitializer.java: -------------------------------------------------------------------------------- 1 | package part1.Client.netty.nettyInitializer; 2 | 3 | 4 | import io.netty.channel.ChannelInitializer; 5 | import io.netty.channel.ChannelPipeline; 6 | import io.netty.channel.socket.SocketChannel; 7 | import part1.Client.netty.handler.NettyClientHandler; 8 | import part1.common.serializer.myCode.MyDecoder; 9 | import part1.common.serializer.myCode.MyEncoder; 10 | import part1.common.serializer.mySerializer.JsonSerializer; 11 | 12 | /** 13 | * @author wxx 14 | * @version 1.0 15 | * @create 2024/2/26 17:26 16 | */ 17 | public class NettyClientInitializer extends ChannelInitializer { 18 | @Override 19 | protected void initChannel(SocketChannel ch) throws Exception { 20 | ChannelPipeline pipeline = ch.pipeline(); 21 | //使用自定义的编/解码器 22 | pipeline.addLast(new MyEncoder(new JsonSerializer())); 23 | pipeline.addLast(new MyDecoder()); 24 | pipeline.addLast(new NettyClientHandler()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Client/rpcClient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package part1.Client.rpcClient; 2 | 3 | import part1.common.Message.RpcRequest; 4 | import part1.common.Message.RpcResponse; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/5/2 18:55 10 | */ 11 | public interface RpcClient { 12 | 13 | //定义底层通信的方法 14 | RpcResponse sendRequest(RpcRequest request); 15 | } 16 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Client/serviceCenter/ServiceCenter.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 21:42 9 | */ 10 | //服务中心接口 11 | public interface ServiceCenter { 12 | // 查询:根据服务名查找地址 13 | InetSocketAddress serviceDiscovery(String serviceName); 14 | } 15 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Client/serviceCenter/balance/LoadBalance.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter.balance; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/6/19 21:00 9 | * 给服务地址列表,根据不同的负载均衡策略选择一个 10 | */ 11 | public interface LoadBalance { 12 | String balance(List addressList); 13 | void addNode(String node) ; 14 | void delNode(String node); 15 | } -------------------------------------------------------------------------------- /version3/src/main/java/part1/Client/serviceCenter/balance/impl/RandomLoadBalance.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter.balance.impl; 2 | 3 | import part1.Client.serviceCenter.balance.LoadBalance; 4 | 5 | import java.util.List; 6 | import java.util.Random; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/6/19 21:20 12 | * 随机 负载均衡 13 | */ 14 | public class RandomLoadBalance implements LoadBalance { 15 | @Override 16 | public String balance(List addressList) { 17 | Random random=new Random(); 18 | int choose = random.nextInt(addressList.size()); 19 | System.out.println("负载均衡选择了"+choose+"服务器"); 20 | return null; 21 | } 22 | public void addNode(String node){} ; 23 | public void delNode(String node){}; 24 | } 25 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Client/serviceCenter/balance/impl/RoundLoadBalance.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter.balance.impl; 2 | 3 | import part1.Client.serviceCenter.balance.LoadBalance; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author wxx 9 | * @version 1.0 10 | * @create 2024/6/19 21:21 11 | * 轮询 负载均衡 12 | */ 13 | public class RoundLoadBalance implements LoadBalance { 14 | private int choose=-1; 15 | @Override 16 | public String balance(List addressList) { 17 | choose++; 18 | choose=choose%addressList.size(); 19 | System.out.println("负载均衡选择了"+choose+"服务器"); 20 | return addressList.get(choose); 21 | } 22 | public void addNode(String node) {}; 23 | public void delNode(String node){}; 24 | } 25 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Server/TestServer.java: -------------------------------------------------------------------------------- 1 | package part1.Server; 2 | 3 | 4 | import part1.Server.server.impl.NettyRPCRPCServer; 5 | import part1.common.service.Impl.UserServiceImpl; 6 | import part1.Server.provider.ServiceProvider; 7 | import part1.Server.server.RpcServer; 8 | import part1.common.service.UserService; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/11 19:39 14 | */ 15 | 16 | public class TestServer { 17 | public static void main(String[] args) throws InterruptedException { 18 | UserService userService=new UserServiceImpl(); 19 | 20 | ServiceProvider serviceProvider=new ServiceProvider("127.0.0.1",9999); 21 | 22 | serviceProvider.provideServiceInterface(userService); 23 | 24 | RpcServer rpcServer=new NettyRPCRPCServer(serviceProvider); 25 | rpcServer.start(9999); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package part1.Server.server; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/2/12 11:26 7 | */ 8 | public interface RpcServer { 9 | void start(int port); 10 | void stop(); 11 | } 12 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/Server/serviceRegister/ServiceRegister.java: -------------------------------------------------------------------------------- 1 | package part1.Server.serviceRegister; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 16:58 9 | */ 10 | // 服务注册接口 11 | public interface ServiceRegister { 12 | // 注册:保存服务与地址。 13 | void register(String serviceName, InetSocketAddress serviceAddress); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/common/Message/MessageType.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/6/2 22:29 9 | */ 10 | @AllArgsConstructor 11 | public enum MessageType { 12 | REQUEST(0),RESPONSE(1); 13 | private int code; 14 | public int getCode(){ 15 | return code; 16 | } 17 | } -------------------------------------------------------------------------------- /version3/src/main/java/part1/common/Message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 18:30 14 | * 定义发送的消息格式 15 | */ 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | @Data 19 | @Builder 20 | public class RpcRequest implements Serializable { 21 | //服务类名,客户端只知道接口 22 | private String interfaceName; 23 | //调用的方法名 24 | private String methodName; 25 | //参数列表 26 | private Object[] params; 27 | //参数类型 28 | private Class[] paramsType; 29 | } 30 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/common/Message/RpcResponse.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 19:18 14 | */ 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | @Data 18 | @Builder 19 | public class RpcResponse implements Serializable { 20 | //状态信息 21 | private int code; 22 | private String message; 23 | //更新:加入传输数据的类型,以便在自定义序列化器中解析 24 | private Class dataType; 25 | //具体数据 26 | private Object data; 27 | 28 | public static RpcResponse sussess(Object data){ 29 | return RpcResponse.builder().code(200).dataType(data.getClass()).data(data).build(); 30 | } 31 | public static RpcResponse fail(){ 32 | return RpcResponse.builder().code(500).message("服务器发生错误").build(); 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/common/pojo/User.java: -------------------------------------------------------------------------------- 1 | package part1.common.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 17:50 14 | */ 15 | @Builder 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class User implements Serializable { 20 | // 客户端和服务端共有的 21 | private Integer id; 22 | private String userName; 23 | private Boolean sex; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/common/serializer/mySerializer/Serializer.java: -------------------------------------------------------------------------------- 1 | package part1.common.serializer.mySerializer; 2 | 3 | 4 | /** 5 | * @author wxx 6 | * @version 1.0 7 | * @create 2024/6/2 22:31 8 | */ 9 | public interface Serializer { 10 | // 把对象序列化成字节数组 11 | byte[] serialize(Object obj); 12 | // 从字节数组反序列化成消息, 使用java自带序列化方式不用messageType也能得到相应的对象(序列化字节数组里包含类信息) 13 | // 其它方式需指定消息格式,再根据message转化成相应的对象 14 | Object deserialize(byte[] bytes, int messageType); 15 | // 返回使用的序列器,是哪个 16 | // 0:java自带序列化方式, 1: json序列化方式 17 | int getType(); 18 | // 根据序号取出序列化器,暂时有两种实现方式,需要其它方式,实现这个接口即可 19 | static Serializer getSerializerByCode(int code){ 20 | switch (code){ 21 | case 0: 22 | return new ObjectSerializer(); 23 | case 1: 24 | return new JsonSerializer(); 25 | default: 26 | return null; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /version3/src/main/java/part1/common/service/Impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package part1.common.service.Impl; 2 | 3 | 4 | import part1.common.pojo.User; 5 | import part1.common.service.UserService; 6 | 7 | import java.util.Random; 8 | import java.util.UUID; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 16:28 14 | */ 15 | public class UserServiceImpl implements UserService { 16 | @Override 17 | public User getUserByUserId(Integer id) { 18 | System.out.println("客户端查询了"+id+"的用户"); 19 | // 模拟从数据库中取用户的行为 20 | Random random = new Random(); 21 | User user = User.builder().userName(UUID.randomUUID().toString()) 22 | .id(id) 23 | .sex(random.nextBoolean()).build(); 24 | return user; 25 | } 26 | 27 | @Override 28 | public Integer insertUserId(User user) { 29 | System.out.println("插入数据成功"+user.getUserName()); 30 | return user.getId(); 31 | } 32 | } -------------------------------------------------------------------------------- /version3/src/main/java/part1/common/service/UserService.java: -------------------------------------------------------------------------------- 1 | package part1.common.service; 2 | 3 | 4 | import part1.common.pojo.User; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/1/28 16:27 10 | */ 11 | public interface UserService { 12 | // 客户端通过这个接口调用服务端的实现类 13 | User getUserByUserId(Integer id); 14 | //新增一个功能 15 | Integer insertUserId(User user); 16 | } 17 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Client/TestClient.java: -------------------------------------------------------------------------------- 1 | package part2.Client; 2 | 3 | 4 | import part2.Client.proxy.ClientProxy; 5 | import part2.common.pojo.User; 6 | import part2.common.service.UserService; 7 | 8 | 9 | /** 10 | * @author wxx 11 | * @version 1.0 12 | * @create 2024/2/6 18:39 13 | */ 14 | 15 | public class TestClient { 16 | public static void main(String[] args) throws InterruptedException { 17 | ClientProxy clientProxy=new ClientProxy(); 18 | //ClientProxy clientProxy=new proxy.Client.part1.ClientProxy("127.0.0.1",9999,0); 19 | UserService proxy=clientProxy.getProxy(UserService.class); 20 | 21 | User user = proxy.getUserByUserId(1); 22 | System.out.println("从服务端得到的user="+user.toString()); 23 | 24 | User u=User.builder().id(100).userName("wxx").sex(true).build(); 25 | Integer id = proxy.insertUserId(u); 26 | System.out.println("向服务端插入user的id"+id); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Client/netty/handler/NettyClientHandler.java: -------------------------------------------------------------------------------- 1 | package part2.Client.netty.handler; 2 | 3 | import io.netty.channel.ChannelHandlerContext; 4 | import io.netty.channel.SimpleChannelInboundHandler; 5 | import io.netty.util.AttributeKey; 6 | import part2.common.Message.RpcResponse; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/2/26 17:29 12 | */ 13 | public class NettyClientHandler extends SimpleChannelInboundHandler { 14 | @Override 15 | protected void channelRead0(ChannelHandlerContext ctx, RpcResponse response) throws Exception { 16 | // 接收到response, 给channel设计别名,让sendRequest里读取response 17 | AttributeKey key = AttributeKey.valueOf("RPCResponse"); 18 | ctx.channel().attr(key).set(response); 19 | ctx.channel().close(); 20 | } 21 | 22 | @Override 23 | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 24 | cause.printStackTrace(); 25 | ctx.close(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Client/netty/nettyInitializer/NettyClientInitializer.java: -------------------------------------------------------------------------------- 1 | package part2.Client.netty.nettyInitializer; 2 | 3 | 4 | import io.netty.channel.ChannelInitializer; 5 | import io.netty.channel.ChannelPipeline; 6 | import io.netty.channel.socket.SocketChannel; 7 | import part2.Client.netty.handler.NettyClientHandler; 8 | import part2.common.serializer.myCode.MyDecoder; 9 | import part2.common.serializer.myCode.MyEncoder; 10 | import part2.common.serializer.mySerializer.JsonSerializer; 11 | 12 | /** 13 | * @author wxx 14 | * @version 1.0 15 | * @create 2024/2/26 17:26 16 | */ 17 | public class NettyClientInitializer extends ChannelInitializer { 18 | @Override 19 | protected void initChannel(SocketChannel ch) throws Exception { 20 | ChannelPipeline pipeline = ch.pipeline(); 21 | //使用自定义的编/解码器 22 | pipeline.addLast(new MyEncoder(new JsonSerializer())); 23 | pipeline.addLast(new MyDecoder()); 24 | pipeline.addLast(new NettyClientHandler()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Client/rpcClient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package part2.Client.rpcClient; 2 | 3 | import part2.common.Message.RpcRequest; 4 | import part2.common.Message.RpcResponse; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/5/2 18:55 10 | */ 11 | public interface RpcClient { 12 | 13 | //定义底层通信的方法 14 | RpcResponse sendRequest(RpcRequest request); 15 | } 16 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Client/serviceCenter/ServiceCenter.java: -------------------------------------------------------------------------------- 1 | package part2.Client.serviceCenter; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 21:42 9 | */ 10 | //服务中心接口 11 | public interface ServiceCenter { 12 | // 查询:根据服务名查找地址 13 | InetSocketAddress serviceDiscovery(String serviceName); 14 | //判断是否可重试 15 | boolean checkRetry(String serviceName) ; 16 | } 17 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Client/serviceCenter/balance/LoadBalance.java: -------------------------------------------------------------------------------- 1 | package part2.Client.serviceCenter.balance; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/6/19 21:00 9 | * 给服务地址列表,根据不同的负载均衡策略选择一个 10 | */ 11 | public interface LoadBalance { 12 | String balance(List addressList); 13 | void addNode(String node) ; 14 | void delNode(String node); 15 | } -------------------------------------------------------------------------------- /version3/src/main/java/part2/Client/serviceCenter/balance/impl/RandomLoadBalance.java: -------------------------------------------------------------------------------- 1 | package part2.Client.serviceCenter.balance.impl; 2 | 3 | import part2.Client.serviceCenter.balance.LoadBalance; 4 | 5 | import java.util.List; 6 | import java.util.Random; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/6/19 21:20 12 | * 随机 负载均衡 13 | */ 14 | public class RandomLoadBalance implements LoadBalance { 15 | @Override 16 | public String balance(List addressList) { 17 | Random random=new Random(); 18 | int choose = random.nextInt(addressList.size()); 19 | System.out.println("负载均衡选择了"+choose+"服务器"); 20 | return null; 21 | } 22 | public void addNode(String node){} ; 23 | public void delNode(String node){}; 24 | } 25 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Client/serviceCenter/balance/impl/RoundLoadBalance.java: -------------------------------------------------------------------------------- 1 | package part2.Client.serviceCenter.balance.impl; 2 | 3 | import part2.Client.serviceCenter.balance.LoadBalance; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author wxx 9 | * @version 1.0 10 | * @create 2024/6/19 21:21 11 | * 轮询 负载均衡 12 | */ 13 | public class RoundLoadBalance implements LoadBalance { 14 | private int choose=-1; 15 | @Override 16 | public String balance(List addressList) { 17 | choose++; 18 | choose=choose%addressList.size(); 19 | System.out.println("负载均衡选择了"+choose+"服务器"); 20 | return addressList.get(choose); 21 | } 22 | public void addNode(String node) {}; 23 | public void delNode(String node){}; 24 | } 25 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Server/TestServer.java: -------------------------------------------------------------------------------- 1 | package part2.Server; 2 | 3 | 4 | import part2.Server.provider.ServiceProvider; 5 | import part2.Server.server.RpcServer; 6 | import part2.Server.server.impl.NettyRPCRPCServer; 7 | import part2.common.service.Impl.UserServiceImpl; 8 | import part2.common.service.UserService; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/11 19:39 14 | */ 15 | 16 | public class TestServer { 17 | public static void main(String[] args) throws InterruptedException { 18 | UserService userService=new UserServiceImpl(); 19 | 20 | ServiceProvider serviceProvider=new ServiceProvider("127.0.0.1",9999); 21 | 22 | serviceProvider.provideServiceInterface(userService,true); 23 | 24 | RpcServer rpcServer=new NettyRPCRPCServer(serviceProvider); 25 | rpcServer.start(9999); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package part2.Server.server; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/2/12 11:26 7 | */ 8 | public interface RpcServer { 9 | void start(int port); 10 | void stop(); 11 | } 12 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/Server/serviceRegister/ServiceRegister.java: -------------------------------------------------------------------------------- 1 | package part2.Server.serviceRegister; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 16:58 9 | */ 10 | // 服务注册接口 11 | public interface ServiceRegister { 12 | // 注册:保存服务与地址。 13 | void register(String serviceName, InetSocketAddress serviceAddress,boolean canRetry); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/common/Message/MessageType.java: -------------------------------------------------------------------------------- 1 | package part2.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/6/2 22:29 9 | */ 10 | @AllArgsConstructor 11 | public enum MessageType { 12 | REQUEST(0),RESPONSE(1); 13 | private int code; 14 | public int getCode(){ 15 | return code; 16 | } 17 | } -------------------------------------------------------------------------------- /version3/src/main/java/part2/common/Message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package part2.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 18:30 14 | * 定义发送的消息格式 15 | */ 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | @Data 19 | @Builder 20 | public class RpcRequest implements Serializable { 21 | //服务类名,客户端只知道接口 22 | private String interfaceName; 23 | //调用的方法名 24 | private String methodName; 25 | //参数列表 26 | private Object[] params; 27 | //参数类型 28 | private Class[] paramsType; 29 | } 30 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/common/Message/RpcResponse.java: -------------------------------------------------------------------------------- 1 | package part2.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 19:18 14 | */ 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | @Data 18 | @Builder 19 | public class RpcResponse implements Serializable { 20 | //状态信息 21 | private int code; 22 | private String message; 23 | //更新:加入传输数据的类型,以便在自定义序列化器中解析 24 | private Class dataType; 25 | //具体数据 26 | private Object data; 27 | 28 | public static RpcResponse sussess(Object data){ 29 | return RpcResponse.builder().code(200).dataType(data.getClass()).data(data).build(); 30 | } 31 | public static RpcResponse fail(){ 32 | return RpcResponse.builder().code(500).message("服务器发生错误").build(); 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/common/pojo/User.java: -------------------------------------------------------------------------------- 1 | package part2.common.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 17:50 14 | */ 15 | @Builder 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class User implements Serializable { 20 | // 客户端和服务端共有的 21 | private Integer id; 22 | private String userName; 23 | private Boolean sex; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/common/serializer/mySerializer/Serializer.java: -------------------------------------------------------------------------------- 1 | package part2.common.serializer.mySerializer; 2 | 3 | 4 | /** 5 | * @author wxx 6 | * @version 1.0 7 | * @create 2024/6/2 22:31 8 | */ 9 | public interface Serializer { 10 | // 把对象序列化成字节数组 11 | byte[] serialize(Object obj); 12 | // 从字节数组反序列化成消息, 使用java自带序列化方式不用messageType也能得到相应的对象(序列化字节数组里包含类信息) 13 | // 其它方式需指定消息格式,再根据message转化成相应的对象 14 | Object deserialize(byte[] bytes, int messageType); 15 | // 返回使用的序列器,是哪个 16 | // 0:java自带序列化方式, 1: json序列化方式 17 | int getType(); 18 | // 根据序号取出序列化器,暂时有两种实现方式,需要其它方式,实现这个接口即可 19 | static Serializer getSerializerByCode(int code){ 20 | switch (code){ 21 | case 0: 22 | return new ObjectSerializer(); 23 | case 1: 24 | return new JsonSerializer(); 25 | default: 26 | return null; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /version3/src/main/java/part2/common/service/Impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package part2.common.service.Impl; 2 | 3 | 4 | import part2.common.pojo.User; 5 | import part2.common.service.UserService; 6 | 7 | import java.util.Random; 8 | import java.util.UUID; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 16:28 14 | */ 15 | public class UserServiceImpl implements UserService { 16 | @Override 17 | public User getUserByUserId(Integer id) { 18 | System.out.println("客户端查询了"+id+"的用户"); 19 | // 模拟从数据库中取用户的行为 20 | Random random = new Random(); 21 | User user = User.builder().userName(UUID.randomUUID().toString()) 22 | .id(id) 23 | .sex(random.nextBoolean()).build(); 24 | return user; 25 | } 26 | 27 | @Override 28 | public Integer insertUserId(User user) { 29 | System.out.println("插入数据成功"+user.getUserName()); 30 | return user.getId(); 31 | } 32 | } -------------------------------------------------------------------------------- /version3/src/main/java/part2/common/service/UserService.java: -------------------------------------------------------------------------------- 1 | package part2.common.service; 2 | 3 | 4 | import part2.common.pojo.User; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/1/28 16:27 10 | */ 11 | public interface UserService { 12 | // 客户端通过这个接口调用服务端的实现类 13 | User getUserByUserId(Integer id); 14 | //新增一个功能 15 | Integer insertUserId(User user); 16 | } 17 | -------------------------------------------------------------------------------- /version3/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=ERROR, stdout 2 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 | 4 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 6 | log4j.appender.logfile=org.apache.log4j.FileAppender 7 | log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n 9 | -------------------------------------------------------------------------------- /version4/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /version4/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /version4/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /version4/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /version4/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /version4/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Client/circuitBreaker/CircuitBreakerProvider.java: -------------------------------------------------------------------------------- 1 | package part1.Client.circuitBreaker; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/7/3 0:22 10 | */ 11 | public class CircuitBreakerProvider { 12 | private Map circuitBreakerMap=new HashMap<>(); 13 | 14 | public synchronized CircuitBreaker getCircuitBreaker(String serviceName){ 15 | CircuitBreaker circuitBreaker; 16 | if(circuitBreakerMap.containsKey(serviceName)){ 17 | circuitBreaker=circuitBreakerMap.get(serviceName); 18 | }else { 19 | System.out.println("serviceName="+serviceName+"创建一个新的熔断器"); 20 | circuitBreaker=new CircuitBreaker(1,0.5,10000); 21 | circuitBreakerMap.put(serviceName,circuitBreaker); 22 | } 23 | return circuitBreaker; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Client/netty/nettyInitializer/NettyClientInitializer.java: -------------------------------------------------------------------------------- 1 | package part1.Client.netty.nettyInitializer; 2 | 3 | 4 | import io.netty.channel.ChannelInitializer; 5 | import io.netty.channel.ChannelPipeline; 6 | import io.netty.channel.socket.SocketChannel; 7 | import part1.Client.netty.handler.NettyClientHandler; 8 | import part1.common.serializer.myCode.MyDecoder; 9 | import part1.common.serializer.myCode.MyEncoder; 10 | import part1.common.serializer.mySerializer.JsonSerializer; 11 | 12 | /** 13 | * @author wxx 14 | * @version 1.0 15 | * @create 2024/2/26 17:26 16 | */ 17 | public class NettyClientInitializer extends ChannelInitializer { 18 | @Override 19 | protected void initChannel(SocketChannel ch) throws Exception { 20 | ChannelPipeline pipeline = ch.pipeline(); 21 | //使用自定义的编/解码器 22 | pipeline.addLast(new MyEncoder(new JsonSerializer())); 23 | pipeline.addLast(new MyDecoder()); 24 | pipeline.addLast(new NettyClientHandler()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Client/rpcClient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package part1.Client.rpcClient; 2 | 3 | import part1.common.Message.RpcResponse; 4 | import part1.common.Message.RpcRequest; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/5/2 18:55 10 | */ 11 | public interface RpcClient { 12 | 13 | //定义底层通信的方法 14 | RpcResponse sendRequest(RpcRequest request); 15 | } 16 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Client/serviceCenter/ServiceCenter.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 21:42 9 | */ 10 | //服务中心接口 11 | public interface ServiceCenter { 12 | // 查询:根据服务名查找地址 13 | InetSocketAddress serviceDiscovery(String serviceName); 14 | //判断是否可重试 15 | boolean checkRetry(String serviceName) ; 16 | } 17 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Client/serviceCenter/balance/LoadBalance.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter.balance; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/6/19 21:00 9 | * 给服务地址列表,根据不同的负载均衡策略选择一个 10 | */ 11 | public interface LoadBalance { 12 | String balance(List addressList); 13 | void addNode(String node) ; 14 | void delNode(String node); 15 | } -------------------------------------------------------------------------------- /version4/src/main/java/part1/Client/serviceCenter/balance/impl/RandomLoadBalance.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter.balance.impl; 2 | 3 | import part1.Client.serviceCenter.balance.LoadBalance; 4 | 5 | import java.util.List; 6 | import java.util.Random; 7 | 8 | /** 9 | * @author wxx 10 | * @version 1.0 11 | * @create 2024/6/19 21:20 12 | * 随机 负载均衡 13 | */ 14 | public class RandomLoadBalance implements LoadBalance { 15 | @Override 16 | public String balance(List addressList) { 17 | Random random=new Random(); 18 | int choose = random.nextInt(addressList.size()); 19 | System.out.println("负载均衡选择了"+choose+"服务器"); 20 | return null; 21 | } 22 | public void addNode(String node){} ; 23 | public void delNode(String node){}; 24 | } 25 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Client/serviceCenter/balance/impl/RoundLoadBalance.java: -------------------------------------------------------------------------------- 1 | package part1.Client.serviceCenter.balance.impl; 2 | 3 | import part1.Client.serviceCenter.balance.LoadBalance; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author wxx 9 | * @version 1.0 10 | * @create 2024/6/19 21:21 11 | * 轮询 负载均衡 12 | */ 13 | public class RoundLoadBalance implements LoadBalance { 14 | private int choose=-1; 15 | @Override 16 | public String balance(List addressList) { 17 | choose++; 18 | choose=choose%addressList.size(); 19 | System.out.println("负载均衡选择了"+choose+"服务器"); 20 | return addressList.get(choose); 21 | } 22 | public void addNode(String node) {}; 23 | public void delNode(String node){}; 24 | } 25 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Server/TestServer.java: -------------------------------------------------------------------------------- 1 | package part1.Server; 2 | 3 | 4 | import part1.Server.server.impl.NettyRPCRPCServer; 5 | import part1.Server.provider.ServiceProvider; 6 | import part1.Server.server.RpcServer; 7 | import part1.common.service.Impl.UserServiceImpl; 8 | import part1.common.service.UserService; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/11 19:39 14 | */ 15 | 16 | public class TestServer { 17 | public static void main(String[] args) throws InterruptedException { 18 | UserService userService=new UserServiceImpl(); 19 | 20 | ServiceProvider serviceProvider=new ServiceProvider("127.0.0.1",9999); 21 | 22 | serviceProvider.provideServiceInterface(userService,true); 23 | 24 | RpcServer rpcServer=new NettyRPCRPCServer(serviceProvider); 25 | rpcServer.start(9999); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Server/ratelimit/RateLimit.java: -------------------------------------------------------------------------------- 1 | package part1.Server.ratelimit; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/7/2 1:43 7 | */ 8 | public interface RateLimit { 9 | //获取访问许可 10 | boolean getToken(); 11 | } 12 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Server/ratelimit/provider/RateLimitProvider.java: -------------------------------------------------------------------------------- 1 | package part1.Server.ratelimit.provider; 2 | 3 | import part1.Server.ratelimit.RateLimit; 4 | import part1.Server.ratelimit.impl.TokenBucketRateLimitImpl; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | /** 10 | * @author wxx 11 | * @version 1.0 12 | * @create 2024/7/2 1:45 13 | */ 14 | public class RateLimitProvider { 15 | private Map rateLimitMap=new HashMap<>(); 16 | 17 | public RateLimit getRateLimit(String interfaceName){ 18 | if(!rateLimitMap.containsKey(interfaceName)){ 19 | RateLimit rateLimit=new TokenBucketRateLimitImpl(100,10); 20 | rateLimitMap.put(interfaceName,rateLimit); 21 | return rateLimit; 22 | } 23 | return rateLimitMap.get(interfaceName); 24 | } 25 | } -------------------------------------------------------------------------------- /version4/src/main/java/part1/Server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package part1.Server.server; 2 | 3 | /** 4 | * @author wxx 5 | * @version 1.0 6 | * @create 2024/2/12 11:26 7 | */ 8 | public interface RpcServer { 9 | void start(int port); 10 | void stop(); 11 | } 12 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/Server/serviceRegister/ServiceRegister.java: -------------------------------------------------------------------------------- 1 | package part1.Server.serviceRegister; 2 | 3 | import java.net.InetSocketAddress; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/5/3 16:58 9 | */ 10 | // 服务注册接口 11 | public interface ServiceRegister { 12 | // 注册:保存服务与地址。 13 | void register(String serviceName, InetSocketAddress serviceAddress,boolean canRetry); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/common/Message/MessageType.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2024/6/2 22:29 9 | */ 10 | @AllArgsConstructor 11 | public enum MessageType { 12 | REQUEST(0),RESPONSE(1); 13 | private int code; 14 | public int getCode(){ 15 | return code; 16 | } 17 | } -------------------------------------------------------------------------------- /version4/src/main/java/part1/common/Message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 18:30 14 | * 定义发送的消息格式 15 | */ 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | @Data 19 | @Builder 20 | public class RpcRequest implements Serializable { 21 | //服务类名,客户端只知道接口 22 | private String interfaceName; 23 | //调用的方法名 24 | private String methodName; 25 | //参数列表 26 | private Object[] params; 27 | //参数类型 28 | private Class[] paramsType; 29 | } 30 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/common/Message/RpcResponse.java: -------------------------------------------------------------------------------- 1 | package part1.common.Message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/2/1 19:18 14 | */ 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | @Data 18 | @Builder 19 | public class RpcResponse implements Serializable { 20 | //状态信息 21 | private int code; 22 | private String message; 23 | //更新:加入传输数据的类型,以便在自定义序列化器中解析 24 | private Class dataType; 25 | //具体数据 26 | private Object data; 27 | 28 | public static RpcResponse sussess(Object data){ 29 | return RpcResponse.builder().code(200).dataType(data.getClass()).data(data).build(); 30 | } 31 | public static RpcResponse fail(){ 32 | return RpcResponse.builder().code(500).message("服务器发生错误").build(); 33 | } 34 | } 35 | 36 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/common/pojo/User.java: -------------------------------------------------------------------------------- 1 | package part1.common.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 17:50 14 | */ 15 | @Builder 16 | @Data 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class User implements Serializable { 20 | // 客户端和服务端共有的 21 | private Integer id; 22 | private String userName; 23 | private Boolean sex; 24 | } 25 | 26 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/common/serializer/mySerializer/Serializer.java: -------------------------------------------------------------------------------- 1 | package part1.common.serializer.mySerializer; 2 | 3 | 4 | /** 5 | * @author wxx 6 | * @version 1.0 7 | * @create 2024/6/2 22:31 8 | */ 9 | public interface Serializer { 10 | // 把对象序列化成字节数组 11 | byte[] serialize(Object obj); 12 | // 从字节数组反序列化成消息, 使用java自带序列化方式不用messageType也能得到相应的对象(序列化字节数组里包含类信息) 13 | // 其它方式需指定消息格式,再根据message转化成相应的对象 14 | Object deserialize(byte[] bytes, int messageType); 15 | // 返回使用的序列器,是哪个 16 | // 0:java自带序列化方式, 1: json序列化方式 17 | int getType(); 18 | // 根据序号取出序列化器,暂时有两种实现方式,需要其它方式,实现这个接口即可 19 | static Serializer getSerializerByCode(int code){ 20 | switch (code){ 21 | case 0: 22 | return new ObjectSerializer(); 23 | case 1: 24 | return new JsonSerializer(); 25 | default: 26 | return null; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /version4/src/main/java/part1/common/service/Impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package part1.common.service.Impl; 2 | 3 | 4 | import part1.common.pojo.User; 5 | import part1.common.service.UserService; 6 | 7 | import java.util.Random; 8 | import java.util.UUID; 9 | 10 | /** 11 | * @author wxx 12 | * @version 1.0 13 | * @create 2024/1/28 16:28 14 | */ 15 | public class UserServiceImpl implements UserService { 16 | @Override 17 | public User getUserByUserId(Integer id) { 18 | System.out.println("客户端查询了"+id+"的用户"); 19 | // 模拟从数据库中取用户的行为 20 | Random random = new Random(); 21 | User user = User.builder().userName(UUID.randomUUID().toString()) 22 | .id(id) 23 | .sex(random.nextBoolean()).build(); 24 | return user; 25 | } 26 | 27 | @Override 28 | public Integer insertUserId(User user) { 29 | System.out.println("插入数据成功"+user.getUserName()); 30 | return user.getId(); 31 | } 32 | } -------------------------------------------------------------------------------- /version4/src/main/java/part1/common/service/UserService.java: -------------------------------------------------------------------------------- 1 | package part1.common.service; 2 | 3 | 4 | import part1.common.pojo.User; 5 | 6 | /** 7 | * @author wxx 8 | * @version 1.0 9 | * @create 2024/1/28 16:27 10 | */ 11 | public interface UserService { 12 | // 客户端通过这个接口调用服务端的实现类 13 | User getUserByUserId(Integer id); 14 | //新增一个功能 15 | Integer insertUserId(User user); 16 | } 17 | -------------------------------------------------------------------------------- /version4/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=ERROR, stdout 2 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 | 4 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 | log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 6 | log4j.appender.logfile=org.apache.log4j.FileAppender 7 | log4j.appender.logfile.File=target/spring.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 8 | log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n 9 | -------------------------------------------------------------------------------- /version5/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /version5/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /version5/.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /version5/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /version5/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /version5/krpc-api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.kama 8 | version5 9 | 1.0-SNAPSHOT 10 | 11 | 12 | krpc-api 13 | 14 | 15 | 17 16 | 17 17 | UTF-8 18 | 19 | 20 | -------------------------------------------------------------------------------- /version5/krpc-api/src/main/java/com/kama/annotation/Retryable.java: -------------------------------------------------------------------------------- 1 | package com.kama.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Target(ElementType.METHOD) 10 | public @interface Retryable { 11 | 12 | } 13 | 14 | -------------------------------------------------------------------------------- /version5/krpc-api/src/main/java/com/kama/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.kama.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @ClassName User 12 | * @Description User对象 13 | * @Author Tong 14 | * @LastChangeDate 2024-12-05 0:53 15 | * @Version v5.0 16 | */ 17 | @Builder 18 | @Data 19 | @NoArgsConstructor 20 | @AllArgsConstructor 21 | public class User implements Serializable { 22 | // 客户端和服务端共有的 23 | private Integer id; 24 | private String userName; 25 | private Boolean gender; 26 | } 27 | -------------------------------------------------------------------------------- /version5/krpc-api/src/main/java/com/kama/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.kama.service; 2 | 3 | 4 | import com.kama.annotation.Retryable; 5 | import com.kama.pojo.User; 6 | 7 | /** 8 | * @InterfaceName UserService 9 | * @Description 接口 10 | * @Author Tong 11 | * @LastChangeDate 2024-12-05 0:52 12 | * @Version v1.0 13 | */ 14 | 15 | public interface UserService { 16 | 17 | // 查询 18 | @Retryable 19 | User getUserByUserId(Integer id); 20 | 21 | // 新增 22 | @Retryable 23 | Integer insertUserId(User user); 24 | } 25 | -------------------------------------------------------------------------------- /version5/krpc-api/target/classes/com/kama/annotation/Retryable.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-api/target/classes/com/kama/annotation/Retryable.class -------------------------------------------------------------------------------- /version5/krpc-api/target/classes/com/kama/pojo/User$UserBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-api/target/classes/com/kama/pojo/User$UserBuilder.class -------------------------------------------------------------------------------- /version5/krpc-api/target/classes/com/kama/pojo/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-api/target/classes/com/kama/pojo/User.class -------------------------------------------------------------------------------- /version5/krpc-api/target/classes/com/kama/service/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-api/target/classes/com/kama/service/UserService.class -------------------------------------------------------------------------------- /version5/krpc-api/target/krpc-api-1.0-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-api/target/krpc-api-1.0-SNAPSHOT.jar -------------------------------------------------------------------------------- /version5/krpc-api/target/maven-archiver/pom.properties: -------------------------------------------------------------------------------- 1 | #Generated by Maven 2 | #Thu Dec 05 15:18:25 CST 2024 3 | groupId=com.kama 4 | artifactId=krpc-api 5 | version=1.0-SNAPSHOT 6 | -------------------------------------------------------------------------------- /version5/krpc-api/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst: -------------------------------------------------------------------------------- 1 | com\kama\pojo\User$UserBuilder.class 2 | com\kama\pojo\User.class 3 | com\kama\service\UserService.class 4 | -------------------------------------------------------------------------------- /version5/krpc-api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst: -------------------------------------------------------------------------------- 1 | D:\java_stduy\version5\krpc-api\src\main\java\com\kama\pojo\User.java 2 | D:\java_stduy\version5\krpc-api\src\main\java\com\kama\service\UserService.java 3 | -------------------------------------------------------------------------------- /version5/krpc-common/src/main/java/common/exception/SerializeException.java: -------------------------------------------------------------------------------- 1 | package common.exception; 2 | 3 | /** 4 | * @ClassName SerializeException 5 | * @Description ToDo 6 | * @Author Tong 7 | * @LastChangeDate 2024-12-02 19:18 8 | * @Version v1.0 9 | */ 10 | public class SerializeException extends RuntimeException{ 11 | public SerializeException(String message) { 12 | super(message); 13 | } 14 | public SerializeException(String message, Throwable cause) { 15 | super(message, cause); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /version5/krpc-common/src/main/java/common/message/MessageType.java: -------------------------------------------------------------------------------- 1 | package common.message; 2 | 3 | import lombok.AllArgsConstructor; 4 | 5 | @AllArgsConstructor 6 | public enum MessageType { 7 | REQUEST(0), RESPONSE(1); 8 | private int code; 9 | 10 | public int getCode() { 11 | return code; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /version5/krpc-common/src/main/java/common/message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package common.message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @ClassName RpcRequest 12 | * @Description 定义请求消息格式 13 | * @Author Tong 14 | * @LastChangeDate 2024-11-29 10:12 15 | * @Version v5.0 16 | */ 17 | 18 | @NoArgsConstructor 19 | @AllArgsConstructor 20 | @Data 21 | @Builder 22 | public class RpcRequest implements Serializable { 23 | //接口名、方法名、参数列表参数类型 24 | private String interfaceName; 25 | 26 | private String methodName; 27 | 28 | private Object[] params; 29 | 30 | private Class[] paramsType; 31 | } 32 | -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/exception/SerializeException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/exception/SerializeException.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/message/MessageType.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/message/MessageType.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/message/RpcRequest$RpcRequestBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/message/RpcRequest$RpcRequestBuilder.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/message/RpcRequest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/message/RpcRequest.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/message/RpcResponse$RpcResponseBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/message/RpcResponse$RpcResponseBuilder.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/message/RpcResponse.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/message/RpcResponse.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/serializer/mycoder/MyDecoder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/serializer/mycoder/MyDecoder.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/serializer/mycoder/MyEncoder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/serializer/mycoder/MyEncoder.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/serializer/myserializer/HessianSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/serializer/myserializer/HessianSerializer.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/serializer/myserializer/JsonSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/serializer/myserializer/JsonSerializer.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/serializer/myserializer/KryoSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/serializer/myserializer/KryoSerializer.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/serializer/myserializer/ObjectSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/serializer/myserializer/ObjectSerializer.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/serializer/myserializer/ProtostuffSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/serializer/myserializer/ProtostuffSerializer.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/serializer/myserializer/Serializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/serializer/myserializer/Serializer.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/spi/SpiLoader.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/spi/SpiLoader.class -------------------------------------------------------------------------------- /version5/krpc-common/target/classes/common/util/ConfigUtil.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-common/target/classes/common/util/ConfigUtil.class -------------------------------------------------------------------------------- /version5/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTestConfig.java: -------------------------------------------------------------------------------- 1 | package com.kama.consumer; 2 | 3 | 4 | import com.kama.config.KRpcConfig; 5 | import common.util.ConfigUtil; 6 | 7 | /** 8 | * @ClassName ConsumerTestConfig 9 | * @Description 测试配置顶 10 | * @Author Tong 11 | * @LastChangeDate 2024-12-05 11:29 12 | * @Version v1.0 13 | */ 14 | public class ConsumerTestConfig { 15 | public static void main(String[] args) { 16 | KRpcConfig rpc = ConfigUtil.loadConfig(KRpcConfig.class, "rpc"); 17 | System.out.println(rpc); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /version5/krpc-consumer/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | rpc.name=krpc 2 | rpc.version=1.0.0 3 | rpc.port=9999 4 | rpc.serializer=Hessian 5 | rpc.host=localhost 6 | rpc.registry=zookeeper 7 | rpc.loadBalance=ConsistencyHash -------------------------------------------------------------------------------- /version5/krpc-consumer/target/classes/application.properties: -------------------------------------------------------------------------------- 1 | rpc.name=krpc 2 | rpc.version=1.0.0 3 | rpc.port=9999 4 | rpc.serializer=Hessian 5 | rpc.host=localhost 6 | rpc.registry=zookeeper 7 | rpc.loadBalance=ConsistencyHash -------------------------------------------------------------------------------- /version5/krpc-consumer/target/classes/com/kama/consumer/ConsumerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-consumer/target/classes/com/kama/consumer/ConsumerTest.class -------------------------------------------------------------------------------- /version5/krpc-consumer/target/classes/com/kama/consumer/ConsumerTestConfig.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-consumer/target/classes/com/kama/consumer/ConsumerTestConfig.class -------------------------------------------------------------------------------- /version5/krpc-consumer/target/krpc-consumer-1.0-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-consumer/target/krpc-consumer-1.0-SNAPSHOT.jar -------------------------------------------------------------------------------- /version5/krpc-consumer/target/maven-archiver/pom.properties: -------------------------------------------------------------------------------- 1 | #Generated by Maven 2 | #Thu Dec 05 15:19:00 CST 2024 3 | groupId=com.kama 4 | artifactId=krpc-consumer 5 | version=1.0-SNAPSHOT 6 | -------------------------------------------------------------------------------- /version5/krpc-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst: -------------------------------------------------------------------------------- 1 | com\kama\ConsumerTestConfig.class 2 | com\kama\ConsumerApplication.class 3 | -------------------------------------------------------------------------------- /version5/krpc-consumer/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst: -------------------------------------------------------------------------------- 1 | D:\java_stduy\version5\krpc-consumer\src\main\java\com\kama\ConsumerTestConfig.java 2 | D:\java_stduy\version5\krpc-consumer\src\main\java\com\kama\ConsumerApplication.java 3 | -------------------------------------------------------------------------------- /version5/krpc-core/src/main/java/com/kama/client/circuitbreaker/CircuitBreakerProvider.java: -------------------------------------------------------------------------------- 1 | package com.kama.client.circuitbreaker; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | 5 | import java.util.Map; 6 | import java.util.concurrent.ConcurrentHashMap; 7 | 8 | /** 9 | * @ClassName CircuitBreakerState 10 | * @Description 提供熔断器 11 | * @Author Tong 12 | * @LastChangeDate 2024-12-02 10:47 13 | * @Version v5.0 14 | */ 15 | @Slf4j 16 | public class CircuitBreakerProvider { 17 | // 使用线程安全的 ConcurrentHashMap 18 | private Map circuitBreakerMap = new ConcurrentHashMap<>(); 19 | 20 | public synchronized CircuitBreaker getCircuitBreaker(String serviceName) { 21 | // 使用 computeIfAbsent,避免手动同步 22 | return circuitBreakerMap.computeIfAbsent(serviceName, key -> { 23 | log.info("服务 [{}] 不存在熔断器,创建新的熔断器实例", serviceName); 24 | // 创建并返回新熔断器 25 | return new CircuitBreaker(1, 0.5, 10000); 26 | }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /version5/krpc-core/src/main/java/com/kama/client/rpcclient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package com.kama.client.rpcclient; 2 | 3 | 4 | import common.message.RpcRequest; 5 | import common.message.RpcResponse; 6 | 7 | /** 8 | * @InterfaceName RpcClient 9 | * @Description 定义底层通信方法 10 | * @Author Tong 11 | * @LastChangeDate 2024-12-02 10:11 12 | * @Version v5.0 13 | */ 14 | 15 | public interface RpcClient { 16 | RpcResponse sendRequest(RpcRequest request); 17 | void close(); 18 | } 19 | -------------------------------------------------------------------------------- /version5/krpc-core/src/main/java/com/kama/client/servicecenter/ServiceCenter.java: -------------------------------------------------------------------------------- 1 | package com.kama.client.servicecenter; 2 | 3 | 4 | import common.message.RpcRequest; 5 | 6 | import java.net.InetSocketAddress; 7 | 8 | /** 9 | * @InterfaceName ServiceCenter 10 | * @Description 服务中心接口 11 | * @Author Tong 12 | * @LastChangeDate 2024-12-02 10:31 13 | * @Version v5.0 14 | */ 15 | 16 | public interface ServiceCenter { 17 | // 查询:根据服务名查找地址 18 | InetSocketAddress serviceDiscovery(RpcRequest request); 19 | 20 | //判断是否可重试 21 | boolean checkRetry(InetSocketAddress serviceAddress, String methodSignature); 22 | 23 | //关闭客户端 24 | void close(); 25 | } 26 | -------------------------------------------------------------------------------- /version5/krpc-core/src/main/java/com/kama/client/servicecenter/balance/LoadBalance.java: -------------------------------------------------------------------------------- 1 | package com.kama.client.servicecenter.balance; 2 | 3 | 4 | import java.util.List; 5 | 6 | /** 7 | * @InterfaceName LoadBalance 8 | * @Description 负载均衡接口 9 | * @Author Tong 10 | * @LastChangeDate 2024-12-02 10:40 11 | * @Version v5.0 12 | */ 13 | 14 | public interface LoadBalance { 15 | String balance(List addressList); 16 | 17 | void addNode(String node); 18 | 19 | void delNode(String node); 20 | } 21 | -------------------------------------------------------------------------------- /version5/krpc-core/src/main/java/com/kama/config/RpcConstant.java: -------------------------------------------------------------------------------- 1 | package com.kama.config; 2 | 3 | 4 | /** 5 | * @InterfaceName RpcConstants 6 | * @Description 7 | * @Author Tong 8 | * @LastChangeDate 2024-12-05 11:17 9 | * @Version v5.0 10 | */ 11 | 12 | public interface RpcConstant { 13 | 14 | //默认的配置文件前缀 15 | String CONFIG_FILE_PREFIX = "rpc"; 16 | 17 | //默认的服务版本号 18 | String DEFAULT_VERSION_DEFAULT = "1.0.0"; 19 | 20 | } -------------------------------------------------------------------------------- /version5/krpc-core/src/main/java/com/kama/server/ratelimit/RateLimit.java: -------------------------------------------------------------------------------- 1 | package com.kama.server.ratelimit; 2 | 3 | 4 | /** 5 | * @InterfaceName RateLimit 6 | * @Description 限流接口 7 | * @Author Tong 8 | * @LastChangeDate 2024-12-02 10:50 9 | * @Version v5.0 10 | */ 11 | 12 | public interface RateLimit { 13 | //获取访问许可 14 | boolean getToken(); 15 | } 16 | -------------------------------------------------------------------------------- /version5/krpc-core/src/main/java/com/kama/server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package com.kama.server.server; 2 | 3 | 4 | /** 5 | * @InterfaceName RpcServer 6 | * @Description 服务端接口 7 | * @Author Tong 8 | * @LastChangeDate 2024-12-02 10:21 9 | * @Version v1.0 10 | */ 11 | 12 | public interface RpcServer { 13 | void start(int port); 14 | 15 | void stop(); 16 | } 17 | -------------------------------------------------------------------------------- /version5/krpc-core/src/main/java/com/kama/server/serviceRegister/ServiceRegister.java: -------------------------------------------------------------------------------- 1 | package com.kama.server.serviceRegister; 2 | 3 | 4 | import java.net.InetSocketAddress; 5 | 6 | /** 7 | * @InterfaceName ServiceRegister 8 | * @Description 服务注册接口 9 | * @Author Tong 10 | * @LastChangeDate 2024-12-02 10:27 11 | * @Version v5.0 12 | */ 13 | 14 | public interface ServiceRegister { 15 | void register(Class clazz, InetSocketAddress serviceAddress); 16 | } 17 | -------------------------------------------------------------------------------- /version5/krpc-core/src/main/resources/META-INF/serializer/com.kama.common.serializer.myserializer.Serializer: -------------------------------------------------------------------------------- 1 | Hessian=com.kama.common.serializer.myserializer.HessianSerializer 2 | protobuf=com.kama.common.serializer.myserializer.ProtobufSerializer 3 | json=com.kama.common.serializer.myserializer.JsonSerializer 4 | kryo=com.kama.common.serializer.myserializer.KryoSerializer 5 | jdk=com.kama.common.serializer.myserializer.ObjectSerializer 6 | -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/META-INF/serializer/com.kama.common.serializer.myserializer.Serializer: -------------------------------------------------------------------------------- 1 | Hessian=com.kama.common.serializer.myserializer.HessianSerializer 2 | protobuf=com.kama.common.serializer.myserializer.ProtobufSerializer 3 | json=com.kama.common.serializer.myserializer.JsonSerializer 4 | kryo=com.kama.common.serializer.myserializer.KryoSerializer 5 | jdk=com.kama.common.serializer.myserializer.ObjectSerializer 6 | -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/KRpcApplication.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/KRpcApplication.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/cache/ServiceCache.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/cache/ServiceCache.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreaker$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreaker$1.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreaker.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreaker.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreakerProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreakerProvider.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreakerState.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreakerState.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/netty/NettyClientHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/netty/NettyClientHandler.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/netty/NettyClientInitializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/netty/NettyClientInitializer.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/retry/GuavaRetry$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/retry/GuavaRetry$1.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/retry/GuavaRetry.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/retry/GuavaRetry.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/rpcclient/RpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/rpcclient/RpcClient.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/NettyRpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/NettyRpcClient.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/servicecenter/ServiceCenter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/servicecenter/ServiceCenter.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKServiceCenter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKServiceCenter.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKWatcher/watchZK$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKWatcher/watchZK$1.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKWatcher/watchZK.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKWatcher/watchZK.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/servicecenter/balance/LoadBalance.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/servicecenter/balance/LoadBalance.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/ConsistencyHashBalance.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/ConsistencyHashBalance.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/RandomLoadBalance.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/RandomLoadBalance.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/RoundLoadBalance.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/RoundLoadBalance.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/config/KRpcConfig$KRpcConfigBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/config/KRpcConfig$KRpcConfigBuilder.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/config/KRpcConfig.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/config/KRpcConfig.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/config/RpcConstant.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/config/RpcConstant.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/netty/NettyRpcServerHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/netty/NettyRpcServerHandler.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/provider/ServiceProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/provider/ServiceProvider.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/ratelimit/RateLimit.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/ratelimit/RateLimit.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/ratelimit/impl/TokenBucketRateLimitImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/ratelimit/impl/TokenBucketRateLimitImpl.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/ratelimit/provider/RateLimitProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/ratelimit/provider/RateLimitProvider.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/server/RpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/server/RpcServer.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/server/impl/NettyRpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/server/impl/NettyRpcServer.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/server/impl/SimpleRpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/server/impl/SimpleRpcServer.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/server/work/WorkThread.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/server/work/WorkThread.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/serviceRegister/ServiceRegister.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/serviceRegister/ServiceRegister.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/server/serviceRegister/impl/ZKServiceRegister.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/server/serviceRegister/impl/ZKServiceRegister.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/test/balance/ConsistencyHashBalanceTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/test/balance/ConsistencyHashBalanceTest.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/test/balance/RandomLoadBalanceTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/test/balance/RandomLoadBalanceTest.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/test/balance/RoundLoadBalanceTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/test/balance/RoundLoadBalanceTest.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/test/serializer/HessianSerializerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/test/serializer/HessianSerializerTest.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/test/serializer/KryoSerializerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/test/serializer/KryoSerializerTest.class -------------------------------------------------------------------------------- /version5/krpc-core/target/classes/com/kama/test/serializer/ProtostuffSerializerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/classes/com/kama/test/serializer/ProtostuffSerializerTest.class -------------------------------------------------------------------------------- /version5/krpc-core/target/krpc-core-1.0-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-core/target/krpc-core-1.0-SNAPSHOT.jar -------------------------------------------------------------------------------- /version5/krpc-core/target/maven-archiver/pom.properties: -------------------------------------------------------------------------------- 1 | #Generated by Maven 2 | #Thu Dec 05 15:18:59 CST 2024 3 | groupId=com.kama 4 | artifactId=krpc-core 5 | version=1.0-SNAPSHOT 6 | -------------------------------------------------------------------------------- /version5/krpc-provider/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | rpc.name=krpc 2 | rpc.version=1.0.0 3 | rpc.port=9999 4 | rpc.serializer=Hessian 5 | rpc.host=localhost 6 | rpc.registry=zookeeper 7 | rpc.loadBalance=ConsistencyHash 8 | -------------------------------------------------------------------------------- /version5/krpc-provider/target/classes/application.properties: -------------------------------------------------------------------------------- 1 | rpc.name=krpc 2 | rpc.version=1.0.0 3 | rpc.port=9999 4 | rpc.serializer=Hessian 5 | rpc.host=localhost 6 | rpc.registry=zookeeper 7 | rpc.loadBalance=ConsistencyHash 8 | -------------------------------------------------------------------------------- /version5/krpc-provider/target/classes/com/kama/provider/ProviderTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-provider/target/classes/com/kama/provider/ProviderTest.class -------------------------------------------------------------------------------- /version5/krpc-provider/target/classes/com/kama/provider/impl/UserServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-provider/target/classes/com/kama/provider/impl/UserServiceImpl.class -------------------------------------------------------------------------------- /version5/krpc-provider/target/krpc-provider-1.0-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version5/krpc-provider/target/krpc-provider-1.0-SNAPSHOT.jar -------------------------------------------------------------------------------- /version5/krpc-provider/target/maven-archiver/pom.properties: -------------------------------------------------------------------------------- 1 | #Generated by Maven 2 | #Thu Dec 05 20:00:58 CST 2024 3 | groupId=com.kama 4 | artifactId=krpc-provider 5 | version=1.0-SNAPSHOT 6 | -------------------------------------------------------------------------------- /version5/krpc-provider/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst: -------------------------------------------------------------------------------- 1 | com\kama\provider\impl\UserServiceImpl.class 2 | com\kama\provider\impl\ProviderTestConfig.class 3 | com\kama\provider\ProviderExample.class 4 | -------------------------------------------------------------------------------- /version5/krpc-provider/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst: -------------------------------------------------------------------------------- 1 | D:\java_stduy\version5\krpc-provider\src\main\java\com\kama\provider\ProviderExample.java 2 | D:\java_stduy\version5\krpc-provider\src\main\java\com\kama\provider\impl\ProviderTestConfig.java 3 | D:\java_stduy\version5\krpc-provider\src\main\java\com\kama\provider\impl\UserServiceImpl.java 4 | -------------------------------------------------------------------------------- /version6/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /version6/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /version6/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /version6/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /version6/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /version6/krpc-api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | version6 7 | com.kama 8 | 1.0-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | krpc-api 13 | 14 | 15 | 17 16 | 17 17 | UTF-8 18 | 19 | 20 | -------------------------------------------------------------------------------- /version6/krpc-api/src/main/java/com/kama/annotation/Retryable.java: -------------------------------------------------------------------------------- 1 | package com.kama.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Target(ElementType.METHOD) 10 | public @interface Retryable { 11 | 12 | } 13 | 14 | -------------------------------------------------------------------------------- /version6/krpc-api/src/main/java/com/kama/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.kama.pojo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @ClassName User 12 | * @Description User对象 13 | * @Author Tong 14 | * @LastChangeDate 2024-12-05 0:53 15 | * @Version v5.0 16 | */ 17 | @Builder 18 | @Data 19 | @NoArgsConstructor 20 | @AllArgsConstructor 21 | public class User implements Serializable { 22 | // 客户端和服务端共有的 23 | private Integer id; 24 | private String userName; 25 | private Boolean gender; 26 | } 27 | -------------------------------------------------------------------------------- /version6/krpc-api/src/main/java/com/kama/service/UserService.java: -------------------------------------------------------------------------------- 1 | package com.kama.service; 2 | 3 | 4 | import com.kama.annotation.Retryable; 5 | import com.kama.pojo.User; 6 | 7 | /** 8 | * @InterfaceName UserService 9 | * @Description 接口 10 | * @Author Tong 11 | * @LastChangeDate 2024-12-05 0:52 12 | * @Version v1.0 13 | */ 14 | 15 | public interface UserService { 16 | 17 | // 查询 18 | @Retryable 19 | User getUserByUserId(Integer id); 20 | 21 | // 新增 22 | @Retryable 23 | Integer insertUserId(User user); 24 | } 25 | -------------------------------------------------------------------------------- /version6/krpc-api/target/classes/com/kama/annotation/Retryable.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-api/target/classes/com/kama/annotation/Retryable.class -------------------------------------------------------------------------------- /version6/krpc-api/target/classes/com/kama/pojo/User$UserBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-api/target/classes/com/kama/pojo/User$UserBuilder.class -------------------------------------------------------------------------------- /version6/krpc-api/target/classes/com/kama/pojo/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-api/target/classes/com/kama/pojo/User.class -------------------------------------------------------------------------------- /version6/krpc-api/target/classes/com/kama/service/UserService.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-api/target/classes/com/kama/service/UserService.class -------------------------------------------------------------------------------- /version6/krpc-common/src/main/java/common/exception/SerializeException.java: -------------------------------------------------------------------------------- 1 | package common.exception; 2 | 3 | /** 4 | * @ClassName SerializeException 5 | * @Description ToDo 6 | * @Author Tong 7 | * @LastChangeDate 2024-12-02 19:18 8 | * @Version v1.0 9 | */ 10 | public class SerializeException extends RuntimeException{ 11 | public SerializeException(String message) { 12 | super(message); 13 | } 14 | public SerializeException(String message, Throwable cause) { 15 | super(message, cause); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /version6/krpc-common/src/main/java/common/message/MessageType.java: -------------------------------------------------------------------------------- 1 | package common.message; 2 | 3 | import lombok.AllArgsConstructor; 4 | 5 | @AllArgsConstructor 6 | public enum MessageType { 7 | REQUEST(0), RESPONSE(1); 8 | private int code; 9 | 10 | public int getCode() { 11 | return code; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /version6/krpc-common/src/main/java/common/message/RequestType.java: -------------------------------------------------------------------------------- 1 | package common.message; 2 | 3 | import lombok.AllArgsConstructor; 4 | 5 | /** 6 | * @author wxx 7 | * @version 1.0 8 | * @create 2025/2/28 18:32 9 | */ 10 | @AllArgsConstructor 11 | public enum RequestType { 12 | NORMAL(0), HEARTBEAT(1); 13 | private int code; 14 | 15 | public int getCode() { 16 | return code; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /version6/krpc-common/src/main/java/common/message/RpcRequest.java: -------------------------------------------------------------------------------- 1 | package common.message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @ClassName RpcRequest 12 | * @Description 定义请求消息格式 13 | * @Author Tong 14 | * @LastChangeDate 2024-11-29 10:12 15 | * @Version v5.0 16 | */ 17 | 18 | @NoArgsConstructor 19 | @AllArgsConstructor 20 | @Data 21 | @Builder 22 | public class RpcRequest implements Serializable { 23 | //v6新增:请求类型 24 | private RequestType type=RequestType.NORMAL; 25 | //接口名、方法名、参数列表参数类型 26 | private String interfaceName; 27 | 28 | private String methodName; 29 | 30 | private Object[] params; 31 | 32 | private Class[] paramsType; 33 | public static RpcRequest heartBeat() { 34 | return RpcRequest.builder().type(RequestType.HEARTBEAT).build(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/exception/SerializeException.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/exception/SerializeException.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/message/MessageType.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/message/MessageType.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/message/RequestType.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/message/RequestType.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/message/RpcRequest$RpcRequestBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/message/RpcRequest$RpcRequestBuilder.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/message/RpcRequest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/message/RpcRequest.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/message/RpcResponse$RpcResponseBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/message/RpcResponse$RpcResponseBuilder.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/message/RpcResponse.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/message/RpcResponse.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/serializer/mycoder/MyDecoder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/serializer/mycoder/MyDecoder.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/serializer/mycoder/MyEncoder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/serializer/mycoder/MyEncoder.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/serializer/myserializer/HessianSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/serializer/myserializer/HessianSerializer.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/serializer/myserializer/JsonSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/serializer/myserializer/JsonSerializer.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/serializer/myserializer/KryoSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/serializer/myserializer/KryoSerializer.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/serializer/myserializer/ObjectSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/serializer/myserializer/ObjectSerializer.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/serializer/myserializer/ProtostuffSerializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/serializer/myserializer/ProtostuffSerializer.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/serializer/myserializer/Serializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/serializer/myserializer/Serializer.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/spi/SpiLoader.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/spi/SpiLoader.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/trace/TraceContext.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/trace/TraceContext.class -------------------------------------------------------------------------------- /version6/krpc-common/target/classes/common/util/ConfigUtil.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-common/target/classes/common/util/ConfigUtil.class -------------------------------------------------------------------------------- /version6/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTestConfig.java: -------------------------------------------------------------------------------- 1 | package com.kama.consumer; 2 | 3 | 4 | import com.kama.config.KRpcConfig; 5 | import common.util.ConfigUtil; 6 | 7 | /** 8 | * @ClassName ConsumerTestConfig 9 | * @Description 测试配置顶 10 | * @Author Tong 11 | * @LastChangeDate 2024-12-05 11:29 12 | * @Version v1.0 13 | */ 14 | public class ConsumerTestConfig { 15 | public static void main(String[] args) { 16 | KRpcConfig rpc = ConfigUtil.loadConfig(KRpcConfig.class, "rpc"); 17 | System.out.println(rpc); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /version6/krpc-consumer/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | rpc.name=krpc 2 | rpc.version=1.0.0 3 | rpc.port=9999 4 | rpc.serializer=Hessian 5 | rpc.host=localhost 6 | rpc.registry=zookeeper 7 | rpc.loadBalance=ConsistencyHash -------------------------------------------------------------------------------- /version6/krpc-consumer/target/classes/application.properties: -------------------------------------------------------------------------------- 1 | rpc.name=krpc 2 | rpc.version=1.0.0 3 | rpc.port=9999 4 | rpc.serializer=Hessian 5 | rpc.host=localhost 6 | rpc.registry=zookeeper 7 | rpc.loadBalance=ConsistencyHash -------------------------------------------------------------------------------- /version6/krpc-consumer/target/classes/com/kama/consumer/ConsumerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-consumer/target/classes/com/kama/consumer/ConsumerTest.class -------------------------------------------------------------------------------- /version6/krpc-consumer/target/classes/com/kama/consumer/ConsumerTestConfig.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-consumer/target/classes/com/kama/consumer/ConsumerTestConfig.class -------------------------------------------------------------------------------- /version6/krpc-core/src/main/java/com/kama/client/circuitbreaker/CircuitBreakerProvider.java: -------------------------------------------------------------------------------- 1 | package com.kama.client.circuitbreaker; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | 5 | import java.util.Map; 6 | import java.util.concurrent.ConcurrentHashMap; 7 | 8 | /** 9 | * @ClassName CircuitBreakerState 10 | * @Description 提供熔断器 11 | * @Author Tong 12 | * @LastChangeDate 2024-12-02 10:47 13 | * @Version v5.0 14 | */ 15 | @Slf4j 16 | public class CircuitBreakerProvider { 17 | // 使用线程安全的 ConcurrentHashMap 18 | private Map circuitBreakerMap = new ConcurrentHashMap<>(); 19 | 20 | public synchronized CircuitBreaker getCircuitBreaker(String serviceName) { 21 | // 使用 computeIfAbsent,避免手动同步 22 | return circuitBreakerMap.computeIfAbsent(serviceName, key -> { 23 | log.info("服务 [{}] 不存在熔断器,创建新的熔断器实例", serviceName); 24 | // 创建并返回新熔断器 25 | return new CircuitBreaker(1, 0.5, 10000); 26 | }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /version6/krpc-core/src/main/java/com/kama/client/rpcclient/RpcClient.java: -------------------------------------------------------------------------------- 1 | package com.kama.client.rpcclient; 2 | 3 | 4 | import common.message.RpcRequest; 5 | import common.message.RpcResponse; 6 | 7 | /** 8 | * @InterfaceName RpcClient 9 | * @Description 定义底层通信方法 10 | * @Author Tong 11 | * @LastChangeDate 2024-12-02 10:11 12 | * @Version v5.0 13 | */ 14 | 15 | public interface RpcClient { 16 | RpcResponse sendRequest(RpcRequest request); 17 | void close(); 18 | } 19 | -------------------------------------------------------------------------------- /version6/krpc-core/src/main/java/com/kama/client/servicecenter/ServiceCenter.java: -------------------------------------------------------------------------------- 1 | package com.kama.client.servicecenter; 2 | 3 | 4 | import common.message.RpcRequest; 5 | 6 | import java.net.InetSocketAddress; 7 | 8 | /** 9 | * @InterfaceName ServiceCenter 10 | * @Description 服务中心接口 11 | * @Author Tong 12 | * @LastChangeDate 2024-12-02 10:31 13 | * @Version v5.0 14 | */ 15 | 16 | public interface ServiceCenter { 17 | // 查询:根据服务名查找地址 18 | InetSocketAddress serviceDiscovery(RpcRequest request); 19 | 20 | //判断是否可重试 21 | boolean checkRetry(InetSocketAddress serviceAddress, String methodSignature); 22 | 23 | //关闭客户端 24 | void close(); 25 | } 26 | -------------------------------------------------------------------------------- /version6/krpc-core/src/main/java/com/kama/client/servicecenter/balance/LoadBalance.java: -------------------------------------------------------------------------------- 1 | package com.kama.client.servicecenter.balance; 2 | 3 | 4 | import java.util.List; 5 | 6 | /** 7 | * @InterfaceName LoadBalance 8 | * @Description 负载均衡接口 9 | * @Author Tong 10 | * @LastChangeDate 2024-12-02 10:40 11 | * @Version v5.0 12 | */ 13 | 14 | public interface LoadBalance { 15 | String balance(List addressList); 16 | 17 | void addNode(String node); 18 | 19 | void delNode(String node); 20 | } 21 | -------------------------------------------------------------------------------- /version6/krpc-core/src/main/java/com/kama/config/RpcConstant.java: -------------------------------------------------------------------------------- 1 | package com.kama.config; 2 | 3 | 4 | /** 5 | * @InterfaceName RpcConstants 6 | * @Description 7 | * @Author Tong 8 | * @LastChangeDate 2024-12-05 11:17 9 | * @Version v5.0 10 | */ 11 | 12 | public interface RpcConstant { 13 | 14 | //默认的配置文件前缀 15 | String CONFIG_FILE_PREFIX = "rpc"; 16 | 17 | //默认的服务版本号 18 | String DEFAULT_VERSION_DEFAULT = "1.0.0"; 19 | 20 | } -------------------------------------------------------------------------------- /version6/krpc-core/src/main/java/com/kama/server/ratelimit/RateLimit.java: -------------------------------------------------------------------------------- 1 | package com.kama.server.ratelimit; 2 | 3 | 4 | /** 5 | * @InterfaceName RateLimit 6 | * @Description 限流接口 7 | * @Author Tong 8 | * @LastChangeDate 2024-12-02 10:50 9 | * @Version v5.0 10 | */ 11 | 12 | public interface RateLimit { 13 | //获取访问许可 14 | boolean getToken(); 15 | } 16 | -------------------------------------------------------------------------------- /version6/krpc-core/src/main/java/com/kama/server/server/RpcServer.java: -------------------------------------------------------------------------------- 1 | package com.kama.server.server; 2 | 3 | 4 | /** 5 | * @InterfaceName RpcServer 6 | * @Description 服务端接口 7 | * @Author Tong 8 | * @LastChangeDate 2024-12-02 10:21 9 | * @Version v1.0 10 | */ 11 | 12 | public interface RpcServer { 13 | void start(int port); 14 | 15 | void stop(); 16 | } 17 | -------------------------------------------------------------------------------- /version6/krpc-core/src/main/java/com/kama/server/serviceRegister/ServiceRegister.java: -------------------------------------------------------------------------------- 1 | package com.kama.server.serviceRegister; 2 | 3 | 4 | import java.net.InetSocketAddress; 5 | 6 | /** 7 | * @InterfaceName ServiceRegister 8 | * @Description 服务注册接口 9 | * @Author Tong 10 | * @LastChangeDate 2024-12-02 10:27 11 | * @Version v5.0 12 | */ 13 | 14 | public interface ServiceRegister { 15 | void register(Class clazz, InetSocketAddress serviceAddress); 16 | } 17 | -------------------------------------------------------------------------------- /version6/krpc-core/src/main/resources/META-INF/serializer/com.kama.common.serializer.myserializer.Serializer: -------------------------------------------------------------------------------- 1 | Hessian=com.kama.common.serializer.myserializer.HessianSerializer 2 | protobuf=com.kama.common.serializer.myserializer.ProtobufSerializer 3 | json=com.kama.common.serializer.myserializer.JsonSerializer 4 | kryo=com.kama.common.serializer.myserializer.KryoSerializer 5 | jdk=com.kama.common.serializer.myserializer.ObjectSerializer 6 | -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/META-INF/serializer/com.kama.common.serializer.myserializer.Serializer: -------------------------------------------------------------------------------- 1 | Hessian=com.kama.common.serializer.myserializer.HessianSerializer 2 | protobuf=com.kama.common.serializer.myserializer.ProtobufSerializer 3 | json=com.kama.common.serializer.myserializer.JsonSerializer 4 | kryo=com.kama.common.serializer.myserializer.KryoSerializer 5 | jdk=com.kama.common.serializer.myserializer.ObjectSerializer 6 | -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/KRpcApplication.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/KRpcApplication.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/cache/ServiceCache.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/cache/ServiceCache.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreaker$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreaker$1.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreaker.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreaker.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreakerProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreakerProvider.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreakerState.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/circuitbreaker/CircuitBreakerState.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/netty/HeartbeatHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/netty/HeartbeatHandler.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/netty/MDCChannelHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/netty/MDCChannelHandler.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/netty/NettyClientHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/netty/NettyClientHandler.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/netty/NettyClientInitializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/netty/NettyClientInitializer.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/retry/GuavaRetry$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/retry/GuavaRetry$1.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/retry/GuavaRetry.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/retry/GuavaRetry.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/rpcclient/RpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/rpcclient/RpcClient.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/rpcclient/impl/NettyRpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/rpcclient/impl/NettyRpcClient.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/servicecenter/ServiceCenter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/servicecenter/ServiceCenter.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/servicecenter/ZKServiceCenter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/servicecenter/ZKServiceCenter.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/servicecenter/ZKWatcher/watchZK$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/servicecenter/ZKWatcher/watchZK$1.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/servicecenter/ZKWatcher/watchZK.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/servicecenter/ZKWatcher/watchZK.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/servicecenter/balance/LoadBalance.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/servicecenter/balance/LoadBalance.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/ConsistencyHashBalance.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/ConsistencyHashBalance.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/RandomLoadBalance.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/RandomLoadBalance.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/RoundLoadBalance.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/client/servicecenter/balance/impl/RoundLoadBalance.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/config/KRpcConfig$KRpcConfigBuilder.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/config/KRpcConfig$KRpcConfigBuilder.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/config/KRpcConfig.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/config/KRpcConfig.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/config/RpcConstant.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/config/RpcConstant.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/netty/HeartbeatHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/netty/HeartbeatHandler.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/netty/NettyRpcServerHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/netty/NettyRpcServerHandler.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/provider/ServiceProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/provider/ServiceProvider.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/ratelimit/RateLimit.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/ratelimit/RateLimit.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/ratelimit/impl/TokenBucketRateLimitImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/ratelimit/impl/TokenBucketRateLimitImpl.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/ratelimit/provider/RateLimitProvider.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/ratelimit/provider/RateLimitProvider.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/server/RpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/server/RpcServer.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/server/impl/NettyRpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/server/impl/NettyRpcServer.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/server/impl/SimpleRpcServer.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/server/impl/SimpleRpcServer.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/server/work/WorkThread.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/server/work/WorkThread.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/serviceRegister/ServiceRegister.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/serviceRegister/ServiceRegister.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/server/serviceRegister/impl/ZKServiceRegister.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/server/serviceRegister/impl/ZKServiceRegister.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/test/balance/ConsistencyHashBalanceTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/test/balance/ConsistencyHashBalanceTest.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/test/balance/RandomLoadBalanceTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/test/balance/RandomLoadBalanceTest.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/test/balance/RoundLoadBalanceTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/test/balance/RoundLoadBalanceTest.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/test/serializer/HessianSerializerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/test/serializer/HessianSerializerTest.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/test/serializer/KryoSerializerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/test/serializer/KryoSerializerTest.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/test/serializer/ProtostuffSerializerTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/test/serializer/ProtostuffSerializerTest.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator$SnowflakeIdGenerator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator$SnowflakeIdGenerator.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/trace/ZipkinReporter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/trace/ZipkinReporter.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/trace/interceptor/ClientTraceInterceptor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/trace/interceptor/ClientTraceInterceptor.class -------------------------------------------------------------------------------- /version6/krpc-core/target/classes/com/kama/trace/interceptor/ServerTraceInterceptor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-core/target/classes/com/kama/trace/interceptor/ServerTraceInterceptor.class -------------------------------------------------------------------------------- /version6/krpc-provider/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | rpc.name=krpc 2 | rpc.version=1.0.0 3 | rpc.port=9999 4 | rpc.serializer=Hessian 5 | rpc.host=localhost 6 | rpc.registry=zookeeper 7 | rpc.loadBalance=ConsistencyHash 8 | -------------------------------------------------------------------------------- /version6/krpc-provider/target/classes/application.properties: -------------------------------------------------------------------------------- 1 | rpc.name=krpc 2 | rpc.version=1.0.0 3 | rpc.port=9999 4 | rpc.serializer=Hessian 5 | rpc.host=localhost 6 | rpc.registry=zookeeper 7 | rpc.loadBalance=ConsistencyHash 8 | -------------------------------------------------------------------------------- /version6/krpc-provider/target/classes/com/kama/provider/ProviderTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-provider/target/classes/com/kama/provider/ProviderTest.class -------------------------------------------------------------------------------- /version6/krpc-provider/target/classes/com/kama/provider/impl/UserServiceImpl.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/youngyangyang04/RPC-Java/f7767c39d2f8d4ad26a37ae2821d6cd043b7f24d/version6/krpc-provider/target/classes/com/kama/provider/impl/UserServiceImpl.class --------------------------------------------------------------------------------