东营市公司网站建设价格,seo营销推广公司,360全景地图下载安装,wordpress 忘记管理员官网地址#xff1a; Spring Cloud Gateway
目录 1、SpringGateway简介
1、什么是网关
2、为什么用网关【为了转发】
2、应用#xff1a;
1.启动nacos
2.创建网关项目
3.网关配置1
4.网关配置2【了解】
5.过滤器配置【了解】 1、SpringGateway简介
核心功能有三个 Spring Cloud Gateway
目录 1、SpringGateway简介
1、什么是网关
2、为什么用网关【为了转发】
2、应用
1.启动nacos
2.创建网关项目
3.网关配置1
4.网关配置2【了解】
5.过滤器配置【了解】 1、SpringGateway简介
核心功能有三个 路由用于设置转发地址的 断言用来判断真实应该请求什么地址 过滤器可以过滤地址和处理参数
1、什么是网关
网关是后台服务的统一入口类似于平时网络里提到的网关。
2、为什么用网关【为了转发】
在微服务架构开发中网关是必要有的服务它可以统一入口解决跨域负载均衡各微服务通信等微服务整体管理和通信的。 场景:如果没有网关前台要查用户信息先往user的微服务下发送请求。然后又要查学生的信息再往student的微服务下发送请求。这样的话我要知道所有的微服务他们的ip是什么他们的端口是什么才能把请求发送到他们的里面。那对于前端来讲的话他要管理的微服务就太多了。而且还有一个问题前端这么做它是没有负载均衡的。它不知道我究竟应该发给谁比如说user这个服务现在搭建了集群有三个那请求过来了我究竟是往集群里的哪一个发送呢对于前端来说也是不知道的。
后台为了解决这个问题就是你别搞这么复杂了发送请求的时候都往一个地址发但是url不一样。至于跳到哪个微服务我后台来解决。Gateway就是专门来处理这个事的。在网关里面 集成了负载均衡 咱们就不用考虑这集群起来的微服务该给哪一个发了。
对于前端来讲它发的不是网关的请求地址而是nginx 的请求地址。发送到nginx地址后再通过反向代理代理到网关上。所以对于前端来说只需要知道nginx就可以了网关是不暴露给前端的。
一般来说都会为网关建立一个单独的微服务。
2、应用
1.启动nacos 2.创建网关项目
【2.1添加pom.xml依赖】
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.0.7.RELEASE/version/parentpropertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-boot.version2.6.13/spring-boot.versionjwt.version0.7.0/jwt.versionfastjson.version1.2.60/fastjson.versionspring-cloud-alibaba.version2.0.3.RELEASE/spring-cloud-alibaba.versionspring-cloud.versionFinchley.SR2/spring-cloud.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactId/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationclassifierexec/classifier/configuration/plugin/plugins/build 【2.2】创建启动类
SpringBootApplication
public class SpringBootMain {public static void main(String[] args) {SpringApplication.run(SpringBootMain.class,args);}
} 【注意】
网关是一个非常干净的工程不会添加其它中间件的配置所以网关工程里只有一个Application的启动类和配置文件。
启动类的注解SpringBootApplication注解中可能开启的其它中间件的EnableXXX可以把其它中间件的注解排除掉保证网关只启动自己的应用只完成网关功能。 # 如果导入别人的项目依赖是有传递性的这样你的项目里依赖的中间件就会很多可以通过exclude属性排除掉。这样其他的中间件就不会启动了。SpringBootApplication(exclude {XXXX.class, YYYY.class}) 【2.3】编写bootstrap.yml配置文件
spring:cloud:nacos:discovery:server-addr: 192.168.146.128:8848config:server-addr: 192.168.146.128:8848inetutils:preferred-networks: 192.168.146 查看端口号 【2.4】编写application.properties配置文件
spring.application.namegateway
server.port300 创建一个页面来进行测试 【注意要建立index.html页面】要在static包下 【2.5】启动项目 3.网关配置1
删除页面 网关配置官方文档 Spring Cloud Gateway
【3.0】改动 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdscopecompile/scope/dependency
修改为dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdscopecompile/scope/dependency 【3.1】添加依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdscopecompile/scope/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependency
【3.2】添加application.yml 配置文件
spring:cloud:gateway:routes:- id: baidu_routeuri: https://www.baidu.compredicates:- Querybaidu spring: cloud: gateway: routes: - id: baidu_route路由id唯一是一个数组可以配置多个路由 uri: https://www.baidu.com路由到的地址 predicates:断言 - Queryurl, baidu如果存在url和baidu那么跳转到uri地址 【3.3】启动项目
http://localhost:300/baidu不会跳转到百度http://localhost:300/baidu?baidu才会跳转到百度是根据参数做断言。后面的值下图 输入正确跳到页面 【如果导入gateway依赖报错试着修改下面的的java版本】
4.网关配置2【了解】 The Path Route Predicate Factory
Path路由断言工厂接受一个参数采用Spring PathMatcher 模式。 spring: cloud: gateway: routes: - id: path_route uri: https://example.org predicates: - Path/red/{segment},/blue/{segment} 请求需要以red或者blue结尾后面的参数会路由过去 例如/red/1 ,/red/blue ,/blue/green等。 spring: cloud: gateway: routes: - id: baidu_route uri: https://www.baidu.com predicates: - Path/red/** 5.过滤器配置【了解】 ##公式模板 - id: third_party_route uri: lb://service-name predicates: - Path/url1/url2/urln/** filters: - RewritePath/url1/url2/urln/(?segment/?.*),/$\{segment} ##例子代码 spring: cloud: gateway: routes: #用户中心 - id: user-route uri: lb://user predicates: - Path/api/services/user/** filters: - RewritePath/api/services/user/(?segment/?.*),/user/$\{segment} id取一个名字自定义见名知意不要有下划线规约
uri接收请求后真实转发的地址lb:开头代表用负载均衡的方式找注册中心名字叫user服务的微服务
predicates请求地址是以/api/services/user/开头后接任意字符
filters将请求地址重写成/user/参数/方法等