• Spring Cloud Gateway整合Eureka


    Spring Cloud Gateway features:

    • Built on Spring Framework 5, Project Reactor and Spring Boot 2.0

    • Able to match routes on any request attribute.

    • Predicates and filters are specific to routes.

    • Hystrix Circuit Breaker integration.

    • Spring Cloud DiscoveryClient integration

    • Easy to write Predicates and Filters

    • Request Rate Limiting

    • Path Rewriting


    如果对于spring cloud gateway不太了解的同学可以看下这篇博客:http://www.spring4all.com/article/961

    Eureka server配置:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    ---------------------
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    ---------------------

    application.yaml配置

    server.port: 8888
    
    eureka.instance.hostname: localhost
    eureka.client.registerWithEureka: false
    eureka.client.fetchRegistry: false 
    eureka.client.serviceUrl.defaultZone: http://localhost:8888/eureka/

    访问url:localhost:8080

    注册中心配置完毕后,需要有服务提供者发布服务以及服务消费者订阅服务

    服务发布端

    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
      <dependency>   <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId>   </dependency>   <dependency>   <groupId>org.springframework.cloud</groupId>   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>   </dependency>
    </dependencies>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    @RequestMapping(value = "/info", method = RequestMethod.GET,
                produces = MediaType.APPLICATION_JSON_VALUE)
        public Person findPerson(){
            Person person=new Person();
            person.setId(1);
            person.setAge(18);
            person.setName("mike");
            return person;
        }

    application.yaml

    server:
      port: 8000
    spring:
      application:
        name: serviceProvider
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8888/eureka/

    发布服务指定应用名称,名称中不要带"-"。

     consumer配置

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
    @RequestMapping("index")
        public String router() {
            // 根据应用名称调用服务
            String json = restTemplate.getForObject(
            "http://serviceProvider/info", String.class);
            return json;
        }

    application.yaml

    server:
      port: 8080
      servlet:
        context-path: /
    spring:
      application:
        name: serviceConsumer
    eureka:
      client:
        instance:
          hostname: localhost
        service-url:
          defaultZone: http://localhost:8888/eureka/

    直接通过localhost:8080/index接口访问

    gateway配置

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    server:
      port: 8084
    spring:
      cloud:
        gateway:
          routes:
          - id: path_route
            uri: lb://serviceConsumer
            predicates:
            - Path=/index/**
    
    application:
      name: demogateway
    
    eureka:
      instance:
        prefer-ip-address: true
      client:
        service-url:
          defaultZone: http://localhost:8888/eureka/

    指定注册中心地址;并进行路由配置 uri:lb表示从注册中心订阅服务。

     github地址:https://github.com/HushAsy/ans_gateway

  • 相关阅读:
    FreeBSD10下的MySQL5.5配置安装
    TCP Wrappers
    SNAT技术
    子网掩码, 网段主机数计算
    functools wraps
    数据库引擎
    restframework
    Python使用asyncio+aiohttp异步爬取猫眼电影专业版
    Linux 总结
    Nginx日志管理
  • 原文地址:https://www.cnblogs.com/HushAsy/p/9908027.html
Copyright © 2020-2023  润新知