一、说明
本文档说明,spring-cloud微服务部署,涉及两个spring-cloud项目,这里举例cloud-learn、cloud-platform、cloud-learn-nacos、cloud-platform-nacos。其中两个nacos都是单机启动。并且两个微服务的项目都是暂时使用jar包方式启动(也可以学习使用docker容器化启动,链接)
二、cloud-learn项目架构
三cloud-platform项目架构
跟cloud-learn项目架构差不多,这里不做展示。
四、组网
这个网络架构图,说白了就是从客户端请求一个接口,涉及服务的交互过程,理解这里的话就是知道怎么在linux部署
相信在行的人能看懂这个组网,这里使用到的技术:springcloud、nacos、redis、mysql、nginx
1、首先app发送请求,nginx会拦截请求,将请求转发到cloud-platform的网关gateway
2、cloud-platform的网关gateway会将请求拦截,进入鉴权(如果是配置了url白名单就不会鉴权),鉴权通过,会将请求转发到cloud-learn的网关。
3、cloud-learn的gateway接收到请求,根据外部客户端请求的url,重定向到内部服务的url(后续会贴出学习代码)
4、处理业务开始,可能涉及自身微服务调用,也涉及cloud-learn服务调用cloud-platform服务之间的调用。
五 配置说明
nginx配置
upstream cloud_platform_gateway {
server 11.11.11.11:111;
}
location /cloudlearn{
proxy_pass http://cloud_platform_gateway /cloudlearn;
include ./proxy.conf;
}
cloud-platform的gateway配置
spring:
cache:
type: redis
redis:
lettuce:
pool:
enabled: true
password: 123@123、
#集群模式
cluster:
#这里的ip是假的
nodes: 11.12.1.1:6379,11.1.1.0:6379
cloud:
gateway:
discovery:
locator:
enabled: true
lowerCaseServiceId: true
routes:
# 管理服务
- id: system
filters: [StripPrefix=1]
predicates: [Path=/system/platform/**]
uri: lb://system
# 订单服务,这里配置的是用于cloud-learn微服务调用cloud-platform的接口,gateway路由转发到对应的cloud-platform里面的内部微服务
- id: order_platform
filters: [StripPrefix=1]
predicates: [Path=/order/platform/**]
uri: lb://order
# cloud-learn请求被nginx拦截转发的入口
- id: learn_cloud
filters: ['PlatAuthFilter'] #这个是具体鉴权的过滤器
predicates: [Path=/cloudlearn/**]
# token鉴权
# cloud-learn的gateway的内网地址
uri: http://12.12.12.12:12
cloud-learn的gateway配置
spring:
redis:
lettuce:
pool:
enabled: true
password: 123@123、
#集群模式
cluster:
#这里的ip是假的
nodes: 11.12.1.1:6379,11.1.1.0:6379
cache: {type: redis}
cloud:
gateway:
discovery:
locator: {enabled: true, lowerCaseServiceId: true}
routes:
#配置路由断言
- filters: [StripPrefix=1]
id: user
predicates: [Path=/user/**]
uri: lb://user
#这里配置的是路径重写,意思是客户端的请求路径比如是/api/abc,然后在代码controller实际的路径是:/user/tempUrl
#通过这里的配置,实现路径重写,达到客户端请求的路径是/api/abc,实际在服务里面是/user/tempUrl
- filters: ['RewritePath=/api/abc,/user/tempUrl']
id: /api/abc
#断言:这里的配置意思是必须路径是匹配到/api/abc的才会被路由转发
predicates: [Path=/api/abc]
#这里是指user服务,意思是将上面的请求/user/tempUrl转发到user服务controller
uri: lb://user/**