diff --git a/version5/krpc-api/target/classes/com/kama/service/UserService.class b/version5/krpc-api/target/classes/com/kama/service/UserService.class index b95b247..eaee35f 100644 Binary files a/version5/krpc-api/target/classes/com/kama/service/UserService.class and b/version5/krpc-api/target/classes/com/kama/service/UserService.class differ diff --git a/version5/krpc-common/src/main/java/common/serializer/myserializer/Serializer.java b/version5/krpc-common/src/main/java/common/serializer/myserializer/Serializer.java index eb4b097..fe7fe78 100644 --- a/version5/krpc-common/src/main/java/common/serializer/myserializer/Serializer.java +++ b/version5/krpc-common/src/main/java/common/serializer/myserializer/Serializer.java @@ -20,16 +20,19 @@ public interface Serializer { int getType(); + // 定义静态常量 serializerMap + static final Map serializerMap = new HashMap<>(); + // 使用 Map 存储序列化器 static Serializer getSerializerByCode(int code) { // 静态映射,保证只初始化一次 - Map serializerMap = new HashMap<>(); - serializerMap.put(0, new ObjectSerializer()); - serializerMap.put(1, new JsonSerializer()); - serializerMap.put(2, new KryoSerializer()); - serializerMap.put(3, new HessianSerializer()); - serializerMap.put(4, new ProtostuffSerializer()); - + if(serializerMap.isEmpty()) { + serializerMap.put(0, new ObjectSerializer()); + serializerMap.put(1, new JsonSerializer()); + serializerMap.put(2, new KryoSerializer()); + serializerMap.put(3, new HessianSerializer()); + serializerMap.put(4, new ProtostuffSerializer()); + } return serializerMap.get(code); // 如果不存在,则返回 null } } diff --git a/version5/krpc-common/target/classes/common/serializer/myserializer/JsonSerializer.class b/version5/krpc-common/target/classes/common/serializer/myserializer/JsonSerializer.class index a9726a3..ad4d6a4 100644 Binary files a/version5/krpc-common/target/classes/common/serializer/myserializer/JsonSerializer.class and b/version5/krpc-common/target/classes/common/serializer/myserializer/JsonSerializer.class differ diff --git a/version5/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTest.java b/version5/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTest.java index c04606a..ab8bb3a 100644 --- a/version5/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTest.java +++ b/version5/krpc-consumer/src/main/java/com/kama/consumer/ConsumerTest.java @@ -61,6 +61,7 @@ public class ConsumerTest { // Gracefully shutdown the executor service executorService.shutdown(); + clientProxy.close(); } } diff --git a/version5/krpc-core/src/main/java/com/kama/client/proxy/ClientProxy.java b/version5/krpc-core/src/main/java/com/kama/client/proxy/ClientProxy.java index e4f9f60..6265e83 100644 --- a/version5/krpc-core/src/main/java/com/kama/client/proxy/ClientProxy.java +++ b/version5/krpc-core/src/main/java/com/kama/client/proxy/ClientProxy.java @@ -109,4 +109,11 @@ public class ClientProxy implements InvocationHandler { } return sb.toString(); } + + //关闭创建的资源 + //注:如果在需要C-S保持长连接的场景下无需调用close方法 + public void close(){ + rpcClient.close(); + serviceCenter.close(); + } } diff --git a/version5/krpc-core/src/main/java/com/kama/client/rpcclient/RpcClient.java b/version5/krpc-core/src/main/java/com/kama/client/rpcclient/RpcClient.java index 80a4255..246cc50 100644 --- a/version5/krpc-core/src/main/java/com/kama/client/rpcclient/RpcClient.java +++ b/version5/krpc-core/src/main/java/com/kama/client/rpcclient/RpcClient.java @@ -14,4 +14,5 @@ import common.message.RpcResponse; public interface RpcClient { RpcResponse sendRequest(RpcRequest request); + void close(); } diff --git a/version5/krpc-core/src/main/java/com/kama/client/rpcclient/impl/NettyRpcClient.java b/version5/krpc-core/src/main/java/com/kama/client/rpcclient/impl/NettyRpcClient.java index 7347161..baf92e7 100644 --- a/version5/krpc-core/src/main/java/com/kama/client/rpcclient/impl/NettyRpcClient.java +++ b/version5/krpc-core/src/main/java/com/kama/client/rpcclient/impl/NettyRpcClient.java @@ -68,7 +68,6 @@ public class NettyRpcClient implements RpcClient { // 其它场景也可以选择添加监听器的方式来异步获取结果 channelFuture.addListener... AttributeKey key = AttributeKey.valueOf("RPCResponse"); RpcResponse response = channel.attr(key).get(); - if (response == null) { log.error("服务响应为空,可能是请求失败或超时"); return RpcResponse.fail("服务响应为空"); @@ -82,14 +81,13 @@ public class NettyRpcClient implements RpcClient { } catch (Exception e) { log.error("发送请求时发生异常: {}", e.getMessage(), e); } finally { - // 连接断开后,优雅地关闭 Netty 资源 - shutdown(); + // } return RpcResponse.fail("请求失败"); } // 优雅关闭 Netty 资源 - private void shutdown() { + public void close() { try { if (eventLoopGroup != null) { eventLoopGroup.shutdownGracefully().sync(); diff --git a/version5/krpc-core/src/main/java/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.java b/version5/krpc-core/src/main/java/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.java index 589cc98..ddcaec7 100644 --- a/version5/krpc-core/src/main/java/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.java +++ b/version5/krpc-core/src/main/java/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.java @@ -54,4 +54,9 @@ public class SimpleSocketRpcClient implements RpcClient { return response; } + + @Override + public void close() { + + } } diff --git a/version5/krpc-core/src/main/java/com/kama/client/servicecenter/ServiceCenter.java b/version5/krpc-core/src/main/java/com/kama/client/servicecenter/ServiceCenter.java index c077265..9ebcb53 100644 --- a/version5/krpc-core/src/main/java/com/kama/client/servicecenter/ServiceCenter.java +++ b/version5/krpc-core/src/main/java/com/kama/client/servicecenter/ServiceCenter.java @@ -19,4 +19,7 @@ public interface ServiceCenter { //判断是否可重试 boolean checkRetry(InetSocketAddress serviceAddress, String methodSignature); + + //关闭客户端 + void close(); } diff --git a/version5/krpc-core/src/main/java/com/kama/client/servicecenter/ZKServiceCenter.java b/version5/krpc-core/src/main/java/com/kama/client/servicecenter/ZKServiceCenter.java index c974f90..14d74b2 100644 --- a/version5/krpc-core/src/main/java/com/kama/client/servicecenter/ZKServiceCenter.java +++ b/version5/krpc-core/src/main/java/com/kama/client/servicecenter/ZKServiceCenter.java @@ -104,6 +104,11 @@ public class ZKServiceCenter implements ServiceCenter { return retryServiceCache.contains(methodSignature); } + @Override + public void close() { + client.close(); + } + // 将InetSocketAddress解析为格式为ip:port的字符串 private String getServiceAddress(InetSocketAddress serverAddress){ return serverAddress.getHostName() + ":" + serverAddress.getPort(); diff --git a/version5/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class b/version5/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class index 680b45a..de348de 100644 Binary files a/version5/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class and b/version5/krpc-core/target/classes/com/kama/client/proxy/ClientProxy.class differ diff --git a/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/NettyRpcClient.class b/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/NettyRpcClient.class index 9b54f65..ae21228 100644 Binary files a/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/NettyRpcClient.class and b/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/NettyRpcClient.class differ diff --git a/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.class b/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.class index 8413ea0..85d5363 100644 Binary files a/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.class and b/version5/krpc-core/target/classes/com/kama/client/rpcclient/impl/SimpleSocketRpcClient.class differ diff --git a/version5/krpc-core/target/classes/com/kama/client/servicecenter/ServiceCenter.class b/version5/krpc-core/target/classes/com/kama/client/servicecenter/ServiceCenter.class index fec3499..fce976e 100644 Binary files a/version5/krpc-core/target/classes/com/kama/client/servicecenter/ServiceCenter.class and b/version5/krpc-core/target/classes/com/kama/client/servicecenter/ServiceCenter.class differ diff --git a/version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKServiceCenter.class b/version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKServiceCenter.class index b5c20e8..5ef1f96 100644 Binary files a/version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKServiceCenter.class and b/version5/krpc-core/target/classes/com/kama/client/servicecenter/ZKServiceCenter.class differ diff --git a/version5/krpc-core/target/classes/com/kama/server/provider/ServiceProvider.class b/version5/krpc-core/target/classes/com/kama/server/provider/ServiceProvider.class index 306f2b3..0cfd539 100644 Binary files a/version5/krpc-core/target/classes/com/kama/server/provider/ServiceProvider.class and b/version5/krpc-core/target/classes/com/kama/server/provider/ServiceProvider.class differ diff --git a/version5/krpc-core/target/classes/com/kama/server/serviceRegister/ServiceRegister.class b/version5/krpc-core/target/classes/com/kama/server/serviceRegister/ServiceRegister.class index 64da462..65fa7cf 100644 Binary files a/version5/krpc-core/target/classes/com/kama/server/serviceRegister/ServiceRegister.class and b/version5/krpc-core/target/classes/com/kama/server/serviceRegister/ServiceRegister.class differ diff --git a/version5/krpc-core/target/classes/com/kama/server/serviceRegister/impl/ZKServiceRegister.class b/version5/krpc-core/target/classes/com/kama/server/serviceRegister/impl/ZKServiceRegister.class index 18c339c..198616c 100644 Binary files a/version5/krpc-core/target/classes/com/kama/server/serviceRegister/impl/ZKServiceRegister.class and b/version5/krpc-core/target/classes/com/kama/server/serviceRegister/impl/ZKServiceRegister.class differ diff --git a/version5/krpc-provider/target/classes/com/kama/provider/ProviderTest.class b/version5/krpc-provider/target/classes/com/kama/provider/ProviderTest.class index cd2eb0a..b236731 100644 Binary files a/version5/krpc-provider/target/classes/com/kama/provider/ProviderTest.class and b/version5/krpc-provider/target/classes/com/kama/provider/ProviderTest.class differ