springcloud

																																																																																																																					**spring cloud相关组件:**
注册中心:eureka 
版本选择:
	创建springboot项目依照自己的cloud版本来选择boot的版本,cloudF以上的版本是用springboot2.x(以下是它支持的一些版本)![](https://img-blog.csdnimg.cn/20190424144704923.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg2NzkzMw==,size_16,color_FFFFFF,t_70)
	**springcloud和springboot对照的版本要求**
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190424145010688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg2NzkzMw==,size_16,color_FFFFFF,t_70)
	本次使用的是springboot 1.5.9 cloud使用的是D 版本
	创建项目后导入springcloud和Erueka依赖
<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR4</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
</dependencyManagement>
****Erueka:****
<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-netflix-eureka-server</artifactId>
			<version>1.3.5.RELEASE</version>
</dependency>

配置文件使用的是yml的格式,加入如下配置(注意缩进)
eureka:
 client:
  service-url:
   #设置交互的地址
    defaultZone: http://localhost:7776/eureka
  #是否从Eureka获取注册信息,当前是单点,不需要同步其他所以设置为false
  fetch-registry: false
   #是否向注册中心注册自己
   register-with-eureka: false
启动类加入注解

@EnableEurekaServe

服务端启动后再来创建一个客户端
1.导入依懒
首先引入cloud依赖(和服务端相同),再引入客户端的依赖

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
			<version>1.3.5.RELEASE</version>
</dependency>

注意:和服务端的依懒是不一样

配置文件使用的是yml的格式,加入如下配置(注意缩进)
eureka:
 client:
  service-url:
   #设置交互的地址
    defaultZone: http://localhost:7776/eureka
spring:
 application:
  name: 服务名字
启动类加入注解

@EnableDiscoveryClient或者@EnableEurekaClient
使用@EnableEurekaClient的情景,就是在服务采用eureka作为注册中心的时候,使用场景较为单一

关闭 eureka的自我保护机制
自我保护机制介绍

默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。
但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其
实是健康的,此时本不应该注销这个微服务。

Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),
那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的
数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务
(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,
可以让Eureka集群更加的健壮、稳定。
在Eureka服务的yml添加如下配置(和client为同一级)
server:
	#禁用自我保护模式
     enable-self-preservation: false
     # 续期时间,即扫描失效服务的间隔时间
     eviction-interval-timer-in-ms: 2000

在客户端yml加入如下配置(和client为同一级)

instance:
#表示eureka client发送心跳给server端的频率。如果在leaseExpirationDurationInSeconds后,server端没有收到client的心跳,则将摘除instance除此之外,如果该instance实现了HealthCheckCallback,并决定让自己unavailable的话,则该instance也不会接收到流量。默认30秒
    lease-renewal-interval-in-seconds: 2
    #表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance。默认为90秒
    lease-expiration-duration-in-seconds: 2
    #配置以ip地址注册到注册中心
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

eureka加入用户验证
服务端加入如下包:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
</dependency>

关闭crsf
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //关闭csrf
        http.csrf().disable();
        //支持httpbasic
        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }
}

服务端加入以下配置(yml)

spring:
  security:
    user:
      name: root
      password: root


  客户端再url加入 defaultZone: http://root:root@localhost:7776/eureka

feign组件

Feign:客户端互相调用
	在消费者导入pom
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
			<version>1.3.5.RELEASE</version>
		</dependency>
	在client包得类加入:@FeignClient(name = "kgc-user-provider")  kgc-user-provider(提供者服务名)
	消费者启动类加入@EnableFeignClients

容错介绍:

在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式相互依赖。但由于每个单元都在不同的进程中运行,一来通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会因等待出现故障的依赖方响应形成任务积压,最终导致自身服务的瘫痪。
如何容错:
1.超时重试
2.熔断器
3.限流在这里插入图片描述
代码实现

创建一个实现类去实现消费者得接口:在实现得对应方法中放入容错得信息,并把这个类注入到spring中
	在接口信息中得@FeignClient注解中加入 fallback="上一步实现类.class"
	在application. yml中添加配置开启容错
feign:
  circuitbreaker:
    enabled: true
   导包:
   		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

容错可视化
消费者导入相应pom文件

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-hystrix</artifactId>
		<version>1.3.5.RELEASE</version>
</dependency>

在启动类添加注解:@EnableCircuitBreaker
访问/hystrix.stream端点

使用Hystrix Dashboard实现可视化监控
1.创建springcloud项目

 		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>

启动类添加注解:@EnableHystrixDashboard
访问 ip+服务端口+hystrix

在这里插入图片描述
聚合监控 turbine
创建springcloud项目启动类添加注解

@EnableTurbine

配置文件加入以下内容(此次使用的内容格式是yml)

eureka:
  client:
    service-url:
      defaultZone: http://root:root@localhost:7777/eureka
  instance:
    lease-renewal-interval-in-seconds: 2
    lease-expiration-duration-in-seconds: 2
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
spring:
  application:
    name: dm-turbine-servier
server:
  port: 8090
turbine:
  # 指定聚合哪些集群
  cluster-name-expression: " 'default' "
  # 此配置默认为false,则服务是以host进行区分,若设置为true则以host+port进行区分
  combine-host-port: true
  ### 配置Eureka中的serviceId列表,表明监控哪些服务
  app-config: kgc-user-consumer,kgc-order-consumer

导入的pom如下

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-turbine</artifactId>
			<version>1.3.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
			<version>1.3.5.RELEASE</version>
		</dependency>

查看监控
1.启动项目turbine,dashboard
2.访问接口产生数据
3.访问dashboard主页
4.url:ip+端口+turbine.stream

Ribbon
1.因为上面的练习项目中已经添加“spring-cloud-starter-eureka”依赖,在这里已经包含了Ribbon,所以不用再单独引入pom文件
2.在consumer中添加配置

#提供者服务名
dm-user-provider:
  		ribbon:
  			#负载均衡的策略
   			NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

其他负载均衡策略均定义在com.netflix.loadbalancer包中,可以根据需要选择合适的策略

类型说明
WeightedResponseTimeRule根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低
RoundRobinRule轮询选择server(此为默认的负载均衡策略)
RandomRule随机选择一个server
ZoneAvoidanceRule复合判断server所在区域的性能和server的可用性选择server
RetryRule在一个配置时间段内,当选择server不成功时一直尝试重新选择
BestAvailableRule选择一个并发请求最小的server
AvailabilityFilteringRule过滤掉那些因为一直连接失败而被标记为circuit tripped的server,并过滤掉那些高并发的server(active connections 超过配置的阈值)

网关zuul组件
1.创建一个springcloud项目
2.导入依懒

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
			<version>1.3.5.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zuul</artifactId>
			<version>1.3.5.RELEASE</version>
		</dependency>

3编写配置文件

spring:
   application:
      name: dm-gateway-zuul
server:
   port: 8012
eureka:
   client:
      service-url:
         defaultZone: http://root:root@localhost:8085/eureka/
zuul:
  routes:
    lm-user-consumer: /user/**


4.添加注解

@EnableZuulProxy

网关过滤器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值