【fix】 添加服务端、客户端路由管理接口

This commit is contained in:
wujiawei
2025-04-06 00:41:38 +08:00
parent 3f7f10bcd5
commit 8728cd5d54
8 changed files with 147 additions and 4 deletions

View File

@ -50,14 +50,17 @@ public class ServerAutoConfiguration {
LazyServerPermeateClientMappingApplication lazyServerPermeateClientMappingApplication,
LazyClientPermeateServerMappingApplication lazyClientPermeateServerMappingApplication,
LazyClientPermeateClientMappingApplication lazyClientPermeateClientMappingApplication,
LazyNettyServerRouteApplication lazyNettyServerRouteApplication,
LazyNettyClientTokenBucketApplication lazyNettyClientTokenBucketApplication,
ServerNodeProperties serverNodeProperties
) {
return new ServerHandleTcpClientConnectSuccessTypeAdvanced(lazyClientStatsChangeApplication,
return new ServerHandleTcpClientConnectSuccessTypeAdvanced(
lazyClientStatsChangeApplication,
lazyNettyClientBlacklistApplication,
lazyServerPermeateClientMappingApplication,
lazyClientPermeateServerMappingApplication,
lazyClientPermeateClientMappingApplication,
lazyNettyServerRouteApplication,
lazyNettyClientTokenBucketApplication,
serverNodeProperties
);

View File

@ -9,13 +9,17 @@ import org.framework.lazy.cloud.network.heartbeat.common.constant.TcpMessageType
import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.permeate.tcp.server.AbstractHandleTcpClientConnectSuccessTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
import org.framework.lazy.cloud.network.heartbeat.protocol.route.RouteType;
import org.framework.lazy.cloud.network.heartbeat.protocol.route.ServerProxyRoute;
import org.framework.lazy.cloud.network.heartbeat.server.properties.ServerNodeProperties;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.*;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.permeate.client.mapping.LazyClientPermeateClientMappingQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.permeate.server.mapping.LazyClientPermeateServerMappingQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.client.state.LazyNettyClientLoginCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.command.lazy.netty.server.route.LazyNettyServerRouteQueryListCommand;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientPermeateClientMappingDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyClientPermeateServerMappingDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.application.dto.LazyNettyServerRouteDTO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.blacklist.LazyNettyClientBlacklist;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Role;
@ -41,16 +45,18 @@ public class ServerHandleTcpClientConnectSuccessTypeAdvanced extends AbstractHan
private final LazyClientPermeateServerMappingApplication lazyClientPermeateServerMappingApplication;
private final LazyClientPermeateClientMappingApplication lazyClientPermeateClientMappingApplication;
private final LazyNettyServerRouteApplication lazyNettyServerRouteApplication;
private final LazyNettyClientTokenBucketApplication lazyNettyClientTokenBucketApplication;
private final ServerNodeProperties serverNodeProperties;
public ServerHandleTcpClientConnectSuccessTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication, LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication, LazyServerPermeateClientMappingApplication lazyServerPermeateClientMappingApplication, LazyClientPermeateServerMappingApplication lazyClientPermeateServerMappingApplication, LazyClientPermeateClientMappingApplication lazyClientPermeateClientMappingApplication, LazyNettyClientTokenBucketApplication lazyNettyClientTokenBucketApplication, ServerNodeProperties serverNodeProperties) {
public ServerHandleTcpClientConnectSuccessTypeAdvanced(LazyClientStatsChangeApplication lazyClientStatsChangeApplication, LazyNettyClientBlacklistApplication lazyNettyClientBlacklistApplication, LazyServerPermeateClientMappingApplication lazyServerPermeateClientMappingApplication, LazyClientPermeateServerMappingApplication lazyClientPermeateServerMappingApplication, LazyClientPermeateClientMappingApplication lazyClientPermeateClientMappingApplication, LazyNettyServerRouteApplication lazyNettyServerRouteApplication, LazyNettyClientTokenBucketApplication lazyNettyClientTokenBucketApplication, ServerNodeProperties serverNodeProperties) {
this.lazyClientStatsChangeApplication = lazyClientStatsChangeApplication;
this.lazyNettyClientBlacklistApplication = lazyNettyClientBlacklistApplication;
this.lazyServerPermeateClientMappingApplication = lazyServerPermeateClientMappingApplication;
this.lazyClientPermeateServerMappingApplication = lazyClientPermeateServerMappingApplication;
this.lazyClientPermeateClientMappingApplication = lazyClientPermeateClientMappingApplication;
this.lazyNettyServerRouteApplication = lazyNettyServerRouteApplication;
this.lazyNettyClientTokenBucketApplication = lazyNettyClientTokenBucketApplication;
this.serverNodeProperties = serverNodeProperties;
}
@ -176,6 +182,26 @@ public class ServerHandleTcpClientConnectSuccessTypeAdvanced extends AbstractHan
newChannel.writeAndFlush(nettyMsg);
}
});
// 下发服务端路由
LazyNettyServerRouteQueryListCommand lazyNettyServerRouteQueryListCommand = new LazyNettyServerRouteQueryListCommand();
lazyNettyServerRouteQueryListCommand.setIsDeleted(false);
lazyNettyServerRouteApplication.findList(lazyNettyServerRouteQueryListCommand)
.accept(lazyNettyServerRouteDTOS -> {
for (LazyNettyServerRouteDTO lazyNettyServerRouteDTO : lazyNettyServerRouteDTOS) {
String routeIp = lazyNettyServerRouteDTO.getRouteIp();
String routePort = lazyNettyServerRouteDTO.getRoutePort();
ServerProxyRoute serverProxyRoute = new ServerProxyRoute();
serverProxyRoute.setServerIp("default");
serverProxyRoute.setAllowIp(routeIp);
serverProxyRoute.setAllowPort(routePort);
serverProxyRoute.setRouteType(RouteType.CLIENT_PROXY_SEVER);
NettyProxyMsg nettyMsg = new NettyProxyMsg();
nettyMsg.setType(TcpMessageType.HTTP_CLIENT_PROXY_SERVER_SERVER_ROUTE_DISTRIBUTE_);
nettyMsg.setData((JSON.toJSONString(serverProxyRoute)
.getBytes(StandardCharsets.UTF_8)));
newChannel.writeAndFlush(nettyMsg);
}
});
}

View File

@ -1,10 +1,20 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.persistence;
import com.alibaba.fastjson.JSON;
import io.netty.channel.Channel;
import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.constant.TcpMessageType;
import org.framework.lazy.cloud.network.heartbeat.protocol.route.RouteContext;
import org.framework.lazy.cloud.network.heartbeat.protocol.route.RouteType;
import org.framework.lazy.cloud.network.heartbeat.protocol.route.ServerProxyRoute;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyServerRouteDO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyServerRouteConverter;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.mapper.LazyNettyServerRouteMapper;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.server.route.LazyNettyServerRouteRepository;
import org.springframework.stereotype.Repository;
import java.nio.charset.StandardCharsets;
import java.util.stream.Collectors;
import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyUpdateSetValueWrappers;
@ -43,6 +53,27 @@ public class LazyNettyServerRouteRepositoryImpl implements LazyNettyServerRout
public Result<LazyNettyServerRoute> story(LazyNettyServerRoute lazyNettyServerRoute) {
LazyNettyServerRouteDO lazyNettyServerRouteDO = LazyNettyServerRouteConverter.INSTANCE.fromLazyNettyServerRoute(lazyNettyServerRoute);
lazyLambdaStream.upsert(lazyNettyServerRouteDO);
// 更新服务端路由
String routeIp = lazyNettyServerRoute.getRouteIp();
String routePort = lazyNettyServerRoute.getRoutePort();
ServerProxyRoute serverProxyRoute = new ServerProxyRoute();
serverProxyRoute.setServerIp("default");
serverProxyRoute.setAllowIp(routeIp);
serverProxyRoute.setAllowPort(routePort);
serverProxyRoute.setRouteType(RouteType.CLIENT_PROXY_SEVER);
RouteContext.setRoute(serverProxyRoute);
// 发送所有客户端本地路由刷新
ChannelContext.getChannels().forEach((clientId, channels) -> {
NettyProxyMsg nettyMsg = new NettyProxyMsg();
nettyMsg.setType(TcpMessageType.HTTP_CLIENT_PROXY_SERVER_SERVER_ROUTE_DISTRIBUTE_);
nettyMsg.setData((JSON.toJSONString(serverProxyRoute)
.getBytes(StandardCharsets.UTF_8)));
// 发送所有客户端ID
for (Channel channel : channels) {
channel.writeAndFlush(nettyMsg);
}
});
return ResultFactory.successOf();
}