青港SpringCloud 微服务 项目设计分析

前言

微服务框架spring Cloud:
一系列框架的有序集合,利用springBoot简化分布式系统基础式开发
主要框架:

spring cloud Netflix
	Netflix Eureka
	Netflix OpenFeign
	Netflix Hystrix		熔断
	Netflix zuul		网关
spring cloud config
版本: F版

在这里插入图片描述
如何实现状态监管?
服务如何实现负载均衡 ?
如何解决容灾问题,出错情况?

scheduler–定时任务

服务间调用对比

SpringCloud 微服务间调用,通信RPC、Http选择

本项目选择 http 由于本项目考虑的是灵活、独立、自治,采用http的Rest风格服务

服务间的跨服务调用

使用Spring原生框架:RestTemplate 跨服务调用

存在问题
url拼接到地址中,不方便后期代码的维护(地址可能变更、该地址服务可能宕机)
不会服务发现,当调用地址的服务有多台时,不能负载均衡

如何自动注册与发现服务?

·

SpringCloud之Eureka 自动注册与发现服务

负载均衡 Ribbon

·
Eureka集成的负载均衡组件 Ribbon使用

服务调用组件 OpenFeign

SpringCloud服务间调用组件—Fegin=restTemplate+Ribbon

熔断器

SpringCloud熔断器–Hystrix

Hystrix的监控面板搭建

网关(API Gateway)

后端服务不直接开放给调用端,而是通过一个api网关据请求来的url,路由到相应服务。
作用:
统一访问地址
权限检验
负载均衡:通过ribbon实现,默认方式:轮询
Spring cloud默认提供网关:zuul是netflix开源的服务网关,基于jvm路由与服务端的负载均衡
可以完成以下功能:
身份认证与安全
审查与监控
动态路由:动态请求到不同后端集群
压测:通过逐渐增加流量。了解性能
负载均衡
静态响应处理:避免转发到集群
zuul默认http客户端为apache http client 若使用restful风格添加注解:ribbon.restclient.enabled=true
实现
创建独立网关微服务模块
导入zuul与eureka依赖(需注册到eureka)
启动类添加@EnableZuulProxy注解
配置application.xml

zuul动态路由配置:当转发路径与转发的服务名称不一致时可以使用,默认为一致时,不用该配置,省略。
	zuul.routes.微服务名称.path=需要转发的路径
    zuul.routes.微服务名称.service=最终转发的微服务名称
有几个服务配置几个 

zuul过滤器 filterType
分类 :据生命周期分为四类

  • pre :前置过滤如请求路径、限流
    写一实现类继承zuulFilter重写方法:过滤器的类型:filterType优先级:filterOrder,是否生效:shouldFilter,执行具体逻辑run()。
  • route :路由过滤器,请求时调用
  • post :后置,在routing和error过滤器之后调用
  • error :处理请求发现错误时调用

filterOrder
通过int值定义过滤器执行顺序,数值越小优先级越高
shouldfilter
返回一个boolean类型判断是否要过滤
run
拦截器具体逻辑
前置过滤实现统一权限认证
在这里插入图片描述

swagger

导入依赖
在这里插入图片描述
网关:swagger配置:documentationConfig
服务:swagger配置:swaggerConfig :暴露当前服务接口
在这里插入图片描述
引导类application:开启swagger。加注解@Enableswagger2
对controller曝露api:加注解@Api(description=“描述”)
对每个方法加描述:@ApiOperation(value="")
访问时,访问//ip:端口/swagger-ui.html

springCloudConfig 配置中心

config集中配置管理
引入pom依赖spring-cloud-starter-config-server
配置gitspring.cloud.config.server.git.uri=https://github.com/...
配置svn
使用svn作为配置仓库,必须显示声明profiles.active=subversion,不然还是用的git

spring.profiles.active=subversion
spring.cloud.config.server.svn.uri=
spring.cloud.config.server.svn.username=
spring.cloud.config.server.svn.password=
# 默认在系统临时目录下面,需要调整一下避免临时文件被系统自动清理
spring.cloud.config.server.svn.basedir=/data

customer等服务引用,需配置
引入pom依赖—spring-could-starter-config
配置bootstrap.properties

#spring.cloud.config.url=连接springcloudconfig服务器地址
spring.cloud.config.name= 配置文件的前缀
spring.cloud.config.profile=配置文件的后缀
spring.cloud.config.label=仓库分支名称

高可用:
#开启服务发现
spring.cloud.config.discovery.enabled=true
#指定server端的name,也就是server端spring.application.name的值
spring.cloud.config.discovery.serviceId=config
#eureka注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:9002/eureka/
#注册时使用ip而不是主机名
eureka.instance.prefer-ip-address=true

Spring Cloud Bus 消息总线

对config的增强,实现不重启实时更新配置
需要MQ消息支撑
1、springcloudbus加入服务端
导入依赖
在这里插入图片描述 配置bootstrap.properties
spring.rabbitmq.host=
management.endpoints.web.exposure.include=bus-refresh#暴露触发消息总线的地址
2、springcloudbus加入客户端
导入依赖
在这里插入图片描述
actuator为暴露服务的接口
配置bootstrap.properties
spring.rabbitmq.host=
当配置更新后,通过post请求config服务:http://localhost:12002/actuator/bus-refresh 更新

spring cloud sleuth 分布式链路跟踪+Zipkin

背景;微服务架构下一个请求可能经过多个微服务调用才能得到结果,若过程中出现问题,很难定位,故引出 分布式链路跟踪
直观展现完整调用过程,实现日志跟踪。
与Logback、SLF4J 一起使用,可以将日志显示在控制台上
导入依赖:
在这里插入图片描述
添加日志输出代码

private Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info("......");

日志输出格式:
在这里插入图片描述
Zipkin
由于不方便不直观,使用Zipkin收集日志,它可以帮忙收集时间数据
呈现一个依赖图展现请求的每个服务,请求占的时间比
搭建zipkin服务
导入依赖:zipkin服务端依赖,界面端依赖
在这里插入图片描述
配置bootstrap.properties

server.port:
spring.application.name:
#去除控制台异常
management.metrics.web.server.auto-time-requests:false

注册到zipkin服务
导入zipkin依赖:zipkin包括sleuth依赖,有zipkin就不用sleuth了
在这里插入图片描述
配置bootstrap.properties

#spring.zipkin.base-url=http://localhost:9009
#spring.zipkin.sender.type=web #或者Kafka或rabbitmq
spring.sleuth.sampler.percentage=1.0(低版本可能无效)采用: spring.sleuth.sampler.probability=1 #日志更新频率,数值越大频率越快
spring.zipkin.service.name=zipkin
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值