diff --git a/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/pom.xml b/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/pom.xml index a9e3e80..fe472e4 100644 --- a/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/pom.xml +++ b/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/pom.xml @@ -1,43 +1,54 @@ - - mini-spring-cloud - com.github - 1.0.0-SNAPSHOT - ../../pom.xml - - 4.0.0 - - mini-spring-cloud-api-gateway-example - - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - com.github - mini-spring-cloud-netflix-zuul - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + mini-spring-cloud + com.github + 1.0.0-SNAPSHOT + ../../pom.xml + + 4.0.0 + + mini-spring-cloud-api-gateway-example + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + com.github + mini-spring-cloud-netflix-zuul + + + + com.github + mini-spring-cloud-load-balancer + + + + com.netflix.archaius + archaius-core + 0.7.6 + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file diff --git a/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/src/main/java/com/github/cloud/examples/ApiGatewayApplication.java b/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/src/main/java/com/github/cloud/examples/ApiGatewayApplication.java index 793114a..fce83d5 100644 --- a/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/src/main/java/com/github/cloud/examples/ApiGatewayApplication.java +++ b/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/src/main/java/com/github/cloud/examples/ApiGatewayApplication.java @@ -7,7 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author derek(易仁川) - * @date 2022/6/26 + * @date 2022/6/26 */ @EnableZuulProxy @SpringBootApplication diff --git a/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/src/main/resources/application.yml b/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/src/main/resources/application.yml index 403a61e..8f1b777 100644 --- a/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/src/main/resources/application.yml +++ b/mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example/src/main/resources/application.yml @@ -1,3 +1,12 @@ +spring: + application: + name: api-gateway-application + cloud: + tutu: + discovery: + server-addr: localhost:6688 + service: ${spring.application.name} + server: port: 8888 diff --git a/mini-spring-cloud-netflix-zuul/pom.xml b/mini-spring-cloud-netflix-zuul/pom.xml index a35a028..ab63319 100644 --- a/mini-spring-cloud-netflix-zuul/pom.xml +++ b/mini-spring-cloud-netflix-zuul/pom.xml @@ -1,70 +1,70 @@ - - mini-spring-cloud - com.github - 1.0.0-SNAPSHOT - - 4.0.0 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + + mini-spring-cloud + com.github + 1.0.0-SNAPSHOT + + 4.0.0 - mini-spring-cloud-netflix-zuul + mini-spring-cloud-netflix-zuul - - - com.netflix.zuul - zuul-core - + + + com.netflix.zuul + zuul-core + - - org.springframework.boot - spring-boot-configuration-processor - true - + + org.springframework.boot + spring-boot-configuration-processor + true + - - org.springframework.boot - spring-boot - true - + + org.springframework.boot + spring-boot + true + - - org.springframework.boot - spring-boot-autoconfigure - true - + + org.springframework.boot + spring-boot-autoconfigure + true + - - org.springframework.boot - spring-boot-starter - true - + + org.springframework.boot + spring-boot-starter + true + - - org.springframework.cloud - spring-cloud-commons - + + org.springframework.cloud + spring-cloud-commons + - - org.springframework.cloud - spring-cloud-context - + + org.springframework.cloud + spring-cloud-context + - - org.springframework.boot - spring-boot-starter-web - + + org.springframework.boot + spring-boot-starter-web + - - cn.hutool - hutool-all - + + cn.hutool + hutool-all + - - com.alibaba - fastjson - - + + com.alibaba + fastjson + + \ No newline at end of file diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/EnableZuulProxy.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/EnableZuulProxy.java index 603555d..4232525 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/EnableZuulProxy.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/EnableZuulProxy.java @@ -9,8 +9,9 @@ import org.springframework.context.annotation.Import; /** * 启用zuul网关 + * * @author derek(易仁川) - * @date 2022/6/23 + * @date 2022/6/23 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/ZuulServerAutoConfiguration.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/ZuulServerAutoConfiguration.java index 6569a4f..bd1c148 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/ZuulServerAutoConfiguration.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/ZuulServerAutoConfiguration.java @@ -24,8 +24,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** + * zuul API网关自动配置类 + * * @author derek(易仁川) - * @date 2022/6/23 + * @date 2022/6/23 */ @Configuration @EnableConfigurationProperties({ZuulProperties.class}) @@ -42,6 +44,9 @@ public class ZuulServerAutoConfiguration { return new ServletRegistrationBean<>(new ZuulServlet(), zuulProperties.getServletPath()); } + /** + * 路由定位器 + */ @Bean public RouteLocator simpleRouteLocator() { return new SimpleRouteLocator(zuulProperties); @@ -71,6 +76,9 @@ public class ZuulServerAutoConfiguration { return new SendResponseFilter(); } + /** + * 注册过滤器 + */ @Bean public FilterRegistry filterRegistry(Map filterMap) { FilterRegistry filterRegistry = FilterRegistry.instance(); diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/Route.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/Route.java index d8eb43a..7e151a1 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/Route.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/Route.java @@ -2,8 +2,9 @@ package com.github.cloud.netflix.zuul.filters; /** * 路由 + * * @author derek(易仁川) - * @date 2022/6/28 + * @date 2022/6/28 */ public class Route { @@ -16,7 +17,6 @@ public class Route { this.location = location; } - public String getPath() { return path; } diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/RouteLocator.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/RouteLocator.java index e4b0ee7..00735a5 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/RouteLocator.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/RouteLocator.java @@ -2,13 +2,15 @@ package com.github.cloud.netflix.zuul.filters; /** * 路由定位器 + * * @author derek(易仁川) - * @date 2022/6/28 + * @date 2022/6/28 */ public interface RouteLocator { /** * 获取匹配的路由 + * * @param path * @return */ diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/SimpleRouteLocator.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/SimpleRouteLocator.java index 14b9cae..452c9ec 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/SimpleRouteLocator.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/SimpleRouteLocator.java @@ -1,14 +1,15 @@ package com.github.cloud.netflix.zuul.filters; -import java.util.Map; - import org.springframework.util.AntPathMatcher; import org.springframework.util.PathMatcher; +import java.util.Map; + /** * 路由定位器实现类 + * * @author derek(易仁川) - * @date 2022/6/28 + * @date 2022/6/28 */ public class SimpleRouteLocator implements RouteLocator { @@ -26,10 +27,11 @@ public class SimpleRouteLocator implements RouteLocator { ZuulProperties.ZuulRoute zuulRoute = entry.getValue(); String pattern = zuulRoute.getPath(); if (pathMatcher.match(pattern, path)) { - return new Route(path, zuulRoute.getServiceId()); + String targetPath = path.substring(pattern.indexOf("*") - 1); + return new Route(targetPath, zuulRoute.getServiceId()); } } return null; } -} +} \ No newline at end of file diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/ZuulProperties.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/ZuulProperties.java index 4f619f8..b7e0669 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/ZuulProperties.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/ZuulProperties.java @@ -7,7 +7,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties; /** * @author derek(易仁川) - * @date 2022/6/23 + * @date 2022/6/23 */ @ConfigurationProperties("zuul") public class ZuulProperties { diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/post/SendResponseFilter.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/post/SendResponseFilter.java index 3d42cc5..9f488b1 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/post/SendResponseFilter.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/post/SendResponseFilter.java @@ -1,22 +1,27 @@ package com.github.cloud.netflix.zuul.filters.post; -import java.io.OutputStream; - -import javax.servlet.http.HttpServletResponse; - import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StreamUtils; + +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.POST_TYPE; +import static org.springframework.util.ReflectionUtils.rethrowRuntimeException; /** * post类型过滤器,向客户端输出响应报文 * * @author derek(易仁川) - * @date 2022/6/27 + * @date 2022/6/27 */ public class SendResponseFilter extends ZuulFilter { + private static Logger logger = LoggerFactory.getLogger(SendResponseFilter.class); @Override public String filterType() { @@ -30,21 +35,35 @@ public class SendResponseFilter extends ZuulFilter { @Override public boolean shouldFilter() { - RequestContext requestContext = RequestContext.getCurrentContext(); - return requestContext.getResponseDataStream() != null; + return RequestContext.getCurrentContext() + .getResponseDataStream() != null; } @Override public Object run() throws ZuulException { + //向客户端输出响应报文 RequestContext requestContext = RequestContext.getCurrentContext(); - HttpServletResponse servletResponse = requestContext.getResponse(); - if (servletResponse.getCharacterEncoding() == null) { + InputStream inputStream = requestContext.getResponseDataStream(); + try { + HttpServletResponse servletResponse = requestContext.getResponse(); servletResponse.setCharacterEncoding("UTF-8"); - } - - OutputStream outStream = servletResponse.getOutputStream(); + OutputStream outStream = servletResponse.getOutputStream(); + StreamUtils.copy(inputStream, outStream); + } catch (Exception e) { + rethrowRuntimeException(e); + } finally { + //关闭输入输出流 + if (inputStream != null) { + try { + inputStream.close(); + } catch (Exception e) { + logger.error("关闭输入流失败", e); + } + } + //Servlet容器会自动关闭输出流 + } return null; } -} +} \ No newline at end of file diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java index b770d50..6eda7ef 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java @@ -8,15 +8,13 @@ import com.netflix.zuul.exception.ZuulException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE; -import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.REQUEST_URI_KEY; -import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.SERVICE_ID_KEY; +import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.*; /** * pre类型过滤器,根据RouteLocator来进行路由规则的匹配 * * @author derek(易仁川) - * @date 2022/6/27 + * @date 2022/6/27 */ public class PreDecorationFilter extends ZuulFilter { private static Logger logger = LoggerFactory.getLogger(PreDecorationFilter.class); @@ -51,8 +49,7 @@ public class PreDecorationFilter extends ZuulFilter { if (route != null) { requestContext.put(REQUEST_URI_KEY, route.getPath()); requestContext.set(SERVICE_ID_KEY, route.getLocation()); - } - else { + } else { logger.error("获取不到匹配的路由, requestURI: {}", requestContext); } diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java index 00fff10..8dfeb76 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/route/RibbonRoutingFilter.java @@ -1,31 +1,25 @@ package com.github.cloud.netflix.zuul.filters.route; -import java.io.IOException; -import java.io.InputStream; - -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; - +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import cn.hutool.http.Method; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - +import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; -import org.springframework.cloud.client.loadbalancer.LoadBalancerRequest; -import org.springframework.http.HttpStatus; -import org.springframework.http.client.ClientHttpResponse; -import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.REQUEST_URI_KEY; -import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.ROUTE_TYPE; -import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.SERVICE_ID_KEY; +import static com.github.cloud.netflix.zuul.filters.support.FilterConstants.*; +import static org.springframework.util.ReflectionUtils.rethrowRuntimeException; /** * route类型过滤器,使用ribbon负载均衡器进行http请求 * * @author derek(易仁川) - * @date 2022/6/27 + * @date 2022/6/27 */ public class RibbonRoutingFilter extends ZuulFilter { private static Logger logger = LoggerFactory.getLogger(RibbonRoutingFilter.class); @@ -54,33 +48,30 @@ public class RibbonRoutingFilter extends ZuulFilter { @Override public Object run() throws ZuulException { - RequestContext requestContext = RequestContext.getCurrentContext(); - String serviceId = (String) requestContext.get(SERVICE_ID_KEY); - String requestURI = (String) requestContext.get(REQUEST_URI_KEY); - - - HttpServletRequest request = requestContext.getRequest(); - - String method = request.getMethod(); - - ServletInputStream inputStream = null; try { - inputStream = request.getInputStream(); - } - catch (IOException e) { - logger.error("获取输入流失败", e); + RequestContext requestContext = RequestContext.getCurrentContext(); + //使用ribbon的负载均衡能力发起远程调用 + //TODO 简单实现,熔断降级章节再完善 + String serviceId = (String) requestContext.get(SERVICE_ID_KEY); + ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId); + if (serviceInstance == null) { + logger.error("根据serviceId查询不到服务示例,serviceId: {}", serviceId); + return null; + } + + String requestURI = (String) requestContext.get(REQUEST_URI_KEY); + String url = serviceInstance.getUri().toString() + requestURI; + HttpRequest httpRequest = HttpUtil.createRequest(Method.POST, url); + HttpResponse httpResponse = httpRequest.execute(); + + //将响应报文的状态码和内容写进请求上下文中 + requestContext.setResponseStatusCode(httpResponse.getStatus()); + requestContext.setResponseDataStream(httpResponse.bodyStream()); + + return httpResponse; + } catch (Exception e) { + rethrowRuntimeException(e); } - - //TODO 构造请求 - LoadBalancerRequest loadBalancerRequest = null; - - ClientHttpResponse response = loadBalancerClient.execute(serviceId, loadBalancerRequest); - int statusCode = response.getRawStatusCode(); - InputStream responseBody = response.getBody(); - - requestContext.setResponseStatusCode(statusCode); - requestContext.setResponseDataStream(responseBody); - - return response; + return null; } -} +} \ No newline at end of file diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/support/FilterConstants.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/support/FilterConstants.java index dc5d20d..c3f415f 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/support/FilterConstants.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/filters/support/FilterConstants.java @@ -4,7 +4,7 @@ package com.github.cloud.netflix.zuul.filters.support; * 过滤器常量类 * * @author derek(易仁川) - * @date 2022/6/27 + * @date 2022/6/27 */ public interface FilterConstants { diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/metrics/EmptyCounterFactory.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/metrics/EmptyCounterFactory.java index 8f4263b..07be850 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/metrics/EmptyCounterFactory.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/metrics/EmptyCounterFactory.java @@ -4,11 +4,10 @@ import com.netflix.zuul.monitoring.CounterFactory; /** * @author derek(易仁川) - * @date 2022/6/27 + * @date 2022/6/27 */ public class EmptyCounterFactory extends CounterFactory { @Override public void increment(String name) { - } } diff --git a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/metrics/EmptyTracerFactory.java b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/metrics/EmptyTracerFactory.java index 958e258..c49792f 100644 --- a/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/metrics/EmptyTracerFactory.java +++ b/mini-spring-cloud-netflix-zuul/src/main/java/com/github/cloud/netflix/zuul/metrics/EmptyTracerFactory.java @@ -5,11 +5,25 @@ import com.netflix.zuul.monitoring.TracerFactory; /** * @author derek(易仁川) - * @date 2022/6/27 + * @date 2022/6/27 */ public class EmptyTracerFactory extends TracerFactory { + + private final EmptyTracer emptyTracer = new EmptyTracer(); + @Override public Tracer startMicroTracer(String name) { - return null; + return emptyTracer; + } + + private static final class EmptyTracer implements Tracer { + + @Override + public void setName(String name) { + } + + @Override + public void stopAndLog() { + } } -} +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index e671629..b223de0 100644 --- a/pom.xml +++ b/pom.xml @@ -1,125 +1,125 @@ - 4.0.0 - - - org.springframework.cloud - spring-cloud-build - 3.1.1 - - - - com.github - mini-spring-cloud - pom - 1.0.0-SNAPSHOT - - - mini-spring-cloud-tutu-discovery - mini-spring-cloud-load-balancer - mini-spring-cloud-openfeign - mini-spring-cloud-netflix-zuul - mini-spring-cloud-examples/tutu-server - mini-spring-cloud-examples/mini-spring-cloud-provider-example - mini-spring-cloud-examples/mini-spring-cloud-consumer-examples - mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example - - - - 2021.0.1 - 1.2.79 - 5.7.21 - 2.3.0 - 11.8 - 1.3.1 - - - - - - org.springframework.boot - spring-boot-dependencies - ${spring-boot.version} - pom - import - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring.cloud.version} - pom - import - - - - com.github - mini-spring-cloud-tutu-discovery - 1.0.0-SNAPSHOT - - - - com.github - mini-spring-cloud-load-balancer - 1.0.0-SNAPSHOT - - - - com.github - mini-spring-cloud-openfeign - 1.0.0-SNAPSHOT - - - - com.github - mini-spring-cloud-netflix-zuul - 1.0.0-SNAPSHOT - - - - com.alibaba - fastjson - ${fastjson.version} - - - - cn.hutool - hutool-all - ${hutool.version} - - - - com.netflix.ribbon - ribbon - ${ribbon.version} - - - - com.netflix.ribbon - ribbon-loadbalancer - ${ribbon.version} - - - - com.netflix.ribbon - ribbon-core - ${ribbon.version} - - - - io.github.openfeign - feign-core - ${feign.version} - - - - com.netflix.zuul - zuul-core - ${zuul.version} - - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + + org.springframework.cloud + spring-cloud-build + 3.1.1 + + + + com.github + mini-spring-cloud + pom + 1.0.0-SNAPSHOT + + + mini-spring-cloud-tutu-discovery + mini-spring-cloud-load-balancer + mini-spring-cloud-openfeign + mini-spring-cloud-netflix-zuul + mini-spring-cloud-examples/tutu-server + mini-spring-cloud-examples/mini-spring-cloud-provider-example + mini-spring-cloud-examples/mini-spring-cloud-consumer-examples + mini-spring-cloud-examples/mini-spring-cloud-api-gateway-example + + + + 2021.0.1 + 1.2.79 + 5.7.21 + 2.3.0 + 11.8 + 1.3.1 + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring.cloud.version} + pom + import + + + + com.github + mini-spring-cloud-tutu-discovery + 1.0.0-SNAPSHOT + + + + com.github + mini-spring-cloud-load-balancer + 1.0.0-SNAPSHOT + + + + com.github + mini-spring-cloud-openfeign + 1.0.0-SNAPSHOT + + + + com.github + mini-spring-cloud-netflix-zuul + 1.0.0-SNAPSHOT + + + + com.alibaba + fastjson + ${fastjson.version} + + + + cn.hutool + hutool-all + ${hutool.version} + + + + com.netflix.ribbon + ribbon + ${ribbon.version} + + + + com.netflix.ribbon + ribbon-loadbalancer + ${ribbon.version} + + + + com.netflix.ribbon + ribbon-core + ${ribbon.version} + + + + io.github.openfeign + feign-core + ${feign.version} + + + + com.netflix.zuul + zuul-core + ${zuul.version} + + + \ No newline at end of file