一、父项目中的基础依赖
<!--1.管理 SpringBoot的jar包--> <parent> <groupId> org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> </parent> <!--2.管理 SpringCloud的jar包--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> |
二、子项目中的基础依赖
<!--spring-cloud-starter-netflix-eureka-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> |
三、启动类通配注解:
1)子项目(Eureka)启动类上所需的注解:
@SpringBootApplication 和 @EnableEurekaService
2)其他子类子项目启动类上所需的注解:
@SpringBootApplication 和 @EnableEurekaClient
四、子项目中 application.yml通用配置 - 按需修改 name、port和instance-id等
eureka: client: serviceUrl: defaultZone: http://localhost:10010/eureka/ instance: prefer-ip-address: true instance-id: order-server:10020 spring: application: name: order-server server: port: 10020 |
五、Ribbon
1)功能:主要功能是提供客户端的软件负载均衡算法和服务调用。
2)负载均衡算法主要分类:随机、轮询、权重。默认为轮询。
3)相关依赖:
<!--集成Ribbon--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency> |
4)启动类上添加注解:见三。
四、OpenFeign
1)功能:主要功能是提供客户端的软件负载均衡算法和服务调用,和Ribbon差不多,封装了Ribbon。
2)负载均衡算法主要分类:随机、轮询、权重。默认为轮询。
3)相关依赖:
<!--导入Feign的包--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> |
4)启动类上添加注解:比三多一个 @EnableFeignClients(value="?") // ?对应该子项目中interface接口所在的包 - 开启Feign支持。
五、Hystrix
1)功能:主要功能包括熔断、降级、限流,以防止服务器雪崩。
2)名词解释:
①雪崩:一个服务故障产生的连锁反应,导致这个微服务崩溃。
②熔断:服务多次访问失败,就会被标记为‘熔断状态’,如果某个请求去访问一个熔断状态的服务,会快速失败,触发服务降级:目的-防止请求阻塞。
③降级:当一个业务(请求)失败/超时,就会走预先设置好的第二种方案(也就是降级逻辑)。
④限流:
a. hystix提供了一个线程池,让请求在新的线程中去执行(异步),限流上限就是线程池中的线程数量+队列长度,如果超出该限制-拒接请求,触发降级。 -- 异步 -- 存在线程切换的消耗 -- 带缓存队列,能应对突然流量。
b. 设置一个信号量(数字) ,请求来了会给一个计数器+1,请求走了会-1,某一个时刻,计数器达到信号量上限-拒接请求,触发降级。 -- 同步 -- 没有缓冲队列。
3)相关依赖:
<!--Hystirx依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> |
或者在application.yml中配置 - 二选一
feign: hystrix: enabled: true |
六、Zuul
1)功能:微服务访问入口,可以做请求路由,监控,安全检查等 - 网关。
2)相关依赖:
<!--zuul依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> |
3)application.yml中配置 - 案例 - 按需修改
eureka: client: serviceUrl: defaultZone: http://localhost:10010/eureka/ instance: prefer-ip-address: true instance-id: zuul-server:10050 spring: application: name: zuul-server server: port: 10050 zuul: prefix: "/s" #统一访问前缀 ignoredServices: "*" #禁用掉使用浏览器通过服务名的方式访问服务 routes: pay-server: "/pay/**" #指定pay-server这个服务使用 /pay路径来访问 - 别名 order-server: "/order/**" #指定order-server这个服务使用 /order路径来访问 user-server: "/user/**" #指定order-server这个服务使用 /order路径来访问 |
4)启动类上添加注解:比三多一个 @EnbaleZuulProxy //开启网关
注意:Eureka 和 Zuul 需要单独新建子项目,Ribbon、OpenFeign和Hystrix都是整合在别的子项目中。
帮甚幸!