SpringCloud小Demo

SpringCloud

SpringCloud由很多微服务组成,主要学了如下七个。注册中心Eureka,数据微服务,视图微服务(负载均衡Ribbon,Feign),服务及客户端配置(Git,RabbitMQ),断路器Hystrix,断路器监控hystrix-dashboard (聚合Turbine),网关Zuul。
源码地址:https://github.com/MikeChengege/SpringCloud

一、分布式及集群解释

分布式:(一变多)原本一个springboot应用完成的东西分成好几个springboot。比如将一个应用的视图层和数据层分成不同的项目。降低耦合提高性能
集群:(多为一)同一个项目中数据微服务和视图微服务可以有好几个,在一个挂掉的同时另一个接替工作。同时提供服务,降低压力提高性能

二、注解解释

1、声明在启动类中的

@SpringBootApplication 说明是一个springboot项目
@EnableEurekaServer 注册中心服务端
@EnableEurekaClient 表明是一个Eureka客户端,用于注册到EurekaServer
@Bean 注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理
@EnableDiscoveryClient 用于发现eureka 注册中心的微服务(网络解释:和@EnableEurekaClient一样的功能,但是它也可以注册到非Eureka之外的服务端)
@EnableFeignClients 表示利用Feign方式, Feign 是对 Ribbon,使用更简单
@LoadBalanced 给 RestTemplate做标记,restTemplate 这个工具来做负载均衡
@EnableCircuitBreaker 表示分享信息给监控中心,用于断路器监控。
@EnableConfigServer 这个注解表示本springboot 是个配置服务器。
@EnableHystrixDashboard 表示是断路器监控类
@EnableTurbine 根据实例注册名将实例聚合方便监控
@EnableZuulProxy 表示这是一个网关服务

2、声明在其他类中

@RestController 返回ruturn的字符串,比如return “aa/bb”返回的就是aa/bbb
@Controller 返回return的指定页面路径,比如return “aa/bb”返回的就是aa/bbb这个路径下面的页面
@Autowired 自动装配,比如需要调用service层的方法,需要先装配进来。
@RequestMapping 将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上,例如@RequestMapping("/products")
@Service 自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了,类似的还包括@Component、@Repository、@Controller
@Value(“${}”) 用户获取配置文件中的或者是那个类中定义的内容(网上解释说是从配置文件中获取,可是本项目并没有在配置文件中定义,只是在类中定义过)
@component (把普通pojo实例化到spring容器中)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
@repository (实现dao访问)用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
@FeignClient 用户feign客户端类,用法:@FeignClient(value = “PRODUCT-DATA-SERVICE”) ,PRODUCT-DATA-SERVICE为数据微服务名称
@GetMapping 用于处理请求方法的GET类型,同类型的还有@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping。简化了之前的操作(@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET))、
@RefreshScope 配置文件自动刷新

三、微服务概述

1. 注册中心(Eureka)

  1. 只需要两个注解和配置文件,默认端口8761
  2. 访问地址:http://127.0.0.1:8761/

2. 数据服务

  1. 需要controller、service、model这三层,按理说也需要dao层因为开始学习数据在类中给出了。
  2. Controller层运用了@RequestMapping本应是后台去拿数据应该不需要,但是必须(不理解)
  3. Model这层在数据服务和视图服务中都要定义实体类,感觉有些麻烦但是必须。

3. 视图微服务(Feign\Ribbon)。

  1. Ribbon使用restTemplate来达到负载均衡,需要在启动类中声明,但是使用Feign后就不需要在启动类中声明了。Feign为Ribbon的封装
  2. 需要Feign客户端,是一个接口,会在service层调用,用于在数据微服务中获取数据
  3. Controller层用于拿出数据传递给html 。
    在这里插入图片描述

4. 链路追踪

  1. 改造数据和视图微服务,分别在启动类中注入Sampler.ALWAYS_SAMPLE。
  2. 启动zipkin-server-2.10.1-exec.jar
  3. 监控地址http://localhost:9411/zipkin/dependency/
  4. 当支持rabbitMQ时需要加参数运行jar包。java -jar zipkin-server-2.10.1-exec.jar --zipkin.collector.rabbitmq.addresses=localhost

5. 配置服务器及客户端

  1. 用于云配置,只需修改一个地方同一个集群中所有微服务都可自动获取
  2. 先在git上创建库,在启动类注解一下
  3. 在配置文件中声明地址。

6. 配置客户端

  1. 安装rabbitMQ(不用做其他配置)
  2. Pom文件引入rabbitMQ包
  3. 使用RabbitMQ来进行消息广播,自动刷新配置文件
  4. 添加配置文件bootstrap.yml,修改application.yml.修改controller层
  5. 使用post方式访问http://localhost:8012/actuator/bus-refresh去git获取信息,然后刷新配置服务器

7. 断路器

  1. 用于数据微服务done掉或者出问题时不会报错,而是采用备用方案
  2. 新建类实现Feign客户端接口,提供数据(备用方案)
  3. 修改视图微服务的Feign客户端,添加回调改为:@FeignClient(value = “PRODUCT-DATA-SERVICE”,fallback = ProductClientFeignHystrix.class)
  4. 在配置文件中开启断路器feign.hystrix.enabled: true

8. 断路器监控(监控 hystrix-dashboard/聚合监控turbine)

  1. 可以看到访问情况及访问成功率等如下图
  2. 修改ProductViewServiceFeignApplication, 增加 @EnableCircuitBreaker
  3. 配置文件比较重要,需要监控那些服务都可以将服务名写在配置文件中
  4. 访问http://localhost:8020/hystrix监控地址,输入聚合服务的地址http://localhost:8021/turbine.stream。
    在这里插入图片描述
    在这里插入图片描述

9. 网关(zuul)

  1. 用于将数据微服务和视图微服务归类,访问者只需要记住网关的IP和端口。
  2. 只有启动类声明网关,配置文件中配置代理的服务名称并给出访问路径。

四、端口概览

1、微服务:

注册中心:eureka-server: 8761
数据微服务:product-data-service: 8001,8002,8003
视图微服务:product-view-service-ribbon: 8010
视图微服务:product-view-service-feign: 8012, 8013, 8014
断路器监控:hystrix-dashboard: 8020
断路器聚合监控:turbine: 8021
配置服务器:config-server: 8030
网关:zuul: 8040

2、第三方:

链路追踪:zipkin:9411
消息中间件:rabbitMQ: 5672

五、各部分解释

  1. 哪些微服务是如何彼此调用的? sleuth 服务链路追踪
  2. 如何在微服务间共享配置信息?配置服务 Config Server
  3. 如何让配置信息在多个微服务之间自动刷新? RabbitMQ 总线 Bus
  4. 如果数据微服务集群都不能使用了, 视图微服务如何去处理? 断路器 Hystrix
  5. 视图微服务的断路器什么时候开启了?什么时候关闭了? 断路器监控 Hystrix Dashboard
  6. 如果视图微服务本身是个集群,那么如何进行对他们进行聚合监控? 断路器聚合监控 Turbine Hystrix Dashboard
  7. 如何不暴露微服务名称,并提供服务? Zuul 网关

六、修改配置服务器和配置客户端使用本地配置

https://blog.csdn.net/m0_37244234/article/details/103851847

学习资源均来自how2j.cn不错的网站,适合初学者去学一些java的东西

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值