点击登录按钮,发出
http://localhost:8803/service_6001/admin/login/in
请求,这是一个由nginx配置的前端项目
查看配置文件,该条请求会被映射形成对http://localhost:51603/admin/login/in的post请求
upstream heima-admin-gateway
{
server localhost:51603;
}
server {
listen 8803;
server_name 127.0.0.1;
location / {
root F:\\BaiduNetdiskDownload\\heima-leadnews\\admin-web;
index index.html;
}
location ~/service_6001/(.*)
{
proxy_pass http://heima-admin-gateway/$1;
proxy_set_header HOST $host;
proxy_pass_request_body on;
proxy_pass_request_headers on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $Proxy_add_x_forwarded_for;
}
}
而localhost:51603地址开启了一个网关服务
查看网关服务的配置文件
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]': # 匹配所有请求
allowedOrigins: "*" #跨域处理 允许所有的域
allowedMethods: # 支持的方法
- GET
- POST
- PUT
- DELETE
routes:
# 平台管理
- id: admin
uri: lb://leadnews-admin
predicates:
- Path=/admin/**
filters:
- StripPrefix= 1
- id: user
uri: lb://leadnews-user
predicates:
- Path=/user/**
filters:
- StripPrefix= 1
# 自媒体
- id: wemedia
uri: lb://leadnews-wemedia
predicates:
- Path=/wemedia/**
filters:
- StripPrefix= 1
通过网关请求地址变成了http://leadnews-admin/login/in,
发送spring.application.name=leadnews-admin的项目的
/login/in的请求处理器中进行处理
微服务leadnews-admin加入nacos-discovery的dependency,在启动类上加载@EnableDiscoveryClient
注册到nacos的服务发现中心,
服务注册依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
ps:
请求进入到网关但是没有进入到微服务:
- 服务是否允许被发现
- 网关配置服务名是否与服务中心想要的一样
- 关于post请求,处理器使用了@RequestBody AdUserDTO dto,时要注意请求体的json文件键是否与类对象中的成员变量相匹配
如果请求体为
{
"name":"guest",
"password":"guest"
}
而AdUserDTO的成员为
private String username;
private String password;
则这条请求不会进入此处理器
- 测试请求是否进入到微服务可以增加一个拦截所有请求的拦截器,进行断点调试