1.单体和多模块聚合单体项目的区别
domain<-mapper<-service<-web
分布式聚合项目:
//多个相同模块,需要构建比较慢,
//方案一:把domain放一起,core放业务,低耦合高内聚
//方案二 : api放所有实体类,缺点 多打包进去了相同的实体类,但是项目启动没有所谓
2.feign的简化
//boot->xx->xx 建父项目是boot的父项目
//pom文件的dependencyManagement,(全局版本号控制)子类依赖不被项目使用,仅仅做版本控制
//打包pom,通过pom管理打包(默认,有子模块就有) //common-api 依赖domain ,专门写feign的接口的
//user-center专门接收用户请求的 //xx-center 专门处理业务的 //其他都依赖api
//在业务代码复制打包插件进来 //提供者直接实现接口不用GetMapping //消费者还是一样
//熔断器返回null可以线程回收…(还是不要这样做)
3.链路追踪(服务远程调用服务的路径,监控哪个失败) (建议链路调用不成功3次)
sleuth+zipkin(可视化面板)
//下载jar包
//是个springboot项目
java -jar zipkin
访问localhost:9411
//每个都需要加zipkin依赖
//直接common-api加依赖,其他依赖api
//调用的提供者,和消费者都写配置文件
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
probability: 1 //采集率, 10%,需要在对应的服务收集数据
rate: 10 //每隔多少秒采集
4.admin服务监控(服务自己有问题)
//建项目,选admin2.3.0依赖,server监控中心,client监控的服务端
//admin=server(也加eureka)—>注册中心---->client
//写配置文件 ,端口号的范围 0-65535
management.endpoints.web.exposure.include=‘*’
//暴露自身某些信息接口,有health,info
@EnableAdminServer
//服务配置端口
//client加依赖
//!!!开发经验 beans有对应的依赖更新
//加上 actuator可以查看idea的service旁边的mapping(直接查接口,方便!!!)
//可以立即定位到mapping位置
//中大型公司,直接打好jar包
//通过 前端的接口查,ctrl+shift+r全局查找文件,但是查不了源码
5.网关gateway取代zuul1.0,2.0之前的网关(一组过滤器,按照先后顺序过滤)
zuuul1.0使用bio,2.0使用 nio
aio=async +no blocking io异步非阻塞io
//gate使用reactor响应式编程代码看不懂
//web三大组件 servlet listener filter interceptor
//filter拦截所有资源,interceptor只拦截controller的请求
//先走filter后走interceptor,出来反之
三大核心概念
1.route路由!!!(一个id,url,断言工厂,filter)
2.predicate断言(返回bool表达式)
3.filter过滤!!!
!!! 1.针对某个路由过滤(某个接口)
2.针对全局的filter token ip黑名单
6.nginx与gateway的区别
nginx是服务器级别的,gateway是项目级别的负载均衡
(gateway可以在一个服务器内多个项目过滤)
7.网关项目
1.建网关项目 (只选 springweb)
//写个controller,登录返回token
String token =UUID.randomUUID().toString();
2.建另外一个项目(不要选择web依赖只选网关依赖)因为网关内置netty服务器会冲突
3.写配置文件
server.port=80
spring.application.name=gateway-server
spring.cloud.gateway.enabled=true #加依赖默认开启
.routes.id=login-service-route #保持唯一
.uri=http://localhost:8081#uri统一资源定位符,url统一资源标识符
.predicates= Path=/doLogin#往uri+path走
7.网关集群+nginx配置文件
nginx配置文件格式:
upstream www.gateway.com{
server ip:port;
server xxxip:xxxport;
}
server{
listen 8080;
server_name localhost
location /{
proxy_pass http://www.gateway.com;
}
}
8.代码配置路由(复制spring官方代码)
@Configuration
@Bean
//如果匹配地址=访问地址就不会拼接
//yml可以同时存在
return builder.routes()
.route("xxxid",r->r.path("/hello").uri("xxx/hello"))
.....
.build();
9.如果有100个path,怎么访问
id: xxx
uri: http://localhost:8080
predicates:
- Path=/xxx/**
10.动态路由(gateway向eureka注册)(全部往eureka注册)(推荐)
1.改配置文件
gateway:
discovery:
locator:
enabled: true
lower-case-service-id : true#开启服务名称小写
2.访问路径要加服务名(自动负载均衡)http://localhost/login-service/doLogin
11.在配置文件做动态路由
uri:lb://login-service //provider的应用名称,lb是负载均衡协议
还是直接访问 http://localhost/doLogin