本节的主要内容是创建网关模块,将网关注册到Nacos,并配置路由进行测试。
一,创建网关模块
右键工程New->Module
,创建新模块,模块名称 gulimall-gateway
。
填充各种信息。
选中Gateway依赖。
点击Create创建模块。
二,网关服务配置
1,依赖common模块
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
因为网关服务也需要使用注册中心和配置中心,所以需要相关的包的依赖,通过依赖common模块得到。
2,启动服务发现
通过在启动类增加注解,让服务启动后注册到注册中心。
@EnableDiscoveryClient
3,创建配置文件
在resources目录下新建三个配置文件。
① application.properties
配置Nacos注册中心相关信息。
server.port=80
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=gulimall-gateway
② bootstrap.properties
配置Nacos配置中心的相关信息,注意,要事先在Nacos上创建一个名为gateway的命名空间,网关模块的所有配置文件都存放在这个命名空间下。
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=405d2201-d62b-4203-80c8-800e9387ad40
③ application.yml
这个文件中,编写网关路由配置,具体内容见下一部分。
三,网关路由配置
1,路由配置
这一部分,我们以两个实际的需求为例,练习如何配置网关。
网关的作用是根据网关配置的规则,将接收到的请求转发到相应的服务。
为了方便演示,假设有这样的需求,在浏览器输入如下url时,将请求转发到百度。
http://localhost/?url=baidu
在浏览器输入如下url时,将请求转发到腾讯。
http://localhost/?url=qq
该如何编写配置文件呢?
仓库Spring Cloud Gateway的官方文档,参考其格式。
因为我们需要根据url上的查询条件进行对应的转发,所以找到Gateway关于Query的断言配置文档。
参照这个文档进行配置。
application.yml
spring:
cloud:
gateway:
routes:
- id: baidu_test
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_test
uri: https://www.qq.com
predicates:
- Query=url,qq
这里定义了两个路由规则,用于根据查询参数url
的值来决定请求应该转发到哪个目标URI。
-
spring.cloud.gateway.routes
: 这是Spring Cloud Gateway的路由配置列表。 -
每个
routes
项定义了一个路由规则。 -
id
: 每个路由规则需要一个唯一的ID,用于识别和管理路由。 -
uri
: 当路由规则匹配时,请求将被转发到这个URI地址。这里的https://www.baidu.com
和https://www.qq.com
分别指定了百度和腾讯网站的URL。 -
predicates
: 这是路由规则的断言列表,用于确定是否应用此路由规则。断言是基于请求的元数据进行评估的表达式。-
Query=url,baidu
: 这个断言表示如果请求中包含名为url
的查询参数,并且它的值等于baidu
,那么这个路由规则会被触发,请求将被转发到https://www.baidu.com
。 -
Query=url,qq
: 类似地,如果查询参数url
的值为qq
,则请求将被转发到https://www.qq.com
。
-
这样,当你的应用收到一个带有url=baidu
或url=qq
查询参数的请求时,Spring Cloud Gateway会根据上述规则将请求代理到相应的网站。
2,验证
在浏览器中访问如下地址。
http://localhost/?url=baidu
有如上界面,说明网关服务配置和路由配置正常。
错误记录
在启动Gateway的过程中会报错。
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-07-11 15:57:32.988 ERROR 27224 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
原因是Gateway模块依赖common,common模块声明了对mybatis的依赖,mybatis的包会在启动时查找数据库相关的配置,而Gateway项目无需数据库,所以没有相关配置。
解决办法,告知网关模块在启动时无需查找数据库相关的配置,通过在启动类注解上声明排除相关的包依赖即可。
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)