├── 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 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
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 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/version4/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
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 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/version5/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
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 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/version6/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
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
--------------------------------------------------------------------------------