零、springcloud细节问题(回顾)
- Eureka Server
- Eureka Client
- @EnableEurekaClient 专用于Eureka Server注册中心
- @EnableDiscoveryClient 通用任何注册中心
- 客户端的调用方式
- restTemplate + ribbon
ribbon(软负载均衡 默认 轮询)
客户端仅引入两个依赖(spring-cloud-starter-eureka和spring-cloud-starter-ribbon),无须额外注解配置 - Feign 推荐
引入依赖
创建接口(@FeignClient(“调用服务名称”))
入口类 @EnableFeignClients
- Hystrix断路器 断掉宕机的服务
-
restTemplate使用
@HystrixCommand(fallbackMethod = “errorHello”)
入口类中加入@EnableHystrix -
Feign
开启断路器 yml中
feign:
hystrix:
enabled: true
@FeignClient( value=“HELLO-SERVICE” ,fallback=实现类.class) //明确该接口对eureka中的哪个服务
- 项目引入依赖梳理
- EurekaServer
spring-cloud-starter-eureka-server - EurekaClient
spring-cloud-starter-eureka 服务注册,发现功能,restTemplate客户端调用
spring-cloud-starter-feign feign客户端调用
spring-cloud-starter-hystrix 断路器
-
springcloud提供的注解
@SpringCloudApplication 相当于下面三个
@SpringBootApplication
@EnableDiscoryClient
@EnableCircuitBreaker //默认开启断路器 -
其他
- 服务提供者 或 服务消费者 在引入starter-eureka之后,自动依赖 feign enableDiscoverClient
一、SpringCloud统一配置中心 引言
- 为什么需要统一配置中心?
统一配置中行顾名思义,就是将配置统一管理,配置统一管理的好处是在以后大规模集群部署服务应用时相同的服务配置一致,日后再修改配置只需要统一修改全部同步,不需要一个一个服务手动维护。 - 解决问题:
①配置文件的维护问题
②安全隔离配置文件
简而言之:操作一处,修改全局。 - 统一配置中心的架构图
二、搭建统一配置中心
- 引入依赖
- 在入口类加入 @EnableConfigServer
- 在Aapplication中配置远程仓库位置
- config.server默认寻找配置解析
三、Zuul(路由网关)
-
微服务!!!
因为,现在开发的模式发生了变化,公司为减轻人员流动带来的影响,往往从服务扩展的角度进行业务拆分。按功能拆分服务,每个人员只开发一小模块,减少项目与项目之间的功能耦合。而且又因为模块小,可以减轻测试时启动部署的时间。 -
微服务系统(最简单的微服务系统架构)
在微服务架构中,需要一个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这一个基础组件相互协作,共同组建了一个简单的微服务系统。一个简单的微服务系统如下图:
总结:在SpringCloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(zuul、Ngnix),再到达服务网关(zuul集群),然后再到具体的附物。服务统一注册到高可用的服务注册中心集群,服务的所有的配置文件由配置服务管理,配置服务的配置文件放在git仓库,方便开发人员随时改配置。
- Zuul简介.
Zuul的主要功能是路由转发 和过滤器 。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。
zuul默认和Ribbon结合实现了负载均衡的功能。 - 搭建zuul网关
①.依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
②.编写入口类
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
③.配置文件
server:
port: 8760
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: zuul
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
management:
security:
enabled: false
zuul:
routes:
product:
path: /aa/**
serviceId: PRODUCT #serviceId书写的是之前的ribbon与feign的应用名称
aaaa:
path: /bb/**
serviceId: ORDER
其他、底层的架构原理图
其他、对比
微服务中,首先肯定离不开服务开发、服务配置与管理、服务注册与发现、服务的调用、熔断器以及负载均衡等等,除此之外,还有服务的路由、监控、部署,还有可能涉及到一些中间件等等。
这些技术栈都有一些对应的落地技术实现,具体如下: