# course **Repository Path**: xinhong8156/course ## Basic Information - **Project Name**: course - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-10-23 - **Last Updated**: 2021-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #选课 course #开发 - 创建父工程maven项目,补充pom的配置依赖 - 创建公共子模块base-api,导入依赖,创建实体类 - 创建服务提供者provider-course,导入依赖、配置application.yml,创建启动类、映射文件及数据库接口查询测试等{http://localhost:8001/course/list} - 创建服务消费者consumer-course,导入依赖、配置application.yml,创建启动类、配置文件类,使用RestTemplate - 创建服务注册中心Eureka及依赖信息配置application.yml,创建启动类多加一个@EnableEurekaServer的注解 - 将服务注册到注册中心(修改服务的配置、依赖及启动类添加@EnableEurekaClient注解) - 修改服务的配置及父工程配置便于在注册中心进行识别(服务名称,ip,info说明及错误页) - 在服务消费者中添加服务发现接口,对外可以使用,启动类加@EnableDiscoveryClient 服务发现 - 新建注册中心Eureka2、Eureka3同Eureka配置一样,修改配置,并将消费者注册到三个中心上 - 给服务消费者加ribbon,修改pom及配置,给RestTemplate加注解@LoadBalanced即可 - 新建provider-course2、provider-course3等 - 在消费者端调整Ribbon的负载均衡策略 - 创建Feign的consumer-course-feign,引入feign依赖、application.yml等修改api工程,完成之后对api的maven进行clean 和 install保证这是最新的,主启动类的注解修改 - 熔断器:创建带有熔断的provider-course-hystrix;依赖等、修改application.yml、Controller和主启动类 - 改进熔断机制,防止太多不便维护 - 服务监控;创建consumer-course-hystrix-dashboard; - 路由网关;新建course-zuul-gateway;依赖、application.yml;修改电脑配置;C:\Windows\System32\drivers\etc的hosts文件添加映射 - 测试:不经过zuul:(http://localhost:8001/course/list);经过网关的:http://192.168.31.229:9527/course/course/list #注意 - 微服务序列化接口必须实现 implements Serializable - mybatis的相关配置已经写进了application.yml,其可以被省略 - @Configuration 相当于applicationContext.xml 如下 - Eureka采用了C-S设计架构 - 修改依赖及注意cloud与eureka版本冲突问题,导致eureka启动失败 - 修改电脑配置;C:\Windows\System32\drivers\etc的hosts文件添加映射 - 修改Ribbon的负载均衡策略,其组件IRule进行设置及实现 - * ## 注解 - @AllArgsConstructor(全参构造函数) - @NoArgsConstructor(空参构造函数) - @Data(get/set方法) - @Accessors(chain = true)(连续设值进行赋值) - @Configuration 相当于applicationContext.xml - @EnableEurekaServer 加给启动类Eureka服务 - @EnableEurekaClient 将服务启动后会自动注册到eureka中 - @EnableDiscoveryClient 服务发现 - @LoadBalanced 开启Ribbon负载均衡 - @EnableCircuitBreaker 对hystrix熔断器机制的支持 - @EnableHystrixDashboard 开启仪表盘的监控点 访问:http://localhost:9001/hystrix - @EnableZuulProxy 代理 # 总结 ### 1.ACID与CAP - A:原子性; C:一致性; I:独立性; D:持久性 - C:强一致性; A:高可用性; P:分区容错性 ### 2.CAP的三进二 - 三个里面只能同时较好的满足2个 - P是绝对占用,即固定不动,只能选择AP或者CP - springcloud与dubbo对于 ### 3.Eureka与Zookeeper优点 - 著名的CAP理论中,我们只能在AP和CP之间进行权衡 - 1.Eureka遵守AP,Zookeeper遵守CP - 2.Eureka的节点平等,会自动切断,除非全部瘫痪。自我保护机制即高可用;Zookeeper选举期间不可用,瘫痪(选老大)。 - 3.Eureka可以应对因网络故障导致部分节点失去联系的情况,不会像使Zookeeper整个注册服务瘫痪 ### 4.Nginx、Ribbon与Feign区别(负载均衡) - Ribbon是客户端的负载均衡的工具(例如:超市结账排队找人少的一队)Ribbon的负载均衡算法可以自定义 - Feign是声明式web服务端,简化服务端编写;它就是一个(接口+注解) ### 5.Ribbon自带的几个轮询策略(核心组件IRule) - 1.RoundRobinRule(); //正常轮询 - 2.RandomRule();//随机轮询 - 3.RetryRule();//重试(当有一个服务出问题多次访问失败之后就会放弃该服务) ### 6.自定义Ribbon设置轮询策略 - 1.在消费者主启动类上添加@RibbonClient - 2.Ribbon自定义的配置类MyselfRule不能放在@ComponentScan所扫描的包下及子包下,否则我们自定义的配置会被Ribbon客户端所共享,起不到订制的目的;@SpringBootApplication就在该路径之下 - 3.新建包com.sky.myrule,创建MyselfRule类及@Configuration、@Bean注解 - 4.定义每台服务访问4次的轮询 - 5.创建设计算法类RandomRule_ZDY去继承源码数据(按照源码修改随机算法规则) ### 7.Feign请求处理 - Feign通过接口的方法调用Rest服务(之前都是Ribbon+RestTemplate) - 该请求发送给Eureka服务器(Http://COURSE/course/list),通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,所以也支持负载均衡作用 ### 8.Hystrix熔断处理 - 1.简述:就是对于系统异常等特殊情况进行熔断处理,给消费者一个说法,避免影响范围扩大[例如:去公司找领导,但是领导不在,却不知道领导今天来不来,大家都在等,所以领导可以直接给通知,领导今天不来,大家不用等了] - 2.降级:先集中把最重要的一个项目完成,将其他项目放后或者减少人员投入 ### 9.hystrixDashboard服务监控 - http://localhost:9001/hystrix 豪猪 - http://localhost:8001/hystrix.stream 或者 http://localhost:8001/actuator/hystrix.stream - 页面404时候,因为springboot2.x使用了endpoint,将资源放开即可 - 七色,一圆,一线;绿色<黄色<橙色<红色递减,除了颜色的变化,流量越大圆就越大, ### 10.Zuul路由网关 - 1.提供=代理+路由+过滤的功能 - 2.自身注册到Eureka,从Eureka获取其它服务的消息(相当于一楼大厅保安) - 3.网关代理处理(添加配置进行测试) ### 11总结 - 整套开发技术以Springcloud为主,单个微服务模块以SpringMVC+SpringBoot/Spring+Mybatis组合开发 - 1前端:以Thymeleaf/样式Css+BootStrap/前端框架JQuery+Node|Vue等 - 2负载层:前端访问痛过Http或者https协议到达服务端负载(Nginx) - 3网关层:请求通过负载(Nginx)后,会到达这个微服务的网关层ZUUl(Gateway),内嵌Ribbon做客户端负载均衡,Hystrix进行熔断降级处理 - 4服务注册:采用Eureka来做服务治理,Zuul会从Eureka集群获取已经发布的微服务访问地址,然后根据配置把请求代理到相应的微服务去 - 5服务调用:微服务模块之间调用采用标准的Http/Https+REST+JSON的方式,调用技术采用Feign+HttpClient+Ribbon+Hystrix - 6统一配置:所有的微服务与Eureka集群和配置中心进行交互 - 7第三方框架:使用缓存服务Redis,图片服务FastDFS,搜索服务ElasticSearch,安全服务 - 8docker容器:所有的微服务模块都部署在Docker容器里,而且前后端的服务完全分开,各自独立部署之后前端微服务调用后端微服务,后端微服务之间会用相互调用 - 9Mysql数据库:可以按照微服务的模块进行拆分,统一访问公共库或者单独自己库,可以单独构建Mysql集群或者分库分表MyCat等 - 10统一配置:所有微服务模块会跟Eureka集群、配置中心(SpringCloudConfig)等进行交互