eureka是netflix开发的服务发现框架,包含两个组件Eureka Server和Eureka Client
各节点启动后在eureka service中进行注册
eureka client内置,使用轮询负载均衡器,启动后,定期向service发送心跳(默认周期为30秒),固定时间内没有接到心跳,会将该节点移除。
eureka服务端开发:
1.添加包:spring-cloud-starter-netflix-eureka-server
2.配置文件:
3.启动类注解@EnableEurekaServer
服务注册
1.导包 spring-cloud-starter-netflix-eureka-client
2.添加配置文件
将该服务注册到6868eureka服务上
3.启动类添加注解@EnableEurekaClient
eureka高可用:本质上就是有多个注册中心
eureka与zookeeper区别:
feign:简化的javaHttp客户端开发工具,
服务A调用服务B,B不需要改动
服务A:
1.导包spring-cloud-starter-openfeign
2.添加注解(在启动类上面添加):@EnableDiscoveryClient使之能够成为可以找到的客户端
@EnableFeignClients
3.创建接口:
@FeignClient():用于指定从哪个服务中调用功能,注意:名称和调用服务保持一致,并且不能有下划线,路径也是要调用的路径.
4.哪里要用到,直接进行注入即可
熔断器(Hystrix)
:服务之间调用,其中一个服务出问题,调用者也会报错,雪崩效应(同步操作下)
feign本身支持Hystrix,不需要额外引入依赖
- 配置:feign:hystrix:enabled:true
- 建立一个熔断实现类
- 修改注解:@FeignClient(value=“tensquare-base”.fallback=LabelClientImpl.class),当出错时自动回滚到该实现类上面。
网关:Zuul3,
所有客户都经过网关去访问微服务,由网关向指定微服务跳转。
优点:省去很多端口的麻烦
网关搭建:
1.导包:spring-cloud-starter-netflix-zuul
2.配置文件:
zuul:
routes:
tensquare‐gathering: #活动
path: /gathering/** #配置请求URL的请求规则
serviceId: tensquare‐gathering #指定Eureka注册中心中的服务id
3.启动类加@EnableZuulProxy(使之成为网关代理)
Zuul过滤器
1.创建一个过滤器类继承ZuulFilter,实现里面的方法
filterType:过滤类型,pre,post
filterOrder:优先级,数字越大,优先级越低
shouldFilter:是否执行该过滤器
run:过滤是执行的操作,setsendnullResponse(false):表示不放行,其他均放行
注:请求头信息在过滤器中容易丢失,处理先拿到头,然后再转发,可以直接在过滤器中进行验证
集中配置组件 spring cloud config 有server和client
考虑到修改配置文件后,微服务不需要重启,所以就涉及到消息中间件,一起来说
服务端配置:
1.导包:spring-cloud-config-server,消息总件包:spring-cloud-bus,spring-cloud-stream-binder-rabbit
2.在启动类添加@EnableConfigServer
3.编写配置文件
注:uri是码云上面的配置文件地址,
客户端配置(就在每一个微服务上进行配置):
1.导包:spring-cloud-starter-config,消息总件spring-cloud-bus,spring-cloud-stream-binder-rabbit,spring-boot-starter-actuator
2.添加配置文件bootstrap.yml,删除application.yml
该配置文件意思是,在启动之前去信息配置服务端拿配置文件(服务端去云服务器去拿),然后启动
3.添加一个启动类,监听配置文件修改信息,加入@RefreshScope注解,自动刷新配置
gateway网关
功能1.路由 2.过滤器,就是一个过滤器
具体操作;
1创建springBoot工程:启动类上添加@EnableZuulProxy
2.路由配置
zuul:
routes:
manage‐course: #路由名称,名称任意,保持所有路由名称唯一
path: /course/**
serviceId: xc‐service‐manage‐course #指定服务id,从Eureka中找到服务的ip和端口
#url: http://localhost:31200 #也可指定url,没有Eureka 找到其具体地址
strip‐prefix: false #true:代理转发时去掉前缀,false:代理转发时不去掉前缀
sensitiveHeaders: #默认zuul会屏蔽cookie,cookie不会传到下游服务,这里设置为空则取消默认的黑名
单,如果设置了具体的头信息则不会传到下游服务
#ignoredHeaders: Authorization
3.过滤器
定义过滤器实现ZuulFilter