diff --git a/business-b/src/main/java/org/needcoke/b/component/TestComponent.java b/business-b/src/main/java/org/needcoke/b/component/TestComponent.java index f35eac9db1eb2c8ff2b6a37c40e185723461e3a0..f0e3cb453c953ec38e1229ef6c2d36394a62150e 100644 --- a/business-b/src/main/java/org/needcoke/b/component/TestComponent.java +++ b/business-b/src/main/java/org/needcoke/b/component/TestComponent.java @@ -21,9 +21,9 @@ public class TestComponent { return new WeightedResponseTimeBalance(); } -// @Bean -// public SmartSocketInvoker smartSocketInvoker(){ -// return new SmartSocketInvoker(); -// } + @Bean + public SmartSocketInvoker smartSocketInvoker(){ + return new SmartSocketInvoker(); + } } diff --git a/business-b/src/main/java/org/needcoke/b/controller/TestController.java b/business-b/src/main/java/org/needcoke/b/controller/TestController.java index 8d6ab3aba31524d68bc2371e3daba819c014931c..61d63db40684af8c93f917ea4047fe7bbec03157 100644 --- a/business-b/src/main/java/org/needcoke/b/controller/TestController.java +++ b/business-b/src/main/java/org/needcoke/b/controller/TestController.java @@ -1,13 +1,19 @@ package org.needcoke.b.controller; +import cn.hutool.core.collection.CollUtil; import lombok.RequiredArgsConstructor; import org.needcoke.rpc.invoker.InvokeResult; +import org.needcoke.rpc.loadBalance.LoadBalance; import org.needcoke.rpc.utils.ConnectUtil; +import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -26,4 +32,15 @@ public class TestController { InvokeResult execute = ConnectUtil.execute("bussiness-a", "config", "hahha2", map); return execute; } + + @Resource + private DiscoveryClient discoveryClient; + + @Resource + private LoadBalance loadBalance; + @GetMapping("testPort") + public Integer testPort(){ + List instances = discoveryClient.getInstances("bussiness-a"); + return ConnectUtil.getCokeServerPort(loadBalance.choose("bussiness-a",instances)); + } } diff --git a/bussiness-a/src/main/java/org/needcoke/a/configuration/Config.java b/bussiness-a/src/main/java/org/needcoke/a/configuration/Config.java index 5a13126b4c9e0ff61f81b2bf8225697b05e5a8ed..567cce6ab73753b519b3c7d78f5aeb85870a68a9 100644 --- a/bussiness-a/src/main/java/org/needcoke/a/configuration/Config.java +++ b/bussiness-a/src/main/java/org/needcoke/a/configuration/Config.java @@ -30,8 +30,8 @@ public class Config { return "say : "+word; } -// @Bean -// public SmartSocketInvoker smartSocketInvoker(){ -// return new SmartSocketInvoker(); -// } + @Bean + public SmartSocketInvoker smartSocketInvoker(){ + return new SmartSocketInvoker(); + } } diff --git a/bussiness-a/src/main/resources/application.yml b/bussiness-a/src/main/resources/application.yml index 5fe70a0add403f81d09cd8083e2bcc8084ec38bc..43c6995ad20c63380096a80fd4b25d1c28cc0e9b 100644 --- a/bussiness-a/src/main/resources/application.yml +++ b/bussiness-a/src/main/resources/application.yml @@ -13,4 +13,8 @@ spring: group: 相亲相爱一家人 access-key: server: - port: 8000 \ No newline at end of file + port: 8000 + +coke: + server: + port: 13005 \ No newline at end of file diff --git a/connect-core/pom.xml b/connect-core/pom.xml index 47f39563a3380d49f48ef5862d27c941d081dd87..e080cee759604dcc3ee0aa09c8828eb34431c74b 100644 --- a/connect-core/pom.xml +++ b/connect-core/pom.xml @@ -72,7 +72,7 @@ org.smartboot.socket aio-core - 1.5.15 + 1.5.17 diff --git a/connect-core/src/main/java/org/needcoke/rpc/codec/CokeRequest.java b/connect-core/src/main/java/org/needcoke/rpc/codec/CokeRequest.java index 779ccf979bd9327e9d6f1d90b435f6060504e000..0232e07fc64192dbd3a7021fea9e81a5e03fbf11 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/codec/CokeRequest.java +++ b/connect-core/src/main/java/org/needcoke/rpc/codec/CokeRequest.java @@ -28,6 +28,8 @@ public class CokeRequest { @Getter private InvokeResult result; + private Integer requestId; + public CokeRequest setRequestType(ConnectRequestEnum requestType) { this.requestType = requestType; @@ -77,6 +79,12 @@ public class CokeRequest { } public byte[] toBytes(){ - return JSONObject.toJSONString(this).getBytes(StandardCharsets.UTF_8); + String jsonString = JSONObject.toJSONString(this); + return jsonString.getBytes(); + } + + public CokeRequest setRequestId(Integer requestId){ + this.requestId = requestId; + return this; } } diff --git a/connect-core/src/main/java/org/needcoke/rpc/codec/CokeRequestProtocol.java b/connect-core/src/main/java/org/needcoke/rpc/codec/CokeRequestProtocol.java index e9715dbb2a28884813521084d50eb80f5f1d986a..a8d0935f898920c106f691c79b458cbbd387d91a 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/codec/CokeRequestProtocol.java +++ b/connect-core/src/main/java/org/needcoke/rpc/codec/CokeRequestProtocol.java @@ -23,6 +23,14 @@ public class CokeRequestProtocol implements Protocol { byte[] b = new byte[length]; readBuffer.get(b); readBuffer.mark(); - return JSONObject.parseObject(new String(b),CokeRequest.class); + String json = new String(b); + CokeRequest request = null; + try { + request = JSONObject.parseObject(json, CokeRequest.class); + }catch (Exception e){ + System.out.println("error { "+json+" }"); + throw new RuntimeException(e); + } + return request; } } \ No newline at end of file diff --git a/connect-core/src/main/java/org/needcoke/rpc/common/constant/ConnectConstant.java b/connect-core/src/main/java/org/needcoke/rpc/common/constant/ConnectConstant.java index 6433d50b4a208c4b133382eb6520ea498d6c1596..2af99f447746816e22052328d906a1accf2368d2 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/common/constant/ConnectConstant.java +++ b/connect-core/src/main/java/org/needcoke/rpc/common/constant/ConnectConstant.java @@ -13,6 +13,8 @@ public interface ConnectConstant { */ String EXECUTE_RELATIVE_PATH = "/coke/connect/execute"; + String COKE_PORT_RELATIVE_PATH = "/coke/connect/port"; + /** * 实例名称 */ diff --git a/connect-core/src/main/java/org/needcoke/rpc/config/ServerConfig.java b/connect-core/src/main/java/org/needcoke/rpc/config/ServerConfig.java index 40d4fedd655518d9dc4af42355079ad719733862..4e59bb9e092fcc7b670b226135fe517a2ed6575c 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/config/ServerConfig.java +++ b/connect-core/src/main/java/org/needcoke/rpc/config/ServerConfig.java @@ -13,6 +13,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + @Getter @Configuration public class ServerConfig { @@ -49,4 +52,13 @@ public class ServerConfig { public SmartSocketServer smartSocketServer(){ return new SmartSocketServer(); } + + /** + * server uri -> 端口号 + */ + @ConditionalOnMissingBean(OkHttpsInvoker.class) + @Bean + public Map cokeServerPortMap(){ + return new ConcurrentHashMap<>(); + } } diff --git a/connect-core/src/main/java/org/needcoke/rpc/controller/RpcController.java b/connect-core/src/main/java/org/needcoke/rpc/controller/RpcController.java index cd939382f1f177b6c78642b75c88512a7e80c37e..65fda9da2acecab1dfafbf32cdf07c9a48f4d02a 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/controller/RpcController.java +++ b/connect-core/src/main/java/org/needcoke/rpc/controller/RpcController.java @@ -6,9 +6,14 @@ import lombok.extern.slf4j.Slf4j; import org.needcoke.rpc.common.constant.ConnectConstant; import org.needcoke.rpc.common.enums.ConnectionExceptionEnum; import org.needcoke.rpc.common.exception.CokeConnectException; +import org.needcoke.rpc.config.ServerConfig; +import org.needcoke.rpc.invoker.OkHttpsInvoker; import org.needcoke.rpc.utils.SpringContextUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import java.lang.reflect.Method; import java.util.Collection; import java.util.Map; @@ -23,11 +28,22 @@ import java.util.Map; @RequiredArgsConstructor public class RpcController { + + private ServerConfig serverConfig; + + @Resource + private ApplicationContext applicationContext; + + @Autowired + public void setServerConfig(ServerConfig serverConfig) { + this.serverConfig = serverConfig; + } + @PostMapping("execute") public Object execute(@RequestParam String beanName, @RequestParam String methodName, @RequestBody Map params) { - log.info("execute http -- beanName : {} , methodName : {} , param : {}",beanName,methodName, JSONObject.toJSONString(params)); + log.info("execute http -- beanName : {} , methodName : {} , param : {}", beanName, methodName, JSONObject.toJSONString(params)); Method method = SpringContextUtils.getMethod(beanName, methodName); if (null == method) { log.error(ConnectionExceptionEnum.BEAN_WITHOUT_METHOD.logStatement(ConnectConstant.EXECUTE_RELATIVE_PATH)); @@ -42,4 +58,18 @@ public class RpcController { throw new CokeConnectException(ConnectionExceptionEnum.INVOKE_METHOD_ERROR); } } + + @GetMapping("port") + public Integer cokeServerPort() { + if (null == serverConfig) { + return 0; + } + try{ + applicationContext.getBean(OkHttpsInvoker.class); + }catch (Exception e){ + return serverConfig.getCokeServerPort(); + + } + return 0; + } } diff --git a/connect-core/src/main/java/org/needcoke/rpc/excutor/Excutor.java b/connect-core/src/main/java/org/needcoke/rpc/excutor/Excutor.java deleted file mode 100644 index 5f53d1e53fc8ae71f091a9d39d21685c9e2169c7..0000000000000000000000000000000000000000 --- a/connect-core/src/main/java/org/needcoke/rpc/excutor/Excutor.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.needcoke.rpc.excutor; - -/** - * @author Gilgamesh - * @date 2022/4/2 - */ -public interface Excutor { -} diff --git a/connect-core/src/main/java/org/needcoke/rpc/invoker/InvokeResult.java b/connect-core/src/main/java/org/needcoke/rpc/invoker/InvokeResult.java index a166016ae9a93fde9f793f284f629e055bb06765..3c81c5837c78a95aa253178254a86715020fbb2b 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/invoker/InvokeResult.java +++ b/connect-core/src/main/java/org/needcoke/rpc/invoker/InvokeResult.java @@ -3,6 +3,7 @@ package org.needcoke.rpc.invoker; import com.alibaba.fastjson.JSONObject; import com.ejlchina.okhttps.HttpResult; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; @@ -14,6 +15,7 @@ import java.nio.charset.StandardCharsets; @Data @Accessors(chain = true) +@EqualsAndHashCode public class InvokeResult implements Serializable { /** diff --git a/connect-core/src/main/java/org/needcoke/rpc/invoker/SmartSocketInvoker.java b/connect-core/src/main/java/org/needcoke/rpc/invoker/SmartSocketInvoker.java index d96d6655f344c3917cadf09591c8b4898e7e114f..f4a4adf8e6e811d0be77e6bbdb731da4c3c5e295 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/invoker/SmartSocketInvoker.java +++ b/connect-core/src/main/java/org/needcoke/rpc/invoker/SmartSocketInvoker.java @@ -1,41 +1,56 @@ package org.needcoke.rpc.invoker; +import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; import org.needcoke.rpc.codec.CokeRequest; import org.needcoke.rpc.codec.CokeRequestProtocol; import org.needcoke.rpc.common.constant.ConnectConstant; -import org.needcoke.rpc.processor.SmartSocketServerProcessor; +import org.needcoke.rpc.processor.smart_socket.SmartSocketClientProcessor; +import org.needcoke.rpc.utils.ConnectUtil; import org.smartboot.socket.transport.AioQuickClient; import org.smartboot.socket.transport.AioSession; import org.springframework.cloud.client.ServiceInstance; import java.io.IOException; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.LockSupport; + @Slf4j -public class SmartSocketInvoker extends ConnectInvoker{ +public class SmartSocketInvoker extends ConnectInvoker { + + /** + * 给AioQuickClient加个引用,防止垃圾回收。 + * //TODO AioSession失效时重建连接 + */ + private final Map clientMap = new ConcurrentHashMap<>(); - private final Map clientMap = new HashMap<>(); + private final Map sessionMap = new ConcurrentHashMap<>(); - private final Map sessionMap = new HashMap<>(); @Override public InvokeResult execute(ServiceInstance instance, String beanName, String methodName, Map params) { - String uri = instance.getHost()+ ConnectConstant.COLON+ instance.getPort(); + String uri = instance.getHost() + ConnectConstant.COLON + instance.getPort(); + Integer serverPort = ConnectUtil.getCokeServerPort(instance); + if (0 == serverPort) { + throw new RuntimeException("对方服务未开起server!"); + //TODO 异常统一 + } if (!sessionMap.containsKey(uri)) { - AioQuickClient aioQuickClient = new AioQuickClient(instance.getHost(),instance.getPort(), new CokeRequestProtocol(),new SmartSocketServerProcessor()); - clientMap.put(uri,aioQuickClient); + AioQuickClient aioQuickClient = new AioQuickClient(instance.getHost(), serverPort, new CokeRequestProtocol(), new SmartSocketClientProcessor()); + clientMap.put(uri, aioQuickClient); try { AioSession session = aioQuickClient.start(); - sessionMap.put(uri,session); + sessionMap.put(uri, session); } catch (IOException e) { throw new RuntimeException(e); } - } AioSession session = sessionMap.get(uri); + int requestId = ConnectUtil.requestIdMaker.addAndGet(1); CokeRequest request = new CokeRequest().setBeanName(beanName) .setMethodName(methodName) - .setParams(params); + .setParams(params) + .setRequestId(requestId); byte[] bytes = request.toBytes(); try { session.writeBuffer().writeInt(bytes.length); @@ -44,6 +59,15 @@ public class SmartSocketInvoker extends ConnectInvoker{ } catch (IOException e) { throw new RuntimeException(e.getMessage()); } - return InvokeResult.nullResult(); + InvokeResult tmp = new InvokeResult(); + long start = DateUtil.current(); + ConnectUtil.putRequestMap(requestId, tmp); + ConnectUtil.threadMap.put(requestId, Thread.currentThread()); + LockSupport.park(); + InvokeResult result = ConnectUtil.getFromRequestMap(requestId); + long end = DateUtil.current(); + log.info("requestId = {} , start = {} , end = {} ,cost = {}", requestId, start, end, end - start); + result.setTime(end - start); + return result; } } diff --git a/connect-core/src/main/java/org/needcoke/rpc/loadBalance/RoundRobinLoadBalance.java b/connect-core/src/main/java/org/needcoke/rpc/loadBalance/RoundRobinLoadBalance.java index eaa99487213bb408ad07987703a26ea52da7c3a5..e190431f3e29c0d70427aff3f53b0a261e0bfa56 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/loadBalance/RoundRobinLoadBalance.java +++ b/connect-core/src/main/java/org/needcoke/rpc/loadBalance/RoundRobinLoadBalance.java @@ -1,10 +1,6 @@ package org.needcoke.rpc.loadBalance; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.cloud.client.ServiceInstance; -import org.springframework.stereotype.Component; - import java.util.List; import java.util.concurrent.ConcurrentHashMap; public class RoundRobinLoadBalance extends LoadBalance { diff --git a/connect-core/src/main/java/org/needcoke/rpc/loadBalance/WeightedResponseTimeBalance.java b/connect-core/src/main/java/org/needcoke/rpc/loadBalance/WeightedResponseTimeBalance.java index ee5df99fbf3ec01ae3448f03cf431fe168e7cd03..a09e024afba1ed7183c9c5ed20a1f4bc689db463 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/loadBalance/WeightedResponseTimeBalance.java +++ b/connect-core/src/main/java/org/needcoke/rpc/loadBalance/WeightedResponseTimeBalance.java @@ -2,11 +2,7 @@ package org.needcoke.rpc.loadBalance; import cn.hutool.core.bean.BeanUtil; import org.needcoke.rpc.CokeServiceInstance; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.cloud.client.ServiceInstance; -import org.springframework.stereotype.Component; - -import java.net.URI; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; diff --git a/connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketClientProcessor.java b/connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketClientProcessor.java similarity index 35% rename from connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketClientProcessor.java rename to connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketClientProcessor.java index 75f20a44fb9462cfb2599718128cb7f127299526..e166d2061c6b89cdc7131386149f074e53ecb7cf 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketClientProcessor.java +++ b/connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketClientProcessor.java @@ -1,23 +1,25 @@ -package org.needcoke.rpc.processor; +package org.needcoke.rpc.processor.smart_socket; +import lombok.extern.slf4j.Slf4j; import org.needcoke.rpc.codec.CokeRequest; import org.needcoke.rpc.common.enums.ConnectRequestEnum; +import org.needcoke.rpc.utils.ConnectUtil; import org.smartboot.socket.transport.AioSession; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import javax.servlet.http.HttpServletResponse; +import java.util.concurrent.locks.LockSupport; + +@Slf4j public class SmartSocketClientProcessor extends SmartSocketMessageProcessor { @Override public void process(AioSession aioSession, CokeRequest request) { - if (ConnectRequestEnum.INTERNAL_REQUEST == request.getRequestType()) { - RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); - HttpServletResponse response = ((ServletRequestAttributes) requestAttributes).getResponse(); - if (null != response){ - this.responseHttp(response,request.getResult()); - } + if (ConnectRequestEnum.INTERNAL_RESPONSE == request.getRequestType()) { + Integer requestId = request.getRequestId(); + log.info("smart socket client receive back requestId = {} , request json = {}", + requestId,new String(request.toBytes())); + ConnectUtil.putRequestMap(requestId,request.getResult()); + Thread thread = ConnectUtil.threadMap.get(requestId); + LockSupport.unpark(thread); //TODO 抛出异常 } diff --git a/connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketMessageProcessor.java b/connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketMessageProcessor.java similarity index 90% rename from connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketMessageProcessor.java rename to connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketMessageProcessor.java index e5415751a5e1f864aca0edd2ea8c67f52b4aaac3..448aaacaba189a44a9b5dbc25251f41a4e2d54dd 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketMessageProcessor.java +++ b/connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketMessageProcessor.java @@ -1,4 +1,4 @@ -package org.needcoke.rpc.processor; +package org.needcoke.rpc.processor.smart_socket; import org.needcoke.rpc.codec.CokeRequest; import org.needcoke.rpc.invoker.InvokeResult; @@ -9,7 +9,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; -public abstract class SmartSocketMessageProcessor implements MessageProcessor { +public abstract class SmartSocketMessageProcessor implements MessageProcessor { public void responseHttp(HttpServletResponse response , InvokeResult result){ try { @@ -26,7 +26,7 @@ public abstract class SmartSocketMessageProcessor implements MessageProcessor public void response(AioSession session, CokeRequest response){ WriteBuffer outputStream = session.writeBuffer(); try { - byte[] bytes = response.toString().getBytes(); + byte[] bytes = response.toBytes(); outputStream.writeInt(bytes.length); outputStream.write(bytes); outputStream.flush(); diff --git a/connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketServerProcessor.java b/connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketServerProcessor.java similarity index 83% rename from connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketServerProcessor.java rename to connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketServerProcessor.java index 7f364febdceff55466a71c9d8ba4b99bb9e285dd..3a32a0ad3458c6055a4a3638991426bc9e0e6233 100644 --- a/connect-core/src/main/java/org/needcoke/rpc/processor/SmartSocketServerProcessor.java +++ b/connect-core/src/main/java/org/needcoke/rpc/processor/smart_socket/SmartSocketServerProcessor.java @@ -1,4 +1,4 @@ -package org.needcoke.rpc.processor; +package org.needcoke.rpc.processor.smart_socket; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; @@ -26,10 +26,10 @@ public class SmartSocketServerProcessor extends SmartSocketMessageProcessor params = request.getParams(); - log.info("execute smart socket -- beanName : {} , methodName : {} , param : {}",beanName,methodName, JSONObject.toJSONString(params)); + log.info("execute smart socket requestId = {} , -- beanName : {} , methodName : {} , param : {}", request.getRequestId(), beanName, methodName, JSONObject.toJSONString(params)); Method method = SpringContextUtils.getMethod(beanName, methodName); if (null == method) { - log.error(ConnectionExceptionEnum.BEAN_WITHOUT_METHOD.logStatement(ConnectConstant.EXECUTE_RELATIVE_PATH)); + log.error(ConnectionExceptionEnum.BEAN_WITHOUT_METHOD.logStatement("beanName {} , methodName {}"), beanName, methodName); throw new CokeConnectException(ConnectionExceptionEnum.BEAN_WITHOUT_METHOD); } Object bean = SpringContextUtils.getBean(beanName); @@ -37,7 +37,7 @@ public class SmartSocketServerProcessor extends SmartSocketMessageProcessor requestMap = new ConcurrentHashMap(); + + public static void putRequestMap(InvokeResult result){ + requestMap.put(requestIdMaker.addAndGet(1),result); + } + + public static ConcurrentHashMap threadMap = new ConcurrentHashMap<>(); + + public static void putRequestMap(Integer requestId,InvokeResult result){ + requestMap.put(requestId,result); + } + + public static InvokeResult getFromRequestMap(Integer key){ + return requestMap.get(key); + } /** * 执行远程方法 @@ -75,7 +106,20 @@ public class ConnectUtil { } - - - + public static Integer getCokeServerPort(ServiceInstance instance){ + RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); + HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest(); + SHttpTask sHttpTask = HTTP.builder().addMsgConvertor(new JacksonMsgConvertor()).build() + .sync(instance.getUri() + ConnectConstant.COKE_PORT_RELATIVE_PATH) + .bodyType(HttpContentTypeEnum.JSON.getValue()); + Enumeration headerNames = request.getHeaderNames(); + while (headerNames.hasMoreElements()) { + String nextElement = headerNames.nextElement(); + String header = request.getHeader(nextElement); + sHttpTask.addHeader(nextElement,header); + } + HttpResult result = sHttpTask + .get(); + return result.getBody().toBean(Integer.class); + } }