GateWay网关快速入门

网关的作用

在没学习网关之前我们的项目搭建框架如图,客户端可以直接访问微服务,微服务之间通信通过Feign远程调用访问服务,真实微服务开发中,不可能是任何人都可以访问所有微服务,就要在访问微服务之前,添加一些过滤和认证授权的功能

网关作用:

  • 对用户请求做身份认证、权限校验
  • 将用户请求路由到微服务,并实现负载均衡
  • 对用户请求做限流

①、微服务启动时,创建微服务实例,并将服务实例信息注册到Nacos集群中

②、Nacos集群需要Nginx来完成负载均衡获取一个Nacos注册中心

③、客户端请求通过gageway网关拉取服务实例信息列表,负载均衡机制访问服务

消费者服务调用提供者服务:通过Feign远程调用拉取服务实例信息列表,负载均衡机制访问服务

快速入门

环境

spring-cloud版本:Hoxton.SR10

nacos:2.2.5.RELEASE

创建maven项目

添加依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

这里没有写版本原因:在父类POM中的版本管理中已经限制了

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
View Code

新建application.yaml配置文件

server:
  port: 10018 # 网关端口
spring:
  application:
    name: gateway # 服务名称
  cloud:
    nacos:
      server-addr: localhost:80 # nacos地址
    gateway:
      routes: # 网关路由配置
        - id: user-service # 路由id,自定义,只要唯一即可
          # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
          uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,判断请求是否符合路由规则
            - Path=/user/** # 按照路径匹配,只要以/user/开头就符合要求

创建启动类

@SpringBootApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

项目整体架构

启动

访问 http://localhost:10018/user/1

 

注意:

Nacos集群一定要将Nacos服务器全部开启

 否则会出现一些错误

服务提供者(userservice)

参照 Nacos注册中心搭建工程的编写user-service

服务消费者(feignorderservice)

创建Maven项目,添加依赖(Nacos注册发现、Feign、Feign支持连接池的客户端)

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Nacos 注册发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!--Feign远程调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--Feign底层的客户端实现 支持连接池-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>

        <dependency>
            <groupId>com.marw</groupId>
            <artifactId>feign-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
View Code

配置信息(application.yaml)

server:
  port: 8080 # 网关端口
spring:
  datasource:
    url: jdbc:mysql://192.168.223.129:3306/cloud-order?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: feignorderservice # 服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:80 # nacos地址
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
feign:
  client:
    config:
      default:
        loggerLevel: Full
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数
View Code

启动类开启Feign客户端、指定Feign客户端

@SpringBootApplication
@MapperScan("com.marw.feign.mapper")
@EnableFeignClients(clients = UserClient.class)
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

Feign客户端使用

需要使用Feign-Api

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private UserClient userClient;
    public Order queryById(Long id){
        Order order = orderMapper.findById(id);
        User user = userClient.findById(order.getUser_Id());
        order.setUser(user);
        return order;
    }
}
View Code

 

posted @ 2021-10-20 13:44  一杯水M  阅读(339)  评论(0编辑  收藏  举报