Przeglądaj źródła

feat:通过SpringCloudGateway网关组件访问服务提供方,通过GatewayConfig配置类配置路由规则

yang yi 1 rok temu
rodzic
commit
93af2c81eb

+ 63 - 0
member-service-consumer/src/main/java/anyi/space/memberConsumer/config/GatewayConfig.java

@@ -0,0 +1,63 @@
+package anyi.space.memberConsumer.config;
+
+import org.springframework.cloud.gateway.route.RouteLocator;
+import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
+
+/**
+ * @ProjectName: distributedSystemLearn
+ * @FileName: GatewayConfig
+ * @Author: 杨逸
+ * @Data:2025/9/10 16:33
+ * @Description: gateway配置类
+ */
+@Configuration
+public class GatewayConfig {
+    @Bean
+    public RouteLocator myRouteLocator01(RouteLocatorBuilder builder){
+        //根据配置文件改写为配置类的形式
+        RouteLocatorBuilder.Builder routes = builder.routes();
+        routes.route("member10001",r-> {
+            return r
+                    //路径断言
+                    .path("/member-gateway/member")
+                    .and()
+                    //请求方法断言
+                    .method(HttpMethod.GET)
+                    //过滤器重写路径
+                    .filters(fn ->{
+                        //路径重写
+                        return fn.rewritePath("/member-gateway/(?<segment>.*)","/member-provider/$\\{segment}");
+                    })
+                    //转发目标地址
+                    .uri("http://localhost:10001");
+
+        });
+        return routes.build();
+    }
+    @Bean
+    public RouteLocator myRouteLocator02(RouteLocatorBuilder builder){
+        RouteLocatorBuilder.Builder routes = builder.routes();
+        routes.route("member10002",r->{
+            //自定义断言
+            //r.predicate(new GatewayPredicate() {
+            //    @Override
+            //    public boolean test(ServerWebExchange serverWebExchange) {
+            //        //断言是否为post请求方法
+            //        HttpMethod.POST.equals(serverWebExchange.getRequest().getMethod());
+            //        serverWebExchange.getRequest().getPath();
+            //        return false;
+            //    }
+            //});
+            return r.path("/member-gateway/member")
+                    .and()
+                    .method(HttpMethod.POST)
+                    .filters(fn->{
+                        return fn.rewritePath("/member-gateway/(?<segment>.*)","/member-provider/$\\{segment}");
+                    }).uri("http://localhost:10002");
+        });
+        return routes.build();
+    }
+}

+ 22 - 22
member-service-consumer/src/main/resources/application.yaml

@@ -8,28 +8,28 @@ spring:
   cloud:
     gateway:
       #配置路由,可以配置多组
-      routes:
-        #配置路由的id,需要全局唯一,查询数据使用该路由
-        - id: member10001
-          #路由转发的URI,最终转发的URL = URI + PATH
-          uri: http://localhost:10001
-          #配置路由的断言,满足条件时才进行路由
-          predicates:
-            #路径断言
-            - Path=/member-gateway/member
-            #方法断言
-            - Method=GET
-          filters:
-            #重写路径,将请求路径中的member-gateway替换为member-provider,使用到正则表达式的命名捕获分组,语法格式:(?<捕获分组名称>pattern),引用捕获分组:$\{捕获分组名称}
-            - RewritePath=/member-gateway/(?<segment>.*), /member-provider/$\{segment}
-        #第二组路由,新增数据使用该路由
-        - id: member10002
-          uri: http://localhost:10002
-          predicates:
-            - Path=/member-gateway/member
-            - Method=POST
-          filters:
-            - RewritePath=/member-gateway/(?<segment>.*), /member-provider/$\{segment}
+#      routes:
+#        #配置路由的id,需要全局唯一,查询数据使用该路由
+#        - id: member10001
+#          #路由转发的URI,最终转发的URL = URI + PATH
+#          uri: http://localhost:10001
+#          #配置路由的断言,满足条件时才进行路由
+#          predicates:
+#            #路径断言
+#            - Path=/member-gateway/member
+#            #方法断言
+#            - Method=GET
+#          filters:
+#            #重写路径,将请求路径中的member-gateway替换为member-provider,使用到正则表达式的命名捕获分组,语法格式:(?<捕获分组名称>pattern),引用捕获分组:$\{捕获分组名称}
+#            - RewritePath=/member-gateway/(?<segment>.*), /member-provider/$\{segment}
+#        #第二组路由,新增数据使用该路由
+#        - id: member10002
+#          uri: http://localhost:10002
+#          predicates:
+#            - Path=/member-gateway/member
+#            - Method=POST
+#          filters:
+#            - RewritePath=/member-gateway/(?<segment>.*), /member-provider/$\{segment}
 eureka:
   instance:
     #配置注册到Eureka Server中的名称