feat: 클라이언트 유량제어 Command 추가 및 removeClient() 구현
- ReloadInflowClientControlCommand: 클라이언트 버킷 전체/개별 리로드 - RemoveInflowClientControlCommand: 클라이언트 버킷 제거 - DualInflowControlManager.removeClient(clientId) 메서드 추가 (기존 removeAdapter/removeInterface와 동일한 패턴) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,59 @@
|
|||||||
|
package com.eactive.eai.agent.inflow;
|
||||||
|
|
||||||
|
import com.eactive.eai.agent.command.Command;
|
||||||
|
import com.eactive.eai.agent.command.CommandException;
|
||||||
|
import com.eactive.eai.common.inflow.InflowControlManager;
|
||||||
|
import com.eactive.eai.common.inflow.dual.DualInflowControlManager;
|
||||||
|
import com.eactive.eai.common.util.Logger;
|
||||||
|
|
||||||
|
public class ReloadInflowClientControlCommand extends Command {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public ReloadInflowClientControlCommand() {
|
||||||
|
super("ReloadInflowClientControlCommand");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object execute() throws CommandException {
|
||||||
|
Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
||||||
|
if (logger.isInfo())
|
||||||
|
logger.info(this.name + " is executed");
|
||||||
|
|
||||||
|
if (!(args instanceof String)) {
|
||||||
|
String rspErrorCode = "RECEAIMCM001";
|
||||||
|
String msg = makeException(rspErrorCode, null);
|
||||||
|
if (logger.isError())
|
||||||
|
logger.error(msg);
|
||||||
|
throw new CommandException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
String keyName = (String) args;
|
||||||
|
try {
|
||||||
|
InflowControlManager base = InflowControlManager.getInstance();
|
||||||
|
if (!(base instanceof DualInflowControlManager)) {
|
||||||
|
throw new IllegalStateException("DualInflowControlManager 가 활성화되지 않았습니다.");
|
||||||
|
}
|
||||||
|
DualInflowControlManager manager = (DualInflowControlManager) base;
|
||||||
|
|
||||||
|
if (keyName != null) {
|
||||||
|
if ("ALL".equals(keyName)) {
|
||||||
|
manager.reloadClient();
|
||||||
|
if (logger.isWarn())
|
||||||
|
logger.warn(this.name + "] all rule Reload.");
|
||||||
|
} else {
|
||||||
|
manager.reloadClient(keyName);
|
||||||
|
if (logger.isWarn())
|
||||||
|
logger.warn(this.name + "] " + keyName + " Reload.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
String rspErrorCode = "RECEAIMCM002";
|
||||||
|
String msg = makeException(rspErrorCode, e);
|
||||||
|
if (logger.isError())
|
||||||
|
logger.error(msg, e);
|
||||||
|
throw new CommandException(msg);
|
||||||
|
}
|
||||||
|
return "success";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.eactive.eai.agent.inflow;
|
||||||
|
|
||||||
|
import com.eactive.eai.agent.command.Command;
|
||||||
|
import com.eactive.eai.agent.command.CommandException;
|
||||||
|
import com.eactive.eai.common.inflow.InflowControlManager;
|
||||||
|
import com.eactive.eai.common.inflow.dual.DualInflowControlManager;
|
||||||
|
import com.eactive.eai.common.util.Logger;
|
||||||
|
|
||||||
|
public class RemoveInflowClientControlCommand extends Command {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
public RemoveInflowClientControlCommand() {
|
||||||
|
super("RemoveInflowClientControlCommand");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object execute() throws CommandException {
|
||||||
|
Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT);
|
||||||
|
if (logger.isInfo())
|
||||||
|
logger.info(this.name + " is executed");
|
||||||
|
|
||||||
|
if (!(args instanceof String)) {
|
||||||
|
String rspErrorCode = "RECEAIMCM001";
|
||||||
|
String msg = makeException(rspErrorCode, null);
|
||||||
|
if (logger.isError())
|
||||||
|
logger.error(msg);
|
||||||
|
throw new CommandException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
String key = (String) args;
|
||||||
|
try {
|
||||||
|
InflowControlManager base = InflowControlManager.getInstance();
|
||||||
|
if (!(base instanceof DualInflowControlManager)) {
|
||||||
|
throw new IllegalStateException("DualInflowControlManager 가 활성화되지 않았습니다.");
|
||||||
|
}
|
||||||
|
DualInflowControlManager manager = (DualInflowControlManager) base;
|
||||||
|
manager.removeClient(key);
|
||||||
|
if (logger.isWarn())
|
||||||
|
logger.warn(this.name + "] " + key + " removed.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
String rspErrorCode = "RECEAIMCM002";
|
||||||
|
String msg = makeException(rspErrorCode, e);
|
||||||
|
if (logger.isError())
|
||||||
|
logger.error(msg, e);
|
||||||
|
throw new CommandException(msg);
|
||||||
|
}
|
||||||
|
return "success";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -153,6 +153,10 @@ public class DualInflowControlManager extends InflowControlManager implements Du
|
|||||||
reloadBucketMap(clientBucketMap, InflowType.CLIENT, clientId);
|
reloadBucketMap(clientBucketMap, InflowType.CLIENT, clientId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void removeClient(String clientId) {
|
||||||
|
clientBucketMap.remove(clientId);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void reloadGroup() throws Exception {
|
public synchronized void reloadGroup() throws Exception {
|
||||||
super.reloadGroup();
|
super.reloadGroup();
|
||||||
|
|||||||
Reference in New Issue
Block a user