From 8728cd5d5419e96764297003709fea8872d89cb4 Mon Sep 17 00:00:00 2001 From: wujiawei <12345678> Date: Sun, 6 Apr 2025 00:41:38 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=E3=80=91=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E3=80=81=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E7=AE=A1=E7=90=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/ClientAutoConfiguration.java | 6 +++ ...entProxyServerServerRouteTypeAdvanced.java | 38 +++++++++++++++++++ ...entProxyServerServerRouteTypeAdvanced.java | 25 ++++++++++++ .../common/constant/TcpMessageType.java | 12 +++++- .../common/enums/TcpMessageTypeEnums.java | 6 +++ .../config/ServerAutoConfiguration.java | 5 ++- ...leTcpClientConnectSuccessTypeAdvanced.java | 28 +++++++++++++- .../LazyNettyServerRouteRepositoryImpl.java | 31 +++++++++++++++ 8 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/http/advanced/ClientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced.java create mode 100644 wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/http/client/AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced.java diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/ClientAutoConfiguration.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/ClientAutoConfiguration.java index 1b527d2..1bf20e6 100644 --- a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/ClientAutoConfiguration.java +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/config/ClientAutoConfiguration.java @@ -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(); + } } } diff --git a/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/http/advanced/ClientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced.java b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/http/advanced/ClientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced.java new file mode 100644 index 0000000..5d02675 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-client/src/main/java/org/framework/lazy/cloud/network/heartbeat/client/netty/proxy/http/advanced/ClientHandleDistributeHttpClientProxyServerServerRouteTypeAdvanced.java @@ -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 { + + + /** + * 处理当前数据 + * + * @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); + + + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/http/client/AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/http/client/AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced.java new file mode 100644 index 0000000..4cc1ba5 --- /dev/null +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/advanced/proxy/http/client/AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced.java @@ -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 + */ +public abstract class AbstractHandleHttpDistributeClientProxyServerServerRouteTypeAdvanced extends AbstractHandleChannelTypeAdvanced implements HandleChannelTypeAdvanced { + + + /** + * 是否支持当前类型 + * + * @param nettyProxyMsg 通道数据 + * @return 布尔类型 是、否 + */ + @Override + protected boolean doSupport(NettyProxyMsg nettyProxyMsg) { + return TcpMessageTypeEnums.HTTP_CLIENT_PROXY_SERVER_SERVER_ROUTE_DISTRIBUTE_.getTypeByte() == nettyProxyMsg.getType(); + } +} diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/constant/TcpMessageType.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/constant/TcpMessageType.java index 2f4b99a..fa25f6d 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/constant/TcpMessageType.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/constant/TcpMessageType.java @@ -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; diff --git a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/TcpMessageTypeEnums.java b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/TcpMessageTypeEnums.java index 8b0f55b..2c207e2 100644 --- a/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/TcpMessageTypeEnums.java +++ b/wu-lazy-cloud-heartbeat-common/src/main/java/org/framework/lazy/cloud/network/heartbeat/common/enums/TcpMessageTypeEnums.java @@ -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下发服务端路由"), diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/config/ServerAutoConfiguration.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/config/ServerAutoConfiguration.java index 92f74be..d37a4d1 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/config/ServerAutoConfiguration.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/config/ServerAutoConfiguration.java @@ -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 ); diff --git a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/permeate/tcp/advanced/ServerHandleTcpClientConnectSuccessTypeAdvanced.java b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/permeate/tcp/advanced/ServerHandleTcpClientConnectSuccessTypeAdvanced.java index 814d6ce..b53fb1f 100644 --- a/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/permeate/tcp/advanced/ServerHandleTcpClientConnectSuccessTypeAdvanced.java +++ b/wu-lazy-cloud-heartbeat-server/src/main/java/org/framework/lazy/cloud/network/heartbeat/server/netty/permeate/tcp/advanced/ServerHandleTcpClientConnectSuccessTypeAdvanced.java @@ -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); + } + }); } 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 693a61c..aaaa0b5 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 @@ -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 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(); }