diff --git a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/EasyRetryInterceptor.java b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/EasyRetryInterceptor.java
index c5f18272..a5ee41b3 100644
--- a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/EasyRetryInterceptor.java
+++ b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/intercepter/EasyRetryInterceptor.java
@@ -47,10 +47,11 @@ public class EasyRetryInterceptor implements MethodInterceptor, AfterAdvice, Ser
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static String retryErrorMoreThresholdTextMessageFormatter =
- "{}环境 重试组件异常 \r\n" +
- "> 名称:{} \r\n" +
- "> 时间:{} \r\n" +
- "> 异常:{} \n";
+ "{}环境 重试组件异常 \n" +
+ "> 空间ID:{} \n" +
+ "> 名称:{} \n" +
+ "> 时间:{} \n" +
+ "> 异常:{} \n";
private final StandardEnvironment standardEnvironment;
private final RetryStrategy retryStrategy;
@@ -199,16 +200,17 @@ public class EasyRetryInterceptor implements MethodInterceptor, AfterAdvice, Ser
try {
ConfigDTO.Notify notifyAttribute = GroupVersionCache.getNotifyAttribute(
- NotifySceneEnum.CLIENT_COMPONENT_ERROR.getNotifyScene());
+ NotifySceneEnum.CLIENT_COMPONENT_ERROR.getNotifyScene());
if (Objects.nonNull(notifyAttribute)) {
AlarmContext context = AlarmContext.build()
- .text(retryErrorMoreThresholdTextMessageFormatter,
- EnvironmentUtils.getActiveProfile(),
- EasyRetryProperties.getGroup(),
- LocalDateTime.now().format(formatter),
- e.getMessage())
- .title("retry component handling exception:[{}]", EasyRetryProperties.getGroup())
- .notifyAttribute(notifyAttribute.getNotifyAttribute());
+ .text(retryErrorMoreThresholdTextMessageFormatter,
+ EnvironmentUtils.getActiveProfile(),
+ standardEnvironment.getProperty("easy-retry.namespace", StrUtil.EMPTY),
+ EasyRetryProperties.getGroup(),
+ LocalDateTime.now().format(formatter),
+ e.getMessage())
+ .title("retry component handling exception:[{}]", EasyRetryProperties.getGroup())
+ .notifyAttribute(notifyAttribute.getNotifyAttribute());
Alarm alarmType = SpringContext.getBeanByType(EasyRetryAlarmFactory.class).getAlarmType(notifyAttribute.getNotifyType());
alarmType.asyncSendMessage(context);
diff --git a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/ReportListener.java b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/ReportListener.java
index 6558cb2e..dacf29db 100644
--- a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/ReportListener.java
+++ b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/ReportListener.java
@@ -40,9 +40,10 @@ import java.util.concurrent.TimeUnit;
public class ReportListener implements Listener {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static String reportErrorTextMessageFormatter =
- "{}环境 上报失败 \r\n" +
- "> 名称:{} \r\n" +
- "> 时间:{} \r\n" +
+ "{}环境 异步批量上报异常 \n" +
+ "> 空间ID:{} n" +
+ "> 名称:{} \n" +
+ "> 时间:{} \n" +
"> 异常:{} \n"
;
@@ -106,20 +107,24 @@ public class ReportListener implements Listener {
try {
ConfigDTO.Notify notifyAttribute = GroupVersionCache.getNotifyAttribute(NotifySceneEnum.CLIENT_REPORT_ERROR.getNotifyScene());
- if (Objects.nonNull(notifyAttribute)) {
- AlarmContext context = AlarmContext.build()
- .text(reportErrorTextMessageFormatter,
- EnvironmentUtils.getActiveProfile(),
- EasyRetryProperties.getGroup(),
- LocalDateTime.now().format(formatter),
- e.getMessage())
- .title("上报异常:[{}]", EasyRetryProperties.getGroup())
- .notifyAttribute(notifyAttribute.getNotifyAttribute());
-
- EasyRetryAlarmFactory easyRetryAlarmFactory = SpringContext.getBeanByType(EasyRetryAlarmFactory.class);
- Alarm alarmType = easyRetryAlarmFactory.getAlarmType(notifyAttribute.getNotifyType());
- alarmType.asyncSendMessage(context);
+ if (Objects.isNull(notifyAttribute)) {
+ return;
}
+
+ EasyRetryProperties properties = SpringContext.CONTEXT.getBean(EasyRetryProperties.class);
+ AlarmContext context = AlarmContext.build()
+ .text(reportErrorTextMessageFormatter,
+ EnvironmentUtils.getActiveProfile(),
+ properties.getNamespace(),
+ EasyRetryProperties.getGroup(),
+ LocalDateTime.now().format(formatter),
+ e.getMessage())
+ .title("上报异常:[{}]", EasyRetryProperties.getGroup())
+ .notifyAttribute(notifyAttribute.getNotifyAttribute());
+
+ EasyRetryAlarmFactory easyRetryAlarmFactory = SpringContext.getBeanByType(EasyRetryAlarmFactory.class);
+ Alarm alarmType = easyRetryAlarmFactory.getAlarmType(notifyAttribute.getNotifyType());
+ alarmType.asyncSendMessage(context);
} catch (Exception e1) {
LogUtils.error(log, "客户端发送组件异常告警失败", e1);
}
diff --git a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/SyncReport.java b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/SyncReport.java
index 66354139..61c01df4 100644
--- a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/SyncReport.java
+++ b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/report/SyncReport.java
@@ -1,16 +1,29 @@
package com.aizuda.easy.retry.client.core.report;
+import com.aizuda.easy.retry.client.common.cache.GroupVersionCache;
+import com.aizuda.easy.retry.client.common.config.EasyRetryProperties;
import com.aizuda.easy.retry.client.common.proxy.RequestBuilder;
import com.aizuda.easy.retry.client.core.client.NettyClient;
import com.aizuda.easy.retry.client.core.retryer.RetryerInfo;
+import com.aizuda.easy.retry.common.core.alarm.Alarm;
+import com.aizuda.easy.retry.common.core.alarm.AlarmContext;
+import com.aizuda.easy.retry.common.core.alarm.EasyRetryAlarmFactory;
+import com.aizuda.easy.retry.common.core.context.SpringContext;
+import com.aizuda.easy.retry.common.core.enums.NotifySceneEnum;
import com.aizuda.easy.retry.common.core.log.LogUtils;
import com.aizuda.easy.retry.common.core.model.NettyResult;
+import com.aizuda.easy.retry.common.core.util.EnvironmentUtils;
import com.aizuda.easy.retry.common.core.util.JsonUtil;
+import com.aizuda.easy.retry.server.model.dto.ConfigDTO;
import com.aizuda.easy.retry.server.model.dto.RetryTaskDTO;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
import java.util.Collections;
+import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
@@ -24,6 +37,19 @@ import java.util.concurrent.TimeUnit;
@Slf4j
public class SyncReport extends AbstractReport {
+ private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ private static String reportErrorTextMessageFormatter =
+ "{}环境 同步上报异常 \n" +
+ "> 空间ID:{} \n" +
+ "> 名称:{} \n" +
+ "> 时间:{} \n" +
+ "> 异常:{} \n"
+ ;
+
+ @Autowired
+ private EasyRetryProperties easyRetryProperties;
+
@Override
public boolean supports(boolean async) {
return !async;
@@ -49,11 +75,42 @@ public class SyncReport extends AbstractReport {
.unit(unit)
.build();
- NettyResult result = client.reportRetryInfo(Collections.singletonList(retryTaskDTO));
- LogUtils.debug(log, "Data report result result:[{}]", JsonUtil.toJsonString(result));
+ try {
+ NettyResult result = client.reportRetryInfo(Collections.singletonList(retryTaskDTO));
+ LogUtils.debug(log, "Data report result result:[{}]", JsonUtil.toJsonString(result));
+ return (Boolean) result.getData();
+ } catch (Exception e) {
+ sendMessage(e);
+ throw e;
+ }
- return (Boolean) result.getData();
}
+ private void sendMessage(Throwable e) {
+
+ try {
+ ConfigDTO.Notify notifyAttribute = GroupVersionCache.getNotifyAttribute(NotifySceneEnum.CLIENT_REPORT_ERROR.getNotifyScene());
+ if (Objects.isNull(notifyAttribute)) {
+ return;
+ }
+
+ AlarmContext context = AlarmContext.build()
+ .text(reportErrorTextMessageFormatter,
+ EnvironmentUtils.getActiveProfile(),
+ easyRetryProperties.getNamespace(),
+ EasyRetryProperties.getGroup(),
+ LocalDateTime.now().format(formatter),
+ e.getMessage())
+ .title("同步上报异常:[{}]", EasyRetryProperties.getGroup())
+ .notifyAttribute(notifyAttribute.getNotifyAttribute());
+
+ EasyRetryAlarmFactory easyRetryAlarmFactory = SpringContext.getBeanByType(EasyRetryAlarmFactory.class);
+ Alarm alarmType = easyRetryAlarmFactory.getAlarmType(notifyAttribute.getNotifyType());
+ alarmType.asyncSendMessage(context);
+ } catch (Exception e1) {
+ LogUtils.error(log, "客户端发送组件异常告警失败", e1);
+ }
+
+ }
}
diff --git a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java
index bde32ff9..c2be4dff 100644
--- a/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java
+++ b/easy-retry-client/easy-retry-client-core/src/main/java/com/aizuda/easy/retry/client/core/strategy/AbstractRetryStrategies.java
@@ -40,9 +40,10 @@ import java.util.function.Consumer;
public abstract class AbstractRetryStrategies implements RetryStrategy {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static String retryErrorMoreThresholdTextMessageFormatter =
- "{}环境 重试组件异常 \r\n" +
- "> 名称:{} \r\n" +
- "> 时间:{} \r\n" +
+ "{}环境 重试期间发生非预期异常 \n" +
+ "> 空间ID:{} \n" +
+ "> 名称:{} \n" +
+ "> 时间:{} \n" +
"> 异常:{} \n"
;
@@ -52,6 +53,8 @@ public abstract class AbstractRetryStrategies implements RetryStrategy {
private EasyRetryAlarmFactory easyRetryAlarmFactory;
@Autowired
private List reports;
+ @Autowired
+ private EasyRetryProperties easyRetryProperties;
@Override
public RetryerResultContext openRetry(String sceneName, String executorClassName, Object[] params) {
@@ -176,6 +179,7 @@ public abstract class AbstractRetryStrategies implements RetryStrategy {
AlarmContext context = AlarmContext.build()
.text(retryErrorMoreThresholdTextMessageFormatter,
EnvironmentUtils.getActiveProfile(),
+ easyRetryProperties.getNamespace(),
EasyRetryProperties.getGroup(),
LocalDateTime.now().format(formatter),
e.getMessage())
diff --git a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/util/DingDingUtils.java b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/util/DingDingUtils.java
index 99bd64f6..80065baa 100644
--- a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/util/DingDingUtils.java
+++ b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/util/DingDingUtils.java
@@ -53,8 +53,8 @@ public class DingDingUtils {
request.setMsgtype("markdown");
OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
markdown.setTitle(title);
- request.setMarkdown(markdown);
markdown.setText(subTextLength(getAtText(ats, text)));
+ request.setMarkdown(markdown);
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtMobiles(ats);
@@ -81,9 +81,10 @@ public class DingDingUtils {
public static boolean sendMessage(OapiRobotSendRequest request, String url) {
try {
- if (StrUtil.isNotBlank(url)) {
+ if (StrUtil.isBlank(url)) {
return false;
}
+
DingTalkClient client = new DefaultDingTalkClient(url);
client.execute(request);
diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/alarm/AbstractAlarm.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/alarm/AbstractAlarm.java
index b71c6022..e0541b48 100644
--- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/alarm/AbstractAlarm.java
+++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/alarm/AbstractAlarm.java
@@ -119,7 +119,7 @@ public abstract class AbstractAlarm alarmDTO.getCount()) {
+ if (notifyConfig.getNotifyThreshold() >= alarmDTO.getCount()) {
continue;
}
}
diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SceneConfigSceneController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SceneConfigController.java
similarity index 97%
rename from easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SceneConfigSceneController.java
rename to easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SceneConfigController.java
index 0f144522..5e231357 100644
--- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SceneConfigSceneController.java
+++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/SceneConfigController.java
@@ -20,7 +20,7 @@ import java.util.List;
*/
@RestController
@RequestMapping("/scene-config")
-public class SceneConfigSceneController {
+public class SceneConfigController {
@Autowired
private SceneConfigService sceneConfigService;
diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SceneConfigServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SceneConfigServiceImpl.java
index 2ab4b871..0974c77f 100644
--- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SceneConfigServiceImpl.java
+++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/SceneConfigServiceImpl.java
@@ -67,7 +67,7 @@ public class SceneConfigServiceImpl implements SceneConfigService {
List sceneConfigs = accessTemplate.getSceneConfigAccess()
.list(new LambdaQueryWrapper()
- .select(SceneConfig::getSceneName, SceneConfig::getDescription)
+ .select(SceneConfig::getSceneName, SceneConfig::getDescription, SceneConfig::getMaxRetryCount)
.eq(SceneConfig::getNamespaceId, namespaceId)
.eq(SceneConfig::getGroupName, groupName)
.orderByDesc(SceneConfig::getCreateDt));
diff --git a/frontend/src/views/task/form/NotifyForm.vue b/frontend/src/views/task/form/NotifyForm.vue
index 0d66640e..a2ded732 100644
--- a/frontend/src/views/task/form/NotifyForm.vue
+++ b/frontend/src/views/task/form/NotifyForm.vue
@@ -42,6 +42,7 @@
v-else
id="inputNumber"
:min="1"
+ :max="maxNotifyThreshold"
style="width: -webkit-fill-available"
v-decorator="[
'notifyThreshold',
@@ -63,8 +64,8 @@
-
- {{ item.sceneName }}
+
+ {{ item.sceneName }}
@@ -321,7 +322,8 @@ export default {
notifySceneValue: '1',
rateLimiterStatusValue: '0',
defaultRateLimiterStatusValue: '0',
- defaultRateLimiterThreshold: '100'
+ defaultRateLimiterThreshold: '100',
+ maxNotifyThreshold: 999
}
},
beforeCreate () {
@@ -365,6 +367,9 @@ export default {
this.sceneList = res.data
})
},
+ changeSceneName (value, option) {
+ this.maxNotifyThreshold = option.data.attrs.maxRetryCount
+ },
changeRateLimiterStatus (rateLimiterStatus) {
this.rateLimiterStatusValue = rateLimiterStatus
},