From 0ac90baba2dc5b3731e8919fc1df22e5a2c60033 Mon Sep 17 00:00:00 2001 From: TanJ Date: Fri, 17 Nov 2023 15:04:06 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat(1609):=20=E7=BB=9F=E4=B8=80response?= =?UTF-8?q?=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 + .../java/cn/axzo/pokonyan/util/RpcUtil.java | 79 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 src/main/java/cn/axzo/pokonyan/util/RpcUtil.java diff --git a/pom.xml b/pom.xml index 95016da..d355fbd 100644 --- a/pom.xml +++ b/pom.xml @@ -100,6 +100,10 @@ org.aspectj aspectjrt + + cn.axzo.framework + axzo-common-domain + diff --git a/src/main/java/cn/axzo/pokonyan/util/RpcUtil.java b/src/main/java/cn/axzo/pokonyan/util/RpcUtil.java new file mode 100644 index 0000000..d6fa9a0 --- /dev/null +++ b/src/main/java/cn/axzo/pokonyan/util/RpcUtil.java @@ -0,0 +1,79 @@ +package cn.axzo.pokonyan.util; + + +import cn.axzo.framework.domain.ServiceException; +import cn.hutool.core.date.StopWatch; +import cn.hutool.core.lang.Assert; +import cn.hutool.http.HttpStatus; +import cn.hutool.json.JSONUtil; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; +import java.util.function.Supplier; + +/** + * 外部rpc接口 返回 CommonResponse + * @author tanjie@axzo.cn + * @date 2022/5/23 11:08 + */ +@Slf4j +public class RpcUtil { + + /** + * 常用的RPC请求返回值解析,如果 被请求方 返回非200会抛出异常 + * + */ + public static T rpcProcessor(Supplier supplier, String operationType, Object... param) { + + return rpcProcessorMayThrow(supplier, operationType, commonResponse -> { + throw new ServiceException(commonResponse.getMsg()); + }, param); + } + + + /** + * 第三方发生异常时,自定义处理逻辑 + * + * @param supplier + * @param operationType + * @param throwConsumer + * @param param + * @return + */ + public static R rpcProcessorMayThrow(Supplier

supplier, String operationType, Consumer> throwConsumer, Object... param) { + Assert.notNull(throwConsumer,"自定义的异常处理不可为空"); + log.info(operationType + "-Param: " + JSONUtil.toJsonStr(param)); + Response response = printLatency(supplier, operationType); + log.info(operationType + "-Result: " + JSONUtil.toJsonStr(response)); + + Assert.notNull(response, "服务调用异常"); + // 200自定义处理 + if (HttpStatus.HTTP_OK != response.getCode()) { + throwConsumer.accept(response); + } + return response.getData(); + } + public static Response printLatency(Supplier

function, String optType) { + StopWatch stopWatch = new StopWatch(optType); + stopWatch.start(optType); + Response response = Response.create(JSONUtil.toJsonStr(function.get())); + stopWatch.stop(); + log.info(stopWatch.shortSummary(TimeUnit.MILLISECONDS)); + return response; + } + + + @Data + public static class Response { + private Integer code; + private String msg; + private E data; + + public static Response create(String data) { + return JSONUtil.toBean(data, Response.class); + } + } + +} From 1e0a43dde1a7e9362f4ee0143b8e28a8c9ab5e20 Mon Sep 17 00:00:00 2001 From: TanJ Date: Fri, 17 Nov 2023 16:56:57 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat(1609):=20=E7=BB=9F=E4=B8=80response?= =?UTF-8?q?=E5=B0=81=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/pokonyan/util/RpcUtil.java | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/src/main/java/cn/axzo/pokonyan/util/RpcUtil.java b/src/main/java/cn/axzo/pokonyan/util/RpcUtil.java index d6fa9a0..ce8ce75 100644 --- a/src/main/java/cn/axzo/pokonyan/util/RpcUtil.java +++ b/src/main/java/cn/axzo/pokonyan/util/RpcUtil.java @@ -2,13 +2,20 @@ package cn.axzo.pokonyan.util; import cn.axzo.framework.domain.ServiceException; +import cn.axzo.framework.domain.data.AssertUtil; +import cn.axzo.framework.domain.web.result.ApiResult; +import cn.azxo.framework.common.model.CommonResponse; import cn.hutool.core.date.StopWatch; import cn.hutool.core.lang.Assert; +import cn.hutool.core.lang.TypeReference; import cn.hutool.http.HttpStatus; import cn.hutool.json.JSONUtil; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.lang.reflect.Type; +import java.util.List; +import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.function.Supplier; @@ -21,17 +28,26 @@ import java.util.function.Supplier; @Slf4j public class RpcUtil { + /** * 常用的RPC请求返回值解析,如果 被请求方 返回非200会抛出异常 * */ - public static T rpcProcessor(Supplier supplier, String operationType, Object... param) { + public static T rpcCommonProcessor(Supplier> supplier, String operationType, Object... param) { return rpcProcessorMayThrow(supplier, operationType, commonResponse -> { throw new ServiceException(commonResponse.getMsg()); }, param); } + public static T rpcApiResultProcessor(Supplier> supplier, String operationType, Object... param) { + log.info(operationType + "-Param: " + JSONUtil.toJsonStr(param)); + ApiResult result = printLatency(supplier,operationType); + log.info(operationType + "-Result: " + JSONUtil.toJsonStr(result)); + Assert.notNull(result, "服务调用异常"); + Assert.isTrue(result.getCode() == 200, "服务调用异常:" + result.getMsg()); + return result.getData(); + } /** * 第三方发生异常时,自定义处理逻辑 @@ -42,29 +58,27 @@ public class RpcUtil { * @param param * @return */ - public static R rpcProcessorMayThrow(Supplier

supplier, String operationType, Consumer> throwConsumer, Object... param) { - Assert.notNull(throwConsumer,"自定义的异常处理不可为空"); + public static T rpcProcessorMayThrow(Supplier> supplier, String operationType, Consumer> throwConsumer, Object... param) { + Assert.notNull(throwConsumer, "自定义的异常处理不可为空"); log.info(operationType + "-Param: " + JSONUtil.toJsonStr(param)); - Response response = printLatency(supplier, operationType); - log.info(operationType + "-Result: " + JSONUtil.toJsonStr(response)); - - Assert.notNull(response, "服务调用异常"); + CommonResponse result = printLatency(supplier, operationType); + log.info(operationType + "-Result: " + JSONUtil.toJsonStr(result)); + Assert.notNull(result, "服务调用异常"); // 200自定义处理 - if (HttpStatus.HTTP_OK != response.getCode()) { - throwConsumer.accept(response); + if (HttpStatus.HTTP_OK != result.getCode()) { + throwConsumer.accept(result); } - return response.getData(); + return result.getData(); } - public static Response printLatency(Supplier

function, String optType) { + public static R printLatency(Supplier< R> function,String optType) { StopWatch stopWatch = new StopWatch(optType); stopWatch.start(optType); - Response response = Response.create(JSONUtil.toJsonStr(function.get())); + R r = function.get(); stopWatch.stop(); log.info(stopWatch.shortSummary(TimeUnit.MILLISECONDS)); - return response; + return r; } - @Data public static class Response { private Integer code; @@ -76,4 +90,7 @@ public class RpcUtil { } } + + + } From 61c5ef6a5faef9dc7ecfc6eecf9ee15454686024 Mon Sep 17 00:00:00 2001 From: TanJ Date: Fri, 17 Nov 2023 18:05:54 +0800 Subject: [PATCH 3/3] feat(1609): add keys util --- .../java/cn/axzo/pokonyan/util/KeysUtil.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/main/java/cn/axzo/pokonyan/util/KeysUtil.java diff --git a/src/main/java/cn/axzo/pokonyan/util/KeysUtil.java b/src/main/java/cn/axzo/pokonyan/util/KeysUtil.java new file mode 100644 index 0000000..452d4eb --- /dev/null +++ b/src/main/java/cn/axzo/pokonyan/util/KeysUtil.java @@ -0,0 +1,48 @@ +package cn.axzo.pokonyan.util; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; + +/** + * @author tanjie@axzo.cn + * @date 2023/11/17 18:04 + */ +public class KeysUtil { + + private static final String DEFAULT_SEPARATOR = "-"; + + + public static String createKey(Object... keys) { + if (ArrayUtil.isEmpty(keys)) { + return StrUtil.EMPTY; + } + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < keys.length; i++) { + if (null == keys[i]) { + continue; + } + stringBuilder.append(keys[i]); + if (i != keys.length - 1) { + stringBuilder.append(DEFAULT_SEPARATOR); + } + } + return stringBuilder.toString(); + } + + public static String createKeyBySeparator(String separator,Object... keys) { + if (ArrayUtil.isEmpty(keys)) { + return StrUtil.EMPTY; + } + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < keys.length; i++) { + if (null == keys[i]) { + continue; + } + stringBuilder.append(keys[i]); + if (i != keys.length - 1) { + stringBuilder.append(separator); + } + } + return stringBuilder.toString(); + } +}