【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

@ -5,6 +5,7 @@ import org.framework.lazy.cloud.network.heartbeat.client.context.NettyClientSock
import org.framework.lazy.cloud.network.heartbeat.client.netty.permeate.event.ClientChangeEvent;
import org.framework.lazy.cloud.network.heartbeat.client.netty.permeate.tcp.advanced.*;
import org.framework.lazy.cloud.network.heartbeat.client.netty.permeate.udp.advanced.*;
import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.http.advanced.ClientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.http.advanced.ClientHandleDistributeHttpClientProxyServerTransferTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.http.advanced.ClientHandleHttpClientProxyClientTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.http.advanced.ClientHandleHttpClientProxyServerTypeAdvanced;
@ -348,5 +349,10 @@ public class ClientAutoConfiguration {
public ClientHandleHttpClientProxyServerTypeAdvanced clientHandleHttpClientClientProxyServerTypeAdvanced() {
return new ClientHandleHttpClientProxyServerTypeAdvanced();
}
@Bean
public ClientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced clientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced() {
return new ClientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced();
}
}
}

View File

@ -0,0 +1,38 @@
package org.framework.lazy.cloud.network.heartbeat.client.netty.proxy.http.advanced;
import com.alibaba.fastjson.JSON;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j;
import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.client.AbstractHandleHttpDistributeClientProxyServerTransferTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.utils.ChannelAttributeKeyUtils;
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;
/**
* http 远程代理
* 客户端客户端远程到服务端客户端远程到客户端
*/
@Slf4j
public class ClientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced extends
AbstractHandleHttpDistributeClientProxyServerTransferTypeAdvanced<NettyProxyMsg> {
/**
* 处理当前数据
*
* @param channel 当前通道
* @param nettyProxyMsg 通道数据
*/
@Override
protected void doHandler(Channel channel, NettyProxyMsg nettyProxyMsg) {
byte[] data = nettyProxyMsg.getData();
ServerProxyRoute serverProxyRoute = JSON.parseObject(data, ServerProxyRoute.class);
RouteContext.setRoute(serverProxyRoute);
}
}

View File

@ -0,0 +1,25 @@
package org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.client;
import org.framework.lazy.cloud.network.heartbeat.common.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.AbstractHandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.HandleChannelTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.enums.TcpMessageTypeEnums;
/**
* 下发服务端路由
* @param <MSG>
*/
public abstract class AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced<MSG> extends AbstractHandleChannelTypeAdvanced<NettyProxyMsg> implements HandleChannelTypeAdvanced {
/**
* 是否支持当前类型
*
* @param nettyProxyMsg 通道数据
* @return 布尔类型
*/
@Override
protected boolean doSupport(NettyProxyMsg nettyProxyMsg) {
return TcpMessageTypeEnums.HTTP_CLIENT_PROXY_SERVER_SERVER_ROUTE_DISTRIBUTE_.getTypeByte() == nettyProxyMsg.getType();
}
}

View File

@ -1,14 +1,15 @@
package org.framework.lazy.cloud.network.heartbeat.common.constant;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.permeate.tcp.AbstractTcpHandleChannelHeartbeatTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.permeate.tcp.client.*;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.permeate.tcp.server.*;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.AbstractHttpLocalProxyTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.AbstractHttpClientProxyClientTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.AbstractHttpClientProxyServerTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.AbstractHttpLocalProxyTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.client.AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.client.AbstractHandleHttpDistributeClientProxyServerTransferTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferCloseTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.permeate.tcp.AbstractTcpHandleChannelHeartbeatTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.enums.TcpMessageTypeEnums;
/**
@ -264,6 +265,13 @@ public class TcpMessageType {
* @see AbstractHandleHttpReportClientProxyServerTransferCloseTypeAdvanced
*/
public static final byte HTTP_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_REPORT_ = HTTP_CLIENT_PROXY_SERVER_TRANSFER_DISTRIBUTE_ + 1;
/**
* 下发服务端路由
*
* @see TcpMessageTypeEnums#HTTP_CLIENT_PROXY_SERVER_SERVER_ROUTE_DISTRIBUTE_
* @see AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced
*/
public static final byte HTTP_CLIENT_PROXY_SERVER_SERVER_ROUTE_DISTRIBUTE_ = HTTP_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_REPORT_ + 1;

View File

@ -7,6 +7,7 @@ import org.framework.lazy.cloud.network.heartbeat.common.advanced.permeate.tcp.s
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.AbstractHttpLocalProxyTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.AbstractHttpClientProxyClientTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.AbstractHttpClientProxyServerTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.client.AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.client.AbstractHandleHttpDistributeClientProxyServerTransferTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferCloseTypeAdvanced;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.proxy.http.server.AbstractHandleHttpReportClientProxyServerTransferTypeAdvanced;
@ -162,6 +163,11 @@ public enum TcpMessageTypeEnums {
* @see AbstractHandleHttpReportClientProxyServerTransferCloseTypeAdvanced
*/
HTTP_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_REPORT_(TcpMessageType.HTTP_CLIENT_PROXY_SERVER_TRANSFER_CLOSE_REPORT_, "http远程服务端代理传输数据下发"),
/**
* 下发服务端路由
* @see AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced
*/
HTTP_CLIENT_PROXY_SERVER_SERVER_ROUTE_DISTRIBUTE_(TcpMessageType.HTTP_CLIENT_PROXY_SERVER_SERVER_ROUTE_DISTRIBUTE_, "http下发服务端路由"),

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();
}