starter 组件适配客户端线程池集群差异化配置.

pull/28/head
chen.ma 4 years ago
parent 23024563c2
commit c054b4ab7d

@ -4,8 +4,8 @@ import cn.hippo4j.common.model.InstanceInfo;
import cn.hippo4j.common.toolkit.ContentUtil; import cn.hippo4j.common.toolkit.ContentUtil;
import cn.hippo4j.starter.core.DiscoveryClient; import cn.hippo4j.starter.core.DiscoveryClient;
import cn.hippo4j.starter.remote.HttpAgent; import cn.hippo4j.starter.remote.HttpAgent;
import cn.hippo4j.starter.toolkit.IdentifyUtil;
import cn.hippo4j.starter.toolkit.inet.InetUtils; import cn.hippo4j.starter.toolkit.inet.InetUtils;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@ -29,7 +29,7 @@ public class DiscoveryConfig {
private final BootstrapProperties properties; private final BootstrapProperties properties;
private final InetUtils inetUtils; private final InetUtils hippo4JInetUtils;
@Bean @Bean
@SneakyThrows @SneakyThrows
@ -39,8 +39,8 @@ public class DiscoveryConfig {
String applicationName = environment.getProperty("spring.application.name"); String applicationName = environment.getProperty("spring.application.name");
InstanceInfo instanceInfo = new InstanceInfo(); InstanceInfo instanceInfo = new InstanceInfo();
instanceInfo.setInstanceId(getDefaultInstanceId(environment, inetUtils)) instanceInfo.setInstanceId(getDefaultInstanceId(environment, hippo4JInetUtils))
.setIpApplicationName(getIpApplicationName(environment, inetUtils)) .setIpApplicationName(getIpApplicationName(environment, hippo4JInetUtils))
.setHostName(InetAddress.getLocalHost().getHostAddress()) .setHostName(InetAddress.getLocalHost().getHostAddress())
.setGroupKey(itemId + "+" + namespace) .setGroupKey(itemId + "+" + namespace)
.setAppName(applicationName) .setAppName(applicationName)
@ -52,11 +52,8 @@ public class DiscoveryConfig {
.toString(); .toString();
instanceInfo.setCallBackUrl(callBackUrl); instanceInfo.setCallBackUrl(callBackUrl);
String ip = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); String identify = IdentifyUtil.generate(environment, hippo4JInetUtils);
String port = environment.getProperty("server.port"); instanceInfo.setIdentify(identify);
String identification = StrUtil.builder(ip, ":", port).toString();
instanceInfo.setIdentify(identification);
return instanceInfo; return instanceInfo;
} }

@ -1,6 +1,5 @@
package cn.hippo4j.starter.config; package cn.hippo4j.starter.config;
import cn.hutool.core.util.StrUtil;
import cn.hippo4j.common.config.ApplicationContextHolder; import cn.hippo4j.common.config.ApplicationContextHolder;
import cn.hippo4j.starter.controller.PoolRunStateController; import cn.hippo4j.starter.controller.PoolRunStateController;
import cn.hippo4j.starter.core.ConfigService; import cn.hippo4j.starter.core.ConfigService;
@ -10,7 +9,9 @@ import cn.hippo4j.starter.core.ThreadPoolOperation;
import cn.hippo4j.starter.enable.MarkerConfiguration; import cn.hippo4j.starter.enable.MarkerConfiguration;
import cn.hippo4j.starter.handler.DynamicThreadPoolBannerHandler; import cn.hippo4j.starter.handler.DynamicThreadPoolBannerHandler;
import cn.hippo4j.starter.remote.HttpAgent; import cn.hippo4j.starter.remote.HttpAgent;
import cn.hippo4j.starter.toolkit.IdentifyUtil;
import cn.hippo4j.starter.toolkit.inet.InetUtils; import cn.hippo4j.starter.toolkit.inet.InetUtils;
import cn.hutool.core.util.IdUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
@ -38,6 +39,8 @@ public class DynamicThreadPoolAutoConfiguration {
private final ConfigurableEnvironment environment; private final ConfigurableEnvironment environment;
public static final String CLIENT_IDENTIFICATION_VALUE = IdUtil.simpleUUID();
@Bean @Bean
public DynamicThreadPoolBannerHandler threadPoolBannerHandler() { public DynamicThreadPoolBannerHandler threadPoolBannerHandler() {
return new DynamicThreadPoolBannerHandler(properties); return new DynamicThreadPoolBannerHandler(properties);
@ -52,10 +55,8 @@ public class DynamicThreadPoolAutoConfiguration {
@Bean @Bean
@SuppressWarnings("all") @SuppressWarnings("all")
public ConfigService configService(HttpAgent httpAgent, InetUtils hippo4JInetUtils) { public ConfigService configService(HttpAgent httpAgent, InetUtils hippo4JInetUtils) {
String ip = hippo4JInetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); String identify = IdentifyUtil.generate(environment, hippo4JInetUtils);
String port = environment.getProperty("server.port"); return new ThreadPoolConfigService(httpAgent, identify);
String identification = StrUtil.builder(ip, ":", port).toString();
return new ThreadPoolConfigService(httpAgent, identification);
} }
@Bean @Bean

@ -70,7 +70,7 @@ public class ClientWorker implements DisposableBean {
return t; return t;
}); });
log.info("Client identity :: {}", CLIENT_IDENTIFICATION_VALUE); log.info("Client identity :: {}", identification);
this.executor.scheduleWithFixedDelay(() -> { this.executor.scheduleWithFixedDelay(() -> {
try { try {
@ -216,6 +216,7 @@ public class ClientWorker implements DisposableBean {
params.put("namespace", namespace); params.put("namespace", namespace);
params.put("itemId", itemId); params.put("itemId", itemId);
params.put("tpId", tpId); params.put("tpId", tpId);
params.put("instanceId", identification);
Result result = agent.httpGetByConfig(CONFIG_CONTROLLER_PATH, null, params, readTimeout); Result result = agent.httpGetByConfig(CONFIG_CONTROLLER_PATH, null, params, readTimeout);
if (result.isSuccess()) { if (result.isSuccess()) {

@ -0,0 +1,38 @@
package cn.hippo4j.starter.toolkit;
import cn.hippo4j.starter.toolkit.inet.InetUtils;
import cn.hutool.core.util.StrUtil;
import org.springframework.core.env.ConfigurableEnvironment;
import static cn.hippo4j.common.constant.Constants.IDENTIFY_SLICER_SYMBOL;
import static cn.hippo4j.starter.config.DynamicThreadPoolAutoConfiguration.CLIENT_IDENTIFICATION_VALUE;
/**
* Identify util.
*
* @author chen.ma
* @date 2021/12/5 22:25
*/
public class IdentifyUtil {
/**
* Generate identify.
*
* @param environment
* @param hippo4JInetUtils
* @return
*/
public static String generate(ConfigurableEnvironment environment, InetUtils hippo4JInetUtils) {
String ip = hippo4JInetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
String port = environment.getProperty("server.port");
String identification = StrUtil.builder(ip,
":",
port,
IDENTIFY_SLICER_SYMBOL,
CLIENT_IDENTIFICATION_VALUE
).toString();
return identification;
}
}
Loading…
Cancel
Save