集群问题处理

This commit is contained in:
geht
2026-06-09 18:26:31 +08:00
parent 5b8bd2797a
commit de48bd2324
19 changed files with 626 additions and 17 deletions

View File

@@ -32,8 +32,12 @@ import org.springframework.web.bind.annotation.*;
import jakarta.servlet.http.HttpServletRequest;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

View File

@@ -72,6 +72,17 @@ public class SysThirdAppConfig {
private Integer streamEnabled;
//update-end---author:GHT ---date:20260604 for【钉钉Stream回调】Stream事件推送主配置标识-----
//update-begin---author:GHT ---date:20260609 for【钉钉Stream开发】第三方配置页Stream接收节点可视化-----------
@Schema(description = "是否限制仅指定节点接收Stream(0-否,1-是)")
private Integer streamReceiverEnabled;
@Schema(description = "允许接收Stream的IP白名单逗号分隔")
private String streamDesignatedIps;
@Schema(description = "允许接收Stream的主机名白名单逗号分隔")
private String streamDesignatedHosts;
@Schema(description = "Stream集群Redis选主(0-否,1-是)")
private Integer streamClusterMode;
//update-end---author:GHT ---date:20260609 for【钉钉Stream开发】第三方配置页Stream接收节点可视化-----------
/**创建日期*/
@Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")

View File

@@ -1228,6 +1228,29 @@ public class ThirdAppDingtalkServiceImpl implements IThirdAppService {
}
//update-end---author:GHT ---date:20260604 for【钉钉Stream回调】获取钉钉应用凭证Stream模式专用-----
//update-begin---author:GHT ---date:20260609 for【钉钉Stream开发】获取Stream主配置含节点白名单-----------
/**
* 获取 Stream 主配置记录stream_enabled=1 优先)。
*/
public SysThirdAppConfig getStreamMasterConfig() {
java.util.List<SysThirdAppConfig> all = configMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<SysThirdAppConfig>()
.eq(SysThirdAppConfig::getThirdType, THIRD_TYPE)
.eq(SysThirdAppConfig::getStatus, 1)
.orderByDesc(SysThirdAppConfig::getStreamEnabled)
.orderByDesc(SysThirdAppConfig::getTenantId));
if (all == null || all.isEmpty()) {
return null;
}
for (SysThirdAppConfig c : all) {
if (c.getStreamEnabled() != null && c.getStreamEnabled() == 1) {
return c;
}
}
return all.get(0);
}
//update-end---author:GHT ---date:20260609 for【钉钉Stream开发】获取Stream主配置含节点白名单-----------
//update-begin---author:GHT ---date:20260604 for【钉钉Stream回调】后台线程专用AccessToken绕过租户检查-----
/**
* 后台线程专用:获取钉钉 AccessToken不依赖 TenantContext。

View File

@@ -0,0 +1,21 @@
# 复制为 application-dev-local.yml同目录仅本机生效勿提交 Git
# 作用:只有你这台电脑接收钉钉 Stream 回调与补偿扫描,其他共用 dev 库的机器不会抢消息
#
# 1. 复制application-dev-local.yml.example -> application-dev-local.yml
# 2. 查本机 IPPowerShell: ipconfig看 IPv4 地址)
# 3. 将 designated-ips 改成你的 IP推荐比主机名稳定
# 4. 重启 JeecgBoot
#
# 启动后若未匹配,日志会打印 localIps=... 便于核对
jeecg:
xslmes:
dingtalk:
stream:
receiver-enabled: true
# 推荐:仅 IP 白名单(二选一或同时配置,满足其一即可)
designated-ips:
- 192.168.1.100
# 可选主机名白名单hostname 命令查看)
# designated-hosts:
# - LAPTOP-9LEM1NNJ

View File

@@ -20,6 +20,9 @@ management:
include: metrics,httpexchanges,jeecghttptrace
spring:
config:
# 开发者本机覆盖配置(不提交 Git用于指定仅本机接收钉钉 Stream 回调
import: optional:classpath:application-dev-local.yml
# main:
# # 启动加速 (建议开发环境开启后flyway自动升级失效)
# lazy-initialization: true
@@ -214,6 +217,11 @@ jeecg:
xslmes:
dingtalk:
stream:
# 共享 dev 默认关闭;仅本机在 application-dev-local.yml 开启(见 application-dev-local.yml.example
receiver-enabled: false
# 白名单二选一或同时配置(满足其一即可);推荐 designated-ips比主机名稳定
designated-hosts: []
designated-ips: []
# 多实例部署务必 trueRedis 选主,仅 Leader 建 Stream 长连接
cluster-mode: true
leader-renew-interval-ms: 10000

View File

@@ -0,0 +1,6 @@
-- GHT 20260609 钉钉Stream开发第三方配置页可视化Stream 接收节点白名单
ALTER TABLE sys_third_app_config
ADD COLUMN stream_receiver_enabled TINYINT(1) NULL DEFAULT NULL COMMENT '是否限制仅指定节点接收Stream(0-,1-,NULL-沿用YAML)' AFTER stream_enabled,
ADD COLUMN stream_designated_ips VARCHAR(1000) NULL DEFAULT NULL COMMENT '允许接收Stream的IP白名单(逗号分隔)' AFTER stream_receiver_enabled,
ADD COLUMN stream_designated_hosts VARCHAR(500) NULL DEFAULT NULL COMMENT '允许接收Stream的主机名白名单(逗号分隔)' AFTER stream_designated_ips,
ADD COLUMN stream_cluster_mode TINYINT(1) NULL DEFAULT NULL COMMENT 'Stream集群Redis选主(0-,1-,NULL-沿用YAML)' AFTER stream_designated_hosts;