mirror of
https://gitee.com/wujiawei1207537021/wu-lazy-cloud-network.git
synced 2025-06-03 03:47:55 +08:00
【fix】添加虚拟路由管理
This commit is contained in:
parent
9a44a598ef
commit
965142793c
@ -80,13 +80,17 @@ public class NettyHttpProxyHandler extends ChannelInboundHandlerAdapter {
|
||||
String visitorId = ChannelAttributeKeyUtils.getVisitorId(ctx.channel());
|
||||
NettyProxyMsg proxyMsg = new NettyProxyMsg();
|
||||
|
||||
|
||||
ProxyRoute route = RouteContext.getRoute(host, String.valueOf(port));
|
||||
String targetIp = route.getTargetIp();
|
||||
String targetPort = route.getTargetPort();
|
||||
proxyMsg.setVisitorId(visitorId);
|
||||
proxyMsg.setClientTargetIp(host);
|
||||
proxyMsg.setClientTargetPort(port);
|
||||
proxyMsg.setClientTargetIp(targetIp);
|
||||
proxyMsg.setClientTargetPort(Integer.valueOf(targetPort));
|
||||
proxyMsg.setData(bytes);
|
||||
|
||||
|
||||
ProxyRoute route = RouteContext.getRoute(host, String.valueOf(port));
|
||||
|
||||
if(ObjectUtils.isEmpty(route)){
|
||||
proxyMsg.setType(ProxyMessageType.HTTP_LOCAL_PROXY);
|
||||
}else {
|
||||
@ -94,14 +98,14 @@ public class NettyHttpProxyHandler extends ChannelInboundHandlerAdapter {
|
||||
proxyMsg.setType(ProxyMessageType.HTTP_LOCAL_PROXY);
|
||||
}else if (RouteType.CLIENT_PROXY_CLIENT.equals(route.getRouteType())){
|
||||
ClientProxyRoute clientProxyRoute= (ClientProxyRoute) route;
|
||||
String clientId = clientProxyRoute.getClientId();
|
||||
String clientId = clientProxyRoute.getTargetClientId();
|
||||
proxyMsg.setClientId(clientId);
|
||||
proxyMsg.setType(ProxyMessageType.HTTP_CLIENT_PROXY_CLIENT_);
|
||||
}else if (RouteType.CLIENT_PROXY_SEVER.equals(route.getRouteType())){
|
||||
proxyMsg.setType(ProxyMessageType.HTTP_CLIENT_PROXY_SERVER_);
|
||||
}else if (RouteType.SERVER_PROXY_CLIENT.equals(route.getRouteType())){
|
||||
ClientProxyRoute clientProxyRoute= (ClientProxyRoute) route;
|
||||
String clientId = clientProxyRoute.getClientId();
|
||||
String clientId = clientProxyRoute.getTargetClientId();
|
||||
proxyMsg.setClientId(clientId);
|
||||
proxyMsg.setType(ProxyMessageType.HTTP_SERVER_PROXY_CLIENT_);
|
||||
}
|
||||
|
@ -58,10 +58,13 @@ public class NettySocks5CommandRequestHandler extends SimpleChannelInboundHandle
|
||||
NettyProxyMsg proxyMsg = new NettyProxyMsg();
|
||||
|
||||
proxyMsg.setVisitorId(visitorId);
|
||||
proxyMsg.setClientTargetIp(host);
|
||||
proxyMsg.setClientTargetPort(port);
|
||||
|
||||
ProxyRoute route = RouteContext.getRoute(host, String.valueOf(port));
|
||||
String targetIp = route.getTargetIp();
|
||||
String targetPort = route.getTargetPort();
|
||||
proxyMsg.setClientTargetIp(targetIp);
|
||||
proxyMsg.setClientTargetPort(Integer.parseInt(targetPort));
|
||||
|
||||
|
||||
if(ObjectUtils.isEmpty(route)){
|
||||
proxyMsg.setType(ProxyMessageType.SOCKET_LOCAL_PROXY);
|
||||
}else {
|
||||
@ -69,14 +72,14 @@ public class NettySocks5CommandRequestHandler extends SimpleChannelInboundHandle
|
||||
proxyMsg.setType(ProxyMessageType.SOCKET_LOCAL_PROXY);
|
||||
}else if (RouteType.CLIENT_PROXY_CLIENT.equals(route.getRouteType())){
|
||||
ClientProxyRoute clientProxyRoute= (ClientProxyRoute) route;
|
||||
String clientId = clientProxyRoute.getClientId();
|
||||
String clientId = clientProxyRoute.getTargetClientId();
|
||||
proxyMsg.setClientId(clientId);
|
||||
proxyMsg.setType(ProxyMessageType.SOCKET_CLIENT_PROXY_CLIENT_);
|
||||
}else if (RouteType.CLIENT_PROXY_SEVER.equals(route.getRouteType())){
|
||||
proxyMsg.setType(ProxyMessageType.SOCKET_CLIENT_PROXY_SERVER_);
|
||||
}else if (RouteType.SERVER_PROXY_CLIENT.equals(route.getRouteType())){
|
||||
ClientProxyRoute clientProxyRoute= (ClientProxyRoute) route;
|
||||
String clientId = clientProxyRoute.getClientId();
|
||||
String clientId = clientProxyRoute.getTargetClientId();
|
||||
proxyMsg.setClientId(clientId);
|
||||
proxyMsg.setType(ProxyMessageType.SOCKET_SERVER_PROXY_CLIENT_);
|
||||
}
|
||||
|
@ -11,19 +11,29 @@ public class ClientProxyRoute implements ProxyRoute{
|
||||
|
||||
/**
|
||||
*
|
||||
* 客户端ID
|
||||
* 目标客户端ID
|
||||
*/
|
||||
private String clientId;
|
||||
private String targetClientId;
|
||||
|
||||
/**
|
||||
*
|
||||
* 虚拟IP
|
||||
*/
|
||||
private String virtualIp;
|
||||
/**
|
||||
* 虚拟端口
|
||||
*/
|
||||
private String virtualPort;
|
||||
|
||||
/**
|
||||
*
|
||||
* 路由IP
|
||||
*/
|
||||
private String allowIp;
|
||||
private String targetIp;
|
||||
/**
|
||||
* 允许代理的端口
|
||||
*/
|
||||
private String allowPort;
|
||||
private String targetPort;
|
||||
|
||||
/**
|
||||
* 路由类型
|
||||
|
@ -6,11 +6,17 @@ package org.framework.lazy.cloud.network.heartbeat.protocol.route;
|
||||
public interface ProxyRoute {
|
||||
|
||||
|
||||
public String getAllowIp();
|
||||
public String getVirtualIp();
|
||||
|
||||
|
||||
public RouteType getRouteType();
|
||||
|
||||
|
||||
public String getAllowPort();
|
||||
public String getVirtualPort();
|
||||
|
||||
|
||||
public String getTargetIp();
|
||||
|
||||
|
||||
public String getTargetPort();
|
||||
}
|
||||
|
@ -14,9 +14,9 @@ public class RouteContext {
|
||||
|
||||
public static void setRoute(ProxyRoute route) {
|
||||
RouteType routeType = route.getRouteType();
|
||||
String allowIp = route.getAllowIp();
|
||||
String allowPort = route.getAllowPort();
|
||||
String key = allowIp + ":" + allowPort + routeType;
|
||||
String virtualIp = route.getVirtualIp();
|
||||
String virtualPort = route.getVirtualPort();
|
||||
String key = virtualIp + ":" + virtualPort + routeType;
|
||||
if (m.containsKey(key)) {
|
||||
return;
|
||||
}
|
||||
@ -27,7 +27,7 @@ public class RouteContext {
|
||||
public static ProxyRoute getRoute(String ip, String port) {
|
||||
ProxyRoute p = m.values()
|
||||
.stream()
|
||||
.filter(route -> route.getAllowIp().equals(ip) && (route.getAllowPort().equals(port) || route.getAllowPort().equals("ALL")))
|
||||
.filter(route -> route.getVirtualIp().equals(ip) && (route.getVirtualPort().equals(port) || route.getVirtualPort().equals("ALL")))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
return p;
|
||||
|
@ -16,15 +16,26 @@ public class ServerProxyRoute implements ProxyRoute {
|
||||
private String serverIp;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 虚拟IP
|
||||
*/
|
||||
private String virtualIp;
|
||||
/**
|
||||
* 虚拟端口
|
||||
*/
|
||||
private String virtualPort;
|
||||
|
||||
/**
|
||||
*
|
||||
* 路由IP
|
||||
*/
|
||||
private String allowIp;
|
||||
private String targetIp;
|
||||
/**
|
||||
* 允许代理的端口
|
||||
*/
|
||||
private String allowPort;
|
||||
private String targetPort;
|
||||
|
||||
|
||||
/**
|
||||
* 路由类型
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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) -> {
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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) -> {
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user