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

首先是服务提供者:

Pom

将zookeeper换掉:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

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,但

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

已含有ribbon供用户使用

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

加深对restTemplate的理解

GetForObject/getForEntity:

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

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

修改cloud-consumer-order80\src\main\java\com\xs\springcloud\controller\PaymentController.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<Payment> getPayment2(@PathVariable("id") Long id){
    ResponseEntity<CommonResult> 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集

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

  1. 尚硅谷云原生学习笔记(76~143集)

    笔记列表: 尚硅谷云原生学习笔记(1-75集) 尚硅谷云原生学习笔记(76~143集) 尚硅谷云原生学习笔记(144~172集) 尚硅谷云原生学习笔记(173~XXX集) 目录 76.为什么用kube ...

  2. 尚硅谷云原生学习笔记(1-75集)

    笔记列表: 尚硅谷云原生学习笔记(1-75集) 尚硅谷云原生学习笔记(76~143集) 尚硅谷云原生学习笔记(144~172集) 尚硅谷云原生学习笔记(173~XXX集) 目录 1.什么是云计算 1. ...

  3. 第四课 尚硅谷Scala语言学习-面向对象

    第四课 尚硅谷Scala语言学习-面向对象 文章目录 第四课 尚硅谷Scala语言学习-面向对象 第一节 Scala 包 1.1 包基本语法 1.2 包说明 1.3 包对象 1.4 导包说明 第二节 ...

  4. HTML简单学习记录

    文章目录 HTML简单学习记录 简介 HTML基本结构 网页基本标签 图像标签 链接标签 超链接 锚链接 功能性链接 行内元素和块元素 列表 表格 视频和音频 视频 音频 页面的简单布局 iframe ...

  5. 尚硅谷Redis 7学习笔记

    尚硅谷Redis 7学习笔记 视频链接 新手入门篇 1.安装及数据类型 2.持久化 3.Redis 7 事务.管道.发布订阅.主从.哨兵.集群 4.springboot整合redis 高级篇(更新中- ...

  6. 尚硅谷谷粒学院学习笔记(防坑点的总结部分勘误)

    谷粒学院学习笔记 部分勘误 数据库设计规约 模块说明 环境搭建 创建一个Spring Boot 的父工程,版本使用:2.2.1.RELEASE 父工程pom.xml里面添加 在pom.xml中添加依赖 ...

  7. 尚硅谷Linux视频学习建议贴及linux全套视频,运维版本180G高质量视频教程免费下,linux教程

    纯视频版本: 链接:https://pan.baidu.com/s/12lJCAn9MFssFEyx8Dmu5Eg  提取码:5fr7 含源码版本: 链接:https://pan.baidu.com/ ...

  8. 尚硅谷java基础学习笔记

    小郑 Java基础 常用DOS命令 dir:列出当前目录下的文件以及文件夹 md:创建目录 rd: 删除目录 cd:进入指定的目录 cd- : 退回到上一级目录 cd\ : 退回到根目录 del : ...

  9. 尚硅谷MySQL高级学习笔记 -- 1.MySQL 的架构介绍

    1.MySQL 简介 什么是 MySQL? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中 ...

  10. 尚硅谷谷粒学院学习笔记9--前台用户登录,注册,整合jwt,微信登录

    用户登录业务 单点登录(Single Sign On),简称SSO. 用户只需要登陆一次就可以访问所有相互信任的应用系统 单点登录三种常见方式 session广播机制实现 使用redis+cookie ...

最新文章

  1. 网络推广——网络推广专员如何看待网站快照更新快慢问题?
  2. 科学计数怎么转换成数字_手持式尘埃粒子计数器价格多少钱
  3. 学校门口的树C语言算法,C语言校园导游程序设计汇报.doc
  4. 项目管理基本目录结构
  5. (转)使用JMeter进行Web压力测试
  6. 4.大数据架构详解:从数据获取到深度学习 --- 数据获取
  7. oracle 分组统计行数,求助分组之后进行统计行数
  8. ubuntu20.04安装simhei字体--jupyter中文显示框框的解决方案
  9. ESP8285+WS2812+MAX9814制作的音乐律动氛围灯
  10. 整理了一份嵌入式软件工具清单!
  11. React 16 源码解析笔记 02 - JSX 转换为 ReactElement 的过程
  12. 实现百度地图marker平滑移动
  13. 抖音直播新号怎么起号?抖音直播间不进人怎么办?
  14. 自学web前端怎么学?web前端学习路线css属性
  15. Java面试 - 进阶(大厂Java面试题)
  16. 【DBC专题】-5-DBC文件格式解析
  17. Adaptive Server Anywhere 数据库配置ODBC数据源
  18. 企业为什么要通过直播来做营销呢?
  19. 【css】box-shadow匹配ps投影效果/text-shadow
  20. 【Python】词云之 wordcloud库 全解析

热门文章

  1. 阿里巴巴矢量图标批量下载
  2. 208个地级市总人口、城市和农村人口、城镇化率面板数据(2010-2019年)
  3. c语言求同构数的三个步骤,C语言求同构数.doc
  4. 李沐-动手学深度学习
  5. groovy java to swift_groovy字符串 - Groovy教程
  6. 搜苹果ipad版_春季课前第3轮评估! 安卓苹果电脑端全平台支持!
  7. 计算机技术检索,计算机检索常用技术.ppt
  8. 电商项目的类目,spu,sku,单品
  9. Houdini图文笔记:Houdini Indie正版声明
  10. 一个基本开发框架的整合演化之路--9、整合文件服务器fastdfs