花了一周时间学习了下SpringCloud,这里做一个小结。
SpringCloud主要包括以下几块
核心组件
Eureka:服务提供者注册中心;
Ribbon服务消费者相关组件,可直接通过服务提供者名称,调用提供者所注册的服务,摒弃IP+Port的方式;
Hystrix:服务提供者组件,主要作用服务熔断服务降级,解决服务调用时系统阻塞的情况(即解决服务雪崩效应);
Zuul:用户访问服务消费者前加锁,提高微服务架构系统的安全性;域名+Port映射到IP2+port;
Config:解决分布式多模块开发,配置文件统一管理问题,主要是方便维护;
扩展组件
Feign:基于Ribbon的一个组件,对Ribbon公用的代码进行抽取,形成一个接口,在消费者中直接注入即可使用,不需要在消费者服务者进行硬编码了;
Dashboard:用来监控集成了Hystrix的消费者,不单独使用,通常与turbine组合使用;
Turbine:基于Dashboard,与Dashboard组合使用,用来监控Hystrix消费者集群;
SpringCloud项目结构
除却父工程是maven项目,packaging是pom的形式;其它Module都是SpringBoot项目,packaging是jar的形式;
Microservice(父工程)
microservice-common
microservice-eureka-server-2001
microservice-eureka-server-2002
microservice-eureka-server-2003
microservice-student-consumer-80
microservice-student-consumer-feign-80
microservice-student-consumer-hystrix-dashboard-90
microservice-student-consumer-hystrix-turbine-91
microservice-student-provider-1001
microservice-student-provider-1002
microservice-student-provider-1003
microservice-student-provider-hystrix-1004
microservice-student-provider-hystrix-1005
microservice-student-provider-hystrix-1006
microservice-zuul-3001
microservice-config-server-4001
microservice-config-client-5001
microservice-eureka-server-config-2004
microservice-eureka-server-config-2005
microservice-student-provider-config-1007
microservice-student-provider-config-1006
microservice-common
存放通用的实体类或工具类;
消费者若是使用Feign时所用接口也许在此定义;
microservice-eureka-server-*
搭建Eureka单机以及集群服务器所用;
microservice-student-consumer-80
消费者直接调用服务者,消费者通过Ribbon调用服务者,两种方式均在此有所体现;
microservice-student-consumer-feign-80
基于Feign的一个消费者,在消费者中直接注入common模块中的接口即可调用服务者接口;
microservice-student-provider-*
服务提供者集群
microservice-student-provider-hystrix-*
服务熔断演示、服务熔断监控、服务熔断集群监控
microservice-student-consumer-hystrix-dashboard-90
服务熔断监控仪表盘(与其它Module之间没有调用关系,可以看成独立于父工程的Module)
microservice-student-consumer-hystrix-turbine-91
服务熔断集群监控组件,辅助Dashboard监控Hystrix
microservice-zuul-3001
路由网关服务
microservice-config-server-4001
配置中心服务端
microservice-config-client-5001
配置中心客户端(SpringCloud Config入门级的讲解)
microservice-eureka-server-config-*
配置中心客户端与Eureka整合
microservice-student-provider-config-*
配置中心客户端与与服务提供者整合
microservice-common
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) 因为该Module不访问数据库,但是SpringBoot默认又会加载数据库,所以要加此注解,默认排除数据库相关配置信息加载 @FeignClient(value="MICROSERVICE-STUDENT",fallbackFactory=StudentClientFallbackFactory.class) Feign与Hystrix整合所用,用来对熔断降级代码进行抽取
microservice-eureka-server-*
@EnableEurekaServer 启动类上开启注册中心服务
eureka: instance: hostname: localhost #eureka客户端主机实例名称 appname: microservice-student #客户端服务名 instance-id: microservice-student:1001 #客户端实例名称 prefer-ip-address: true #显示IP client: service-url: defaultZone: http://localhost:2001/eureka #把服务注册到eureka注册中心
microservice-student-consumer-80
@LoadBalanced // 引入ribbon负载均衡 在配置类中添加此注解,由Spring管理RestTemplate,因为SpringCloud底层就是通过restful进行服务之间的调用
eureka: client: register-with-eureka: false #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false service-url: defaultZone: http://eureka2001.javaxl.com:2001/eureka/,http://eureka2002.javaxl.com:2002/eureka/,http://eureka2003.javaxl.com:2003/eureka/
microservice-student-consumer-feign-80
@EnableEurekaClient 开启Eureka客户端调用服务 @EnableFeignClients(value = "com.javaxl.*.*") 启用Feign客户端调用,由于只有Feign的接口,没有被实现,不能直接注入到controller中,需要加入包扫描
# feign整合Hystrix feign: hystrix: enabled: true # Ribbon的超时时长设置后才能设置Hystrix的 ribbon: ReadTimeout: 10000 ConnectTimeout: 9000 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 3000
microservice-student-provider-*
@EntityScan("com.javaxl.*.*") 服务提供者读取不到common Module下的实体类,需要扫描 @EnableEurekaClient 注册中心服务启动
eureka: instance: # 单机 hostname: localhost #eureka注册中心实例名称 hostname: eureka2001.javaxl.com # 集群 client: register-with-eureka: false #false 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己。 fetch-registry: false #false 由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false service-url: defaultZone: http://eureka2002.javaxl.com:2002/eureka/,http://eureka2003.javaxl.com:2003/eureka/ # 集群 #单机defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与Eureka注册中心交互的地址,查询服务和注册服务用到
microservice-student-provider-hystrix-*
#使用Hystrix不整合Feign的情况,超时设置放在Hystrix这边 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 3000
@EnableCircuitBreaker 启动类加此注解,代表启用断路器的意思
/** * 测试Hystrix服务降级 * Controller加此,表明服务降级具体处理方案 * @return * @throws InterruptedException */ @ResponseBody @GetMapping(value="/getInfo") @HystrixCommand(fallbackMethod="getInfoFallback") public Map<String,Object> getInfo() throws InterruptedException{ Thread.sleep(2000); Map<String,Object> map=new HashMap<String,Object>(); map.put("code", 200); map.put("info", "业务数据xxxxx"); return map; } public Map<String,Object> getInfoFallback() throws InterruptedException{ Map<String,Object> map=new HashMap<String,Object>(); map.put("code", 500); map.put("info", "系统出错,稍后重试"); return map; }
microservice-student-consumer-hystrix-dashboard-90
@EnableHystrixDashboard 启动类加此,代表启用Hystrix监控仪表盘
microservice-student-consumer-hystrix-turbine-91
turbine: app-config: microservice-student # 指定要监控的应用名称,以逗号隔开 clusterNameExpression: "'default'" #表示集群的名字为default spring: application: name: turbine
@EnableTurbine 启动类加此注解,表明启用turbine
microservice-zuul-3001
@EnableZuulProxy 启动类加此注解,表明启用路由代理
zuul: routes: studentServer.serviceId: microservice-student studentServer.path: /studentServer/** ignored-services: "*" prefix: /javaxl 配置映射关系,拦截原始url服务,映射后的url加前缀
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有