深入浅出springboot阅读学习(五)

Springboot Actuator监控端点。
SpringCloud:为了实现分布式的开发,springcloud应运而生,主要包含以下几个组件,服务治理和发现组件Eureka,客户端负载均衡组件Ribbon,声明服务调用服务间调用,Feign,断路器限流熔断降级 Hystrix,还有API网关可用于负载均衡以及过滤策略Zuul,还有一些其他的比如config配置管理等。简单样例,
一、Eureka部署启动只需引入spring-cloud-starter-netflix-eureka依赖,dependencyManager标签中引入spring-cloud依赖然后在启动类上@EnableEurekaServer注解就可以启动一个eureka服务了,不过正常来说还要配置文件中配置一些基本信息比如服务名称、端口号、是否注册给服务中心、是否检索服务。spring.application.name标识微服务的公共名称,多个相同认为同一个微服务的不同节点。这里说到这个spring.application.name同样的配置在不同场景组件中含义完全不一样,springboot中标识服务名称,而同样的配置如果是使用nacos管理服务的注册与发现则是标识需要加载的配置文件。是否注册给服务中心设置为false因为其本身就是治理的自己不治理自己;eureka.client.fetch-registry配置为false检索服务,不需要检索自身,还有eureka.client.serviceUrl.defaultZone标识服务中心的域,将来可以提供给别的微服务注册,其余微服务要根据这个指向eureka。服务发现,其余被治理节点需要引入spring-cloud-starter-netflix-eureka-client来声明为被治理服务注册到eureka的基础,至于@EnableDiscoveryClient在新版本也不用再加在启动类上了上面引入依赖会自动注册给服务治理中心。注意被治理服务需要在配置文件中配置上eureka的主力域就是上面eureka自己声明再配置文件中的配置。我们构造多节点时候只需要区分开端口号,服务名称保持一致就会认为是同一个微服务的不同节点用于后续治理了。接下来让我们给eureka来一个高可用备份,我们只需修改配置文件,端口比如7001不变,服务名称不变,但是eureka.client.servieUrl.defaultZone:http://localhost:7001/eureka/改成7002。再次启动报错因为没有7002,然后我们同样在启动一个节点对称修改配置文件为7002服务名不变再次启动互相注册监听,注意此时刚才上面配置的单机版的服务注册给服务中心以及服务中心检索为false的去掉。等这两个节点启动后其他的微服务可以启动了不过需要注意那个服务中心的管理域改成这两个中间用逗号隔开也是高可用。
二、下面继续说下服务间调用以及负载均衡,前面说了Ribbon其实他实际就是一个RestTemplate对象,首先我们引入ribbon的依赖spring-cloud-starter-netflix-ribbon。引入后我们对RestTemplate初始化,我们在启动类里面初始化它,@LoadBalance注解然后是@Bean(name="restTemplate")然后代码是public RestTemplate initRestTemplate(){return new  RestTemplate()},只需如此就可以简单实现负载均衡,分摊到不同节点上。测试的时候可以通过springboot自动生成的DiscoveryClient对象来打印微服务id,服务主机和端口。
三、Feign,微服务间调用使用resttemplate如果频繁的话我们需要注意URL的编写,发送以及返回结果参数的拼装解析比较繁琐不太友好。Feign是一个基于接口的编程方式复合Rest风格。依赖spring-cloud-starter-openfeign。启动Feign的时候除了以上依赖还需要在springboot项目的启动类上@EnableFeignClients(basePackages="com.example.demo")声明并指定扫描位置。比如我们加在了产品启动类上,然后我们在产品微服务的service层中加入接口声明,注意并不需要实现类,接口上加注解@FeignClient("user") 声明这是一个Feign客户端并且user是一个服务的Service Id,指向了用户微服务,这样feign就知道要去user这个微服务查询并且负载均衡,产品服务启动时根据启动类上的@EnableFeignClients注解里面配置的路径去扫描并存入Ioc容器。
四、Hystrix,避免服务压力过大反应变慢甚至故障,造成大量请求积压,甚至服务故障后导致其他调用此服务的服务也出现故障,为了避免此种问题出现了Hystrix熔断器,服务保险丝。举个例子产品微服务大量调用用户微服务,用户微服务出现相应超过2s的情况(Hystrix默认2s为监测超时时间),如果想启用Hystrix,首先是在产品微服务引入spring-cloud-starter-netflix-hystrix依赖,然后在产品微服务启动类上加上@EnableCiruitBreaker就可以启动熔断机制,最后我们使用@HystrixCommand注解来声明给哪个方法使用熔断机制,直接打在方法上即可@EnableCiruitBreaker(fallbackMethod="error") 里面的属性表示超过2s就启动error方法,所以我们需要自己实现这个error()  public String error(){return "超时出错"}。同时我们也可以在@HystrixCommand注解里面配置其属性来控制熔断超时时间。如果我们想监测系统的熔断统计信息我们可以引入Hystrix仪表盘,此处不再介绍。
五、Zuul路由网关,可以路由到真是服务器,变相起到了保护真实服务器ip地址避免直接攻击;负载均衡;过滤器功能,使用的时候我们引入spring-cloud-starter-netflix-zuul依赖包,启动类上@EnableZuulProxy注解,配置文件中配置服务路由映射。
六、其他知识点:
1、@springcloudApplication相当于@sprinbootApplication+@EnableDiscoveryClient+@EnableCircuitBreaker
2、选择内嵌服务器,springboot默认Tomcat我们如果undertow或者jetty,只需要在spring-boot-starter-web依赖下排除tomcat的引入然后使用<dependency>重新引入其他依赖即可。
3、springboot启动时提示的图标我们可以自定义修改甚至改成图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值