04.微服务项目结构和gateway

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

你可能感兴趣的:(微服务,gateway,java)