【fix】添加虚拟路由管理

This commit is contained in:
wujiawei
2025-05-06 17:48:41 +08:00
parent 9a44a598ef
commit 965142793c
12 changed files with 198 additions and 38 deletions

View File

@ -98,7 +98,7 @@ public class LazyNettyClientVirtualRouteDO {
* 客户端虚拟路由IP
*/
@Schema(description ="客户端虚拟路由IP",name ="virtualIp",example = "")
@LazyTableField(name="virtual_ip",comment="客户端虚拟路由IP",notNull=true,columnType="varchar(255)")
@LazyTableFieldUnique(name="virtual_ip",comment="客户端虚拟路由IP",notNull=true,columnType="varchar(255)")
private String virtualIp;
/**
@ -106,7 +106,7 @@ public class LazyNettyClientVirtualRouteDO {
* 客户端虚拟路由端口默认ALL
*/
@Schema(description ="客户端虚拟路由端口默认ALL",name ="virtualPort",example = "")
@LazyTableField(name="virtual_port",comment="客户端虚拟路由端口默认ALL",notNull=true,defaultValue="'ALL'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="varchar(255)")
@LazyTableFieldUnique(name="virtual_port",comment="客户端虚拟路由端口默认ALL",notNull=true,defaultValue="'ALL'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="varchar(255)")
private String virtualPort;
}

View File

@ -90,7 +90,7 @@ public class LazyNettyServerVirtualRouteDO {
* 虚拟服务端路由IP
*/
@Schema(description ="虚拟服务端路由IP",name ="virtualIp",example = "")
@LazyTableField(name="virtual_ip",comment="虚拟服务端路由IP",notNull=true,columnType="varchar(255)")
@LazyTableFieldUnique(name="virtual_ip",comment="虚拟服务端路由IP",notNull=true,columnType="varchar(255)")
private String virtualIp;
/**
@ -98,7 +98,7 @@ public class LazyNettyServerVirtualRouteDO {
* 虚拟服务端路由端口默认ALL
*/
@Schema(description ="虚拟服务端路由端口默认ALL",name ="virtualPort",example = "")
@LazyTableField(name="virtual_port",comment="虚拟服务端路由端口默认ALL",notNull=true,defaultValue="'ALL'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="varchar(255)")
@LazyTableFieldUnique(name="virtual_port",comment="虚拟服务端路由端口默认ALL",notNull=true,defaultValue="'ALL'",upsertStrategy = LazyFieldStrategy.NEVER,columnType="varchar(255)")
private String virtualPort;
}

View File

@ -11,6 +11,7 @@ import org.framework.lazy.cloud.network.heartbeat.protocol.route.RouteType;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientRouteDO;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyClientRouteConverter;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.route.LazyNettyClientRouteRepository;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyClientVirtualRouteDO;
import org.springframework.stereotype.Repository;
import java.nio.charset.StandardCharsets;
@ -52,23 +53,40 @@ public class LazyNettyClientRouteRepositoryImpl implements LazyNettyClientRout
public Result<LazyNettyClientRoute> story(LazyNettyClientRoute lazyNettyClientRoute) {
LazyNettyClientRouteDO lazyNettyClientRouteDO = LazyNettyClientRouteConverter.INSTANCE.fromLazyNettyClientRoute(lazyNettyClientRoute);
lazyLambdaStream.upsert(lazyNettyClientRouteDO);
// 更新服务端路由
String routeIp = lazyNettyClientRoute.getRouteIp();
String routePort = lazyNettyClientRoute.getRoutePort();
String clientId = lazyNettyClientRoute.getClientId();
// 新增虚拟ip映射
LazyNettyClientVirtualRouteDO lazyNettyClientVirtualRouteDO = new LazyNettyClientVirtualRouteDO();
lazyNettyClientVirtualRouteDO.setIsDeleted(false);
lazyNettyClientVirtualRouteDO.setTargetClientId(clientId);
lazyNettyClientVirtualRouteDO.setVirtualIp(routeIp);
lazyNettyClientVirtualRouteDO.setVirtualPort(routePort);
lazyNettyClientVirtualRouteDO.setTargetIp(routeIp);
lazyNettyClientVirtualRouteDO.setTargetPort(routePort);
lazyLambdaStream.upsert(lazyNettyClientVirtualRouteDO);
// 更新服务端路由
ClientProxyRoute serverProxyClientRoute = new ClientProxyRoute();
serverProxyClientRoute.setClientId(clientId);
serverProxyClientRoute.setAllowIp(routeIp);
serverProxyClientRoute.setAllowPort(routePort);
serverProxyClientRoute.setTargetClientId(clientId);
serverProxyClientRoute.setVirtualIp(routeIp);
serverProxyClientRoute.setVirtualPort(routePort);
serverProxyClientRoute.setTargetIp(routeIp);
serverProxyClientRoute.setTargetPort(routePort);
serverProxyClientRoute.setRouteType(RouteType.SERVER_PROXY_CLIENT);
RouteContext.setRoute(serverProxyClientRoute);
ClientProxyRoute clientProxyRoute = new ClientProxyRoute();
clientProxyRoute.setClientId(clientId);
clientProxyRoute.setAllowIp(routeIp);
clientProxyRoute.setAllowPort(routePort);
clientProxyRoute.setTargetClientId(clientId);
clientProxyRoute.setVirtualIp(routeIp);
clientProxyRoute.setVirtualPort(routePort);
clientProxyRoute.setTargetIp(routeIp);
clientProxyRoute.setTargetPort(routePort);
clientProxyRoute.setRouteType(RouteType.CLIENT_PROXY_CLIENT);
// 发送所有客户端本地路由刷新
ChannelContext.getChannels().forEach((channelClientId, channels) -> {

View File

@ -1,6 +1,14 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.persistence;
import com.alibaba.fastjson.JSON;
import io.netty.channel.Channel;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
import org.framework.lazy.cloud.network.heartbeat.protocol.route.ClientProxyRoute;
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.server.standalone.domain.model.lazy.netty.client.virtual.route.LazyNettyClientVirtualRoute;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.client.virtual.route.LazyNettyClientVirtualRouteRepository;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyClientVirtualRouteConverter;
@ -13,6 +21,7 @@ import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Collectors;
@ -42,6 +51,44 @@ public class LazyNettyClientVirtualRouteRepositoryImpl implements LazyNettyClien
public Result<LazyNettyClientVirtualRoute> story(LazyNettyClientVirtualRoute lazyNettyClientVirtualRoute) {
LazyNettyClientVirtualRouteDO lazyNettyClientVirtualRouteDO = LazyNettyClientVirtualRouteConverter.INSTANCE.fromLazyNettyClientVirtualRoute(lazyNettyClientVirtualRoute);
lazyLambdaStream.upsert(lazyNettyClientVirtualRouteDO);
// 更新服务端路由
String virtualIp = lazyNettyClientVirtualRoute.getVirtualIp();
String virtualPort = lazyNettyClientVirtualRoute.getVirtualPort();
String targetIp = lazyNettyClientVirtualRoute.getTargetIp();
String targetPort = lazyNettyClientVirtualRoute.getTargetPort();
String targetClientId = lazyNettyClientVirtualRoute.getTargetClientId();
ClientProxyRoute serverProxyClientRoute = new ClientProxyRoute();
serverProxyClientRoute.setVirtualIp(virtualIp);
serverProxyClientRoute.setVirtualPort(virtualPort);
serverProxyClientRoute.setTargetClientId(targetClientId);
serverProxyClientRoute.setTargetIp(targetIp);
serverProxyClientRoute.setTargetPort(targetPort);
serverProxyClientRoute.setRouteType(RouteType.SERVER_PROXY_CLIENT);
RouteContext.setRoute(serverProxyClientRoute);
ClientProxyRoute clientProxyRoute = new ClientProxyRoute();
clientProxyRoute.setVirtualIp(virtualIp);
clientProxyRoute.setVirtualPort(virtualPort);
clientProxyRoute.setTargetClientId(targetClientId);
clientProxyRoute.setTargetIp(targetIp);
clientProxyRoute.setTargetPort(targetPort);
clientProxyRoute.setRouteType(RouteType.CLIENT_PROXY_CLIENT);
// 发送所有客户端本地路由刷新
ChannelContext.getChannels().forEach((channelClientId, channels) -> {
NettyProxyMsg nettyMsg = new NettyProxyMsg();
nettyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_SERVER_CLIENT_ROUTE_);
nettyMsg.setData((JSON.toJSONString(clientProxyRoute)
.getBytes(StandardCharsets.UTF_8)));
// 发送所有客户端ID
for (Channel channel : channels) {
channel.writeAndFlush(nettyMsg);
}
});
return ResultFactory.successOf();
}

View File

@ -11,6 +11,7 @@ import org.framework.lazy.cloud.network.heartbeat.protocol.route.ServerProxyRout
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.domain.model.lazy.netty.server.route.LazyNettyServerRouteRepository;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.entity.LazyNettyServerVirtualRouteDO;
import org.springframework.stereotype.Repository;
import java.nio.charset.StandardCharsets;
@ -52,20 +53,34 @@ 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();
// 新增虚拟ip映射
LazyNettyServerVirtualRouteDO lazyNettyServerVirtualRouteDO = new LazyNettyServerVirtualRouteDO();
lazyNettyServerVirtualRouteDO.setIsDeleted(false);
lazyNettyServerVirtualRouteDO.setVirtualIp(routeIp);
lazyNettyServerVirtualRouteDO.setVirtualPort(routePort);
lazyNettyServerVirtualRouteDO.setTargetIp(routeIp);
lazyNettyServerVirtualRouteDO.setTargetPort(routePort);
lazyLambdaStream.upsert(lazyNettyServerVirtualRouteDO);
// 更新服务端路由
ServerProxyRoute serverProxyRoute = new ServerProxyRoute();
serverProxyRoute.setServerIp("default");
serverProxyRoute.setAllowIp(routeIp);
serverProxyRoute.setAllowPort(routePort);
serverProxyRoute.setVirtualIp(routeIp);
serverProxyRoute.setVirtualPort(routePort);
serverProxyRoute.setTargetIp(routeIp);
serverProxyRoute.setTargetPort(routePort);
serverProxyRoute.setRouteType(RouteType.LOCAL);
RouteContext.setRoute(serverProxyRoute);
ServerProxyRoute clientProxyServerRoute = new ServerProxyRoute();
clientProxyServerRoute.setServerIp("default");
clientProxyServerRoute.setAllowIp(routeIp);
clientProxyServerRoute.setAllowPort(routePort);
clientProxyServerRoute.setVirtualIp(routeIp);
clientProxyServerRoute.setVirtualPort(routePort);
clientProxyServerRoute.setTargetIp(routeIp);
clientProxyServerRoute.setTargetPort(routePort);
clientProxyServerRoute.setRouteType(RouteType.CLIENT_PROXY_SEVER);
// 发送所有客户端本地路由刷新
ChannelContext.getChannels().forEach((clientId, channels) -> {

View File

@ -1,6 +1,14 @@
package org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.persistence;
import com.alibaba.fastjson.JSON;
import io.netty.channel.Channel;
import jakarta.annotation.Resource;
import org.framework.lazy.cloud.network.heartbeat.common.ChannelContext;
import org.framework.lazy.cloud.network.heartbeat.common.advanced.payload.NettyProxyMsg;
import org.framework.lazy.cloud.network.heartbeat.common.constant.ProxyMessageType;
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.domain.model.lazy.netty.server.virtual.route.LazyNettyServerVirtualRoute;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.domain.model.lazy.netty.server.virtual.route.LazyNettyServerVirtualRouteRepository;
import org.framework.lazy.cloud.network.heartbeat.server.standalone.infrastructure.converter.LazyNettyServerVirtualRouteConverter;
@ -13,6 +21,7 @@ import org.wu.framework.lazy.orm.database.lambda.stream.wrapper.LazyWrappers;
import org.wu.framework.web.response.Result;
import org.wu.framework.web.response.ResultFactory;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.stream.Collectors;
@ -40,8 +49,45 @@ public class LazyNettyServerVirtualRouteRepositoryImpl implements LazyNettyServe
@Override
public Result<LazyNettyServerVirtualRoute> story(LazyNettyServerVirtualRoute lazyNettyServerVirtualRoute) {
// 验证ip是否存在
//数据下发
LazyNettyServerVirtualRouteDO lazyNettyServerVirtualRouteDO = LazyNettyServerVirtualRouteConverter.INSTANCE.fromLazyNettyServerVirtualRoute(lazyNettyServerVirtualRoute);
lazyLambdaStream.upsert(lazyNettyServerVirtualRouteDO);
// 更新服务端路由
String virtualIp = lazyNettyServerVirtualRoute.getVirtualIp();
String virtualPort = lazyNettyServerVirtualRoute.getVirtualPort();
String targetIp = lazyNettyServerVirtualRoute.getTargetIp();
String targetPort = lazyNettyServerVirtualRoute.getTargetPort();
ServerProxyRoute serverProxyRoute = new ServerProxyRoute();
serverProxyRoute.setServerIp("default");
serverProxyRoute.setVirtualIp(virtualIp);
serverProxyRoute.setVirtualPort(virtualPort);
serverProxyRoute.setTargetIp(targetIp);
serverProxyRoute.setTargetPort(targetPort);
serverProxyRoute.setRouteType(RouteType.LOCAL);
RouteContext.setRoute(serverProxyRoute);
ServerProxyRoute clientProxyServerRoute = new ServerProxyRoute();
clientProxyServerRoute.setServerIp("default");
clientProxyServerRoute.setVirtualIp(virtualIp);
clientProxyServerRoute.setVirtualPort(virtualPort);
clientProxyServerRoute.setTargetIp(targetIp);
clientProxyServerRoute.setTargetPort(targetPort);
clientProxyServerRoute.setRouteType(RouteType.CLIENT_PROXY_SEVER);
// 发送所有客户端本地路由刷新
ChannelContext.getChannels().forEach((clientId, channels) -> {
NettyProxyMsg nettyMsg = new NettyProxyMsg();
nettyMsg.setType(ProxyMessageType.HTTP_DISTRIBUTE_CLIENT_PROXY_SERVER_SERVER_ROUTE_);
nettyMsg.setData((JSON.toJSONString(clientProxyServerRoute)
.getBytes(StandardCharsets.UTF_8)));
// 发送所有客户端ID
for (Channel channel : channels) {
channel.writeAndFlush(nettyMsg);
}
});
return ResultFactory.successOf();
}