diff --git a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/handler/NettyHttpProxyHandler.java b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/handler/NettyHttpProxyHandler.java index d3c89e5..16cb400 100644 --- a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/handler/NettyHttpProxyHandler.java +++ b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/handler/NettyHttpProxyHandler.java @@ -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_); } diff --git a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/handler/NettySocks5CommandRequestHandler.java b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/handler/NettySocks5CommandRequestHandler.java index 8171f7c..07fddbe 100644 --- a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/handler/NettySocks5CommandRequestHandler.java +++ b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/handler/NettySocks5CommandRequestHandler.java @@ -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_); } diff --git a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ClientProxyRoute.java b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ClientProxyRoute.java index 11a6a1c..276b7c4 100644 --- a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ClientProxyRoute.java +++ b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ClientProxyRoute.java @@ -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; /** * 路由类型 diff --git a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ProxyRoute.java b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ProxyRoute.java index b37d993..f3a8acb 100644 --- a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ProxyRoute.java +++ b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ProxyRoute.java @@ -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(); } diff --git a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/RouteContext.java b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/RouteContext.java index 8d49f4d..48f604a 100644 --- a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/RouteContext.java +++ b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/RouteContext.java @@ -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; diff --git a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ServerProxyRoute.java b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ServerProxyRoute.java index ceb554e..fd7f8c9 100644 --- a/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ServerProxyRoute.java +++ b/wu-lazy-cloud-heartbeat-protocol-proxy/src/main/java/org/framework/lazy/cloud/network/heartbeat/protocol/route/ServerProxyRoute.java @@ -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; + /** * 路由类型 diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientVirtualRouteDO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientVirtualRouteDO.java index 9e87af5..934487d 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientVirtualRouteDO.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyClientVirtualRouteDO.java @@ -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; } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyServerVirtualRouteDO.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyServerVirtualRouteDO.java index 5bea1aa..aca10db 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyServerVirtualRouteDO.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/entity/LazyNettyServerVirtualRouteDO.java @@ -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; } \ No newline at end of file diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientRouteRepositoryImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientRouteRepositoryImpl.java index ed8ccb8..52f9411 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientRouteRepositoryImpl.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientRouteRepositoryImpl.java @@ -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 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) -> { diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientVirtualRouteRepositoryImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientVirtualRouteRepositoryImpl.java index 9d7d451..584f4fd 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientVirtualRouteRepositoryImpl.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyClientVirtualRouteRepositoryImpl.java @@ -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 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(); } diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerRouteRepositoryImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerRouteRepositoryImpl.java index 43b7195..ac18a10 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerRouteRepositoryImpl.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerRouteRepositoryImpl.java @@ -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 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) -> { diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerVirtualRouteRepositoryImpl.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerVirtualRouteRepositoryImpl.java index c9f5239..8e755aa 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerVirtualRouteRepositoryImpl.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/standalone/infrastructure/persistence/LazyNettyServerVirtualRouteRepositoryImpl.java @@ -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 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(); }