简介
网关的作用
网关可以拦截客户端所有请求,对该请求进行权限控制,负载均衡,日志管理,接口调用监控等。
网关与过滤器的区别
过滤器是拦截单个tomcat服务器进请求,网关是拦截整个微服务所有请求。
网关和Nginx的区别
- 相同点:Zuul和Nginx都可以实现负载均衡,反向代理,过滤请求,实现网关效果。
- 不同点:Nginx采用C语音编写,Zuul采用java语音编写。Zuul负载均衡实现:采用Ribbon+Eureka实现本地负载均衡。Nginx实现负载均衡:采用服务器端实现负载均衡。
zuul网关实现反向代理
新建springcloud-zuul-gateway 模块
- pom依赖:
<?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">
<parent> <artifactId>springcloud-parents</artifactId>
<groupId>com.baba.wlb</groupId>
<version>1.0-SNAPSHOT</version>
</parent> <modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-zuul-gateway</artifactId>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency> </dependencies> </dependencyManagement>
<dependencies> <!--SpringCloud zuul 网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!--SpringCloud Eureka 客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency> </dependencies>
<!--注意:这里必须添加,否则各种依赖有问题-->
<repositories>
<repository> <id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots> <enabled>false</enabled>
</snapshots> </repository> </repositories></project>
- application.yml 配置文件
## api网关端口号
server:
port: 80
## 服务注册名称
spring:
application:
name: server-zuul
eureka:
client:
service-url:
##当前服务注册到Eureka服务地址
defaultZone: http://localhost:8100/eureka,http://localhost:9100/eureka
register-with-eureka: true
## 需要检索服务信息
fetch-registry: true
zuul:
routes:
## 表示定义转发服务规则
api-a:
### 当客户端发送请求http://127.0.0.1:80/api-member开头的,都会转发到会员服务
path: /api-member/**
### 会员服务别名 zuul默认整合ribbon,自动实现轮询效果
serviceId: app-member
api-b:
### 当客户端发送请求http://127.0.0.1:80/api-order开头的,都会转发到订单服务
path: /api-order/**
### 订单服务别名 zuul默认整合ribbon,自动实现轮询效果
serviceId: app-order
- AppGateway 启动类
package com.baba.wlb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
/**
* @Author wulongbo
* @Date 2021/1/28 11:52
* @Version 1.0
*/@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class AppGateway {
//@EnableZuulProxy 开启网关代理
public static void main(String[] args) {
SpringApplication.run(AppGateway.class, args);
}
}
启动服务
依次Eureka Server、Zuul网关、Member服务、Order服务
访问订单接口:http://localhost:8200/getOrderByMember?name=11
再访问网关:http://localhost/api-order/getOrderByMember?name=11
实现了反向代理!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。