server:
  port: 9996
spring:
  security:
    user:
      name: admin
      password: 123456
  cloud:
    gateway:
      enabled:  true
      loadbalancer:
        use404: true
      discovery:
        locator:
          enabled: true
          lower_case_service_id: true
      routes:
        - id: baidu
          uri: https://www.baidu.com
          predicates:
            - Path=/baidu
          filters:
            - StripPrefix=1
        - id: path
          uri: http://127.0.0.1:8090
          predicates:
              - Path=/demo
          filters:
            - StripPrefix=1
        - id: nacos
          uri: http://10.10.10.99:30018/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=&pageSize=&pageNo=
          predicates:
            - Path=/nacos
          filters:
            - StripPrefix=1
        #设置的id是dubbo-starter-reference
        - id: reference
          #网关不设置上下问,服务存在上下问情况
          #找不到lb实例,这种写法管用的  http://dubbo-starter-reference:9997,-Path设置为 - Path=/dubbo-reference/**
          uri: lb://dubbo-starter-reference
          predicates:
            - Path=/reference/**
          filters:
            ##由于微服务dubbo-starter-reference中设置了server.servlet.context-path=/dubbo-starter-reference,要重写路径才能正常路由到该微服务
            - RewritePath=/reference/?(?<segment>.*), /dubbo-starter-reference/$\{segment}
management:
  endpoint:
    gateway:
      #默认是true
      enabled: true
  endpoints:
    web:
      exposure:
        #一直存在的
        include: "*"
hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE
          thread:
            timeoutInMilliseconds: 3000
  shareSecurityContext: true

上面是网关的简单配置,使用http://dubbo-starter-reference:9997可以访问成功

进入gateway的pod容器,连接dubbo-starter-reference实例正常,

将uri: lb://dubbo-starter-reference,访问接口出现404的错误。

描述:pom.xml描述,配置了actuator,并且application.yaml中设置

 

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/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">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.3</version>
    <relativePath/>
  </parent>
  <artifactId>gateway-gateway</artifactId>
  <name>gateway-gateway</name>
  <version>0.0.1-SNAPSHOT</version>
  <properties>
    <swagger.version>2.9.2</swagger.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>5.8.6</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      <version>2021.0.1.0</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      <version>2021.0.1.0</version>
    </dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-loadbalancer</artifactId>
        <version>3.1.1</version>
	</dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-bootstrap</artifactId>
      <version>3.1.1</version>
    </dependency>

    <!--配置文件处理器-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-gateway</artifactId>
      <version>3.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
      <version>3.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-actuator-autoconfigure</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-configuration-processor</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.6</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-commons</artifactId>
      <version>3.1.1</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>3.1.0</version>
      </plugin>
      <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.0.2</version>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.1</version>
      </plugin>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.2</version>
      </plugin>
      <plugin>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.2</version>
      </plugin>
      <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.8.2</version>
      </plugin>
      <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
      <plugin>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.7.1</version>
      </plugin>
      <plugin>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>3.0.0</version>
      </plugin>
    </plugins>
  </build>

</project>

访问网关的接口发现

http://10.10.10.99:32222/actuator/gateway/routes

存在一些配置,ReactiveCompositeDiscoveryClient,非手动配置的,应该和上面的配置有关系

想访问微服务dubbo-starter-reference,基于路径的匹配有两个,服务都是在nacos(2.0.3)上注册的。

注册信息正常。

自动出现的路由映射,微服务访问是没有上下文的。

而实际dubbo-starter-reference微服务的上下文是/dubbo-starter-reference

不知道为什么会访问自动出现的那个,而那个配置路径没有dubbo-starter-reference前缀

所以这里重新定义了一个区分/dubbo-starter-reference前缀的映射

- id: reference
  #网关不设置上下问,服务存在上下问情况
  #找不到lb实例,这种写法管用的  http://dubbo-starter-reference:9997,-Path设置为 - Path=/dubbo-reference/**
  uri: lb://dubbo-starter-reference
  predicates:
    - Path=/reference/**
  filters:
    ##由于微服务dubbo-starter-reference中设置了server.servlet.context-path=/dubbo-starter-reference,要重写路径才能正常路由到该微服务
    - RewritePath=/reference/?(?<segment>.*), /dubbo-starter-reference/$\{segment}

通过网关访问便是

http://网关ip:网关端口/reference/dubbo-reference/v1,经过上面的RewritePath配置

网关实际转发的地址是/dubbo-starter-reference/dubbo-reference/v1

[
    {
        "predicate": "Paths: [/dubbo-starter-provider/**], match trailing slash: true",
        "metadata": {
            "nacos.instanceId": "10.233.92.88#9998#DEFAULT#DEFAULT_GROUP@@dubbo-starter-provider",
            "nacos.weight": "1.0",
            "nacos.cluster": "DEFAULT",
            "nacos.ephemeral": "true",
            "nacos.healthy": "true",
            "preserved.register.source": "SPRING_CLOUD"
        },
        "route_id": "ReactiveCompositeDiscoveryClient_dubbo-starter-provider",
        "filters": [
            "[[RewritePath /dubbo-starter-provider/?(?<remaining>.*) = '/${remaining}'], order = 1]"
        ],
        "uri": "lb://dubbo-starter-provider",
        "order": 0
    },
    {
        "predicate": "Paths: [/skywalking_oap_cluster/**], match trailing slash: true",
        "metadata": {
            "nacos.instanceId": "0.0.0.0#11800#DEFAULT#DEFAULT_GROUP@@SkyWalking_OAP_Cluster",
            "nacos.weight": "1.0",
            "nacos.cluster": "DEFAULT",
            "nacos.ephemeral": "true",
            "nacos.healthy": "true"
        },
        "route_id": "ReactiveCompositeDiscoveryClient_SkyWalking_OAP_Cluster",
        "filters": [
            "[[RewritePath /skywalking_oap_cluster/?(?<remaining>.*) = '/${remaining}'], order = 1]"
        ],
        "uri": "lb://SkyWalking_OAP_Cluster",
        "order": 0
    },
    {
        "predicate": "Paths: [/providers:com.turboic.cloud.service.swaggeruserinfoservice:1.0.0:liebe/**], match trailing slash: true",
        "metadata": {
            "nacos.instanceId": "10.233.92.88#20880#DEFAULT#DEFAULT_GROUP@@providers:com.turboic.cloud.service.SwaggerUserInfoService:1.0.0:liebe",
            "methods": "getUser",
            "release": "2.7.7",
            "deprecated": "false",
            "dubbo": "2.0.2",
            "pid": "1",
            "interface": "com.turboic.cloud.service.SwaggerUserInfoService",
            "path": "com.turboic.cloud.service.SwaggerUserInfoService",
            "protocol": "dubbo",
            "nacos.weight": "1.0",
            "nacos.cluster": "DEFAULT",
            "dynamic": "true",
            "anyhost": "true",
            "architecture": "dubbo-spring-boot",
            "group": "liebe",
            "timestamp": "1662891350562",
            "side": "provider",
            "nacos.ephemeral": "true",
            "nacos.healthy": "true",
            "version": "1.0.0",
            "generic": "false",
            "revision": "0.0.1-SNAPSHOT",
            "application": "dubbo-starter-provider",
            "category": "providers"
        },
        "route_id": "ReactiveCompositeDiscoveryClient_providers:com.turboic.cloud.service.SwaggerUserInfoService:1.0.0:liebe",
        "filters": [
            "[[RewritePath /providers:com.turboic.cloud.service.swaggeruserinfoservice:1.0.0:liebe/?(?<remaining>.*) = '/${remaining}'], order = 1]"
        ],
        "uri": "lb://providers:com.turboic.cloud.service.SwaggerUserInfoService:1.0.0:liebe",
        "order": 0
    },
    {
        "predicate": "Paths: [/dubbo-starter-reference/**], match trailing slash: true",
        "metadata": {
            "nacos.instanceId": "10.233.92.87#9997#DEFAULT#DEFAULT_GROUP@@dubbo-starter-reference",
            "nacos.weight": "1.0",
            "nacos.cluster": "DEFAULT",
            "nacos.ephemeral": "true",
            "nacos.healthy": "true",
            "preserved.register.source": "SPRING_CLOUD"
        },
        "route_id": "ReactiveCompositeDiscoveryClient_dubbo-starter-reference",
        "filters": [
            "[[RewritePath /dubbo-starter-reference/?(?<remaining>.*) = '/${remaining}'], order = 1]"
        ],
        "uri": "lb://dubbo-starter-reference",
        "order": 0
    },
    {
        "predicate": "Paths: [/consumers:com.turboic.cloud.service.swaggeruserinfoservice:1.0.0:liebe/**], match trailing slash: true",
        "metadata": {
            "nacos.instanceId": "10.233.92.87#0#DEFAULT#DEFAULT_GROUP@@consumers:com.turboic.cloud.service.SwaggerUserInfoService:1.0.0:liebe",
            "methods": "getUser",
            "release": "2.7.7",
            "dubbo": "2.0.2",
            "pid": "1",
            "interface": "com.turboic.cloud.service.SwaggerUserInfoService",
            "qos.enable": "false",
            "path": "com.turboic.cloud.service.SwaggerUserInfoService",
            "protocol": "consumer",
            "nacos.weight": "1.0",
            "nacos.cluster": "DEFAULT",
            "architecture": "dubbo-spring-boot2",
            "group": "liebe",
            "timestamp": "1662891404956",
            "init": "false",
            "side": "consumer",
            "nacos.ephemeral": "true",
            "nacos.healthy": "true",
            "check": "false",
            "version": "1.0.0",
            "revision": "0.0.1-SNAPSHOT",
            "application": "dubbo-starter-reference",
            "sticky": "false",
            "category": "consumers"
        },
        "route_id": "ReactiveCompositeDiscoveryClient_consumers:com.turboic.cloud.service.SwaggerUserInfoService:1.0.0:liebe",
        "filters": [
            "[[RewritePath /consumers:com.turboic.cloud.service.swaggeruserinfoservice:1.0.0:liebe/?(?<remaining>.*) = '/${remaining}'], order = 1]"
        ],
        "uri": "lb://consumers:com.turboic.cloud.service.SwaggerUserInfoService:1.0.0:liebe",
        "order": 0
    },
    {
        "predicate": "Paths: [/gateway/**], match trailing slash: true",
        "metadata": {
            "nacos.instanceId": "10.233.92.105#9996#DEFAULT#DEFAULT_GROUP@@gateway",
            "nacos.weight": "1.0",
            "nacos.cluster": "DEFAULT",
            "nacos.ephemeral": "true",
            "nacos.healthy": "true",
            "preserved.register.source": "SPRING_CLOUD"
        },
        "route_id": "ReactiveCompositeDiscoveryClient_gateway",
        "filters": [
            "[[RewritePath /gateway/?(?<remaining>.*) = '/${remaining}'], order = 1]"
        ],
        "uri": "lb://gateway",
        "order": 0
    },
    {
        "predicate": "Paths: [/baidu], match trailing slash: true",
        "route_id": "baidu",
        "filters": [
            "[[StripPrefix parts = 1], order = 1]"
        ],
        "uri": "https://www.baidu.com:443",
        "order": 0
    },
    {
        "predicate": "Paths: [/demo], match trailing slash: true",
        "route_id": "path",
        "filters": [
            "[[StripPrefix parts = 1], order = 1]"
        ],
        "uri": "http://127.0.0.1:8090",
        "order": 0
    },
    {
        "predicate": "Paths: [/nacos], match trailing slash: true",
        "route_id": "nacos",
        "filters": [
            "[[StripPrefix parts = 1], order = 1]"
        ],
        "uri": "http://10.10.10.99:30018/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=&pageSize=&pageNo=",
        "order": 0
    },
    {
        "predicate": "Paths: [/reference/**], match trailing slash: true",
        "route_id": "reference",
        "filters": [
            "[[RewritePath /reference/?(?<segment>.*) = '/dubbo-starter-reference/${segment}'], order = 1]"
        ],
        "uri": "lb://dubbo-starter-reference",
        "order": 0
    }
]

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐