栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

尚硅谷SpringCloud2020简单学习记录(个人用)33-39集

尚硅谷SpringCloud2020简单学习记录(个人用)33-39集

接下来就是consul的使用,在使用上实际上和zookeeper并无什么差别

首先是服务提供者:

Pom

将zookeeper换掉:


    org.springframework.cloud
    spring-cloud-starter-consul-discovery

Yml:

server:
  port: 8006

spring:
  application:
    name: consul-provider-payment

  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        service-name: ${spring.application.name}

controller则单纯换下url,其他不变

然后是服务消费者:

同样和zookeeper一样,换掉zookeeper的依赖,小改一下url即可

启动两个模块,输入http://localhost:8500 可以看到两个模块都注册了进去

输入

http://localhost:8006/payment/consul

http://localhost/consumer/payment/consul

无异常即可通过

Zookeeper,consul,eureka的区别:

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。

Eureka:AP

Zookeeper,Consul:CP

Ribbon负载均衡

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

Ribbon如今也处于维护模式

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。

服务器端负载均衡

nginx 是客户端所有请求统一交给 nginx,由 nginx 进行实现负载均衡请求转发,属于服务器端负载均衡。既请求由 nginx 服务器端进行转发。

客户端负载均衡

Ribbon 是从注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现负载均衡策略。既在客户端实现负载均衡。

Ribbon工作时分成两步

  1. 比如对eureka,它会优先选同一个区域内负载较少的server
  2. 根据用户指定的策略选择一个服务使用

提供的策略有:轮询,随机和根据响应时间加权

尽管没有引入ribbon,但


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-server

已含有ribbon供用户使用

加ribbon的依赖也可以,不影响使用

加深对restTemplate的理解

GetForObject/getForEntity:

getForObject 返回值直接是响应体内容转为的 json 对象

getForEntity 返回值的封装包含有响应头, 响应状态码的 ResponseEntity 对象

修改cloud-consumer-order80srcmainjavacomxsspringcloudcontrollerPaymentController.java

将create方法修改成以下:

@GetMapping(value = "/consumer/payment/create")
    public CommonResult create(Payment payment){
//        return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);
       
return restTemplate.postForEntity(PAYMENT_URL+"/payment/create",payment,CommonResult.class).getBody();
    }

读取http://localhost/consumer/payment/create 得到:

{"code":200,"message":"插入成功,端口号为:8001","data":1}

接着加入新的方法:

@GetMapping(value = "/consumer/payment/getForEntity/{id}")
public CommonResult getPayment2(@PathVariable("id") Long id){
    ResponseEntity re = restTemplate.getForEntity(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
    if(re.getStatusCode().is2xxSuccessful()){
        return re.getBody();
    }else {
        return new CommonResult<>(444,"wrong");
    }
}

输入网址:

http://localhost/consumer/payment/getForEntity/1 得到

{"code":200,"message":"查询成功,端口号为:8001","data":{"id":1,"serial":"alibaba"}}

Ribbon的负载均衡的规则

com.netflix.loadbalancer.RoundRobinRule 轮询

com.netflix.loadbalancer.RandomRule 随机

com.netflix.loadbalancer.RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重试,获取可用的服务

WeightResponseTimRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择

BestAvaliableRule 会像过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务

AvaliabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例

ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能喝server的可用性选择服务器

默认使用轮询

如何修改默认规则?依然以cloud-consumer-order80为例

自定义配置类不能放在@ComponentScan所扫描的当前包下,然而@SpringBootApplication里包含了@ComponentScan,所以不能在com.xs.springcloud里配置

则创建一个新包裹,com.xs.myrule

创建一个新类:

@Configuration
public class MySelfRule {

    @Bean
    public IRule myRule(){
        //定义为随机
       
return new RandomRule();
    }
}

在主启动类加入以上注解:

@RibbonClient(name="CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)

再做测试即可

以上为33-39集

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/780439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号