尚硅谷SpringCloud2020简单学习记录(个人用)33-39集
接下来就是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工作时分成两步
- 比如对eureka,它会优先选同一个区域内负载较少的server
- 根据用户指定的策略选择一个服务使用
提供的策略有:轮询,随机和根据响应时间加权
尽管没有引入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集相关推荐
- 尚硅谷云原生学习笔记(76~143集)
笔记列表: 尚硅谷云原生学习笔记(1-75集) 尚硅谷云原生学习笔记(76~143集) 尚硅谷云原生学习笔记(144~172集) 尚硅谷云原生学习笔记(173~XXX集) 目录 76.为什么用kube ...
- 尚硅谷云原生学习笔记(1-75集)
笔记列表: 尚硅谷云原生学习笔记(1-75集) 尚硅谷云原生学习笔记(76~143集) 尚硅谷云原生学习笔记(144~172集) 尚硅谷云原生学习笔记(173~XXX集) 目录 1.什么是云计算 1. ...
- 第四课 尚硅谷Scala语言学习-面向对象
第四课 尚硅谷Scala语言学习-面向对象 文章目录 第四课 尚硅谷Scala语言学习-面向对象 第一节 Scala 包 1.1 包基本语法 1.2 包说明 1.3 包对象 1.4 导包说明 第二节 ...
- HTML简单学习记录
文章目录 HTML简单学习记录 简介 HTML基本结构 网页基本标签 图像标签 链接标签 超链接 锚链接 功能性链接 行内元素和块元素 列表 表格 视频和音频 视频 音频 页面的简单布局 iframe ...
- 尚硅谷Redis 7学习笔记
尚硅谷Redis 7学习笔记 视频链接 新手入门篇 1.安装及数据类型 2.持久化 3.Redis 7 事务.管道.发布订阅.主从.哨兵.集群 4.springboot整合redis 高级篇(更新中- ...
- 尚硅谷谷粒学院学习笔记(防坑点的总结部分勘误)
谷粒学院学习笔记 部分勘误 数据库设计规约 模块说明 环境搭建 创建一个Spring Boot 的父工程,版本使用:2.2.1.RELEASE 父工程pom.xml里面添加 在pom.xml中添加依赖 ...
- 尚硅谷Linux视频学习建议贴及linux全套视频,运维版本180G高质量视频教程免费下,linux教程
纯视频版本: 链接:https://pan.baidu.com/s/12lJCAn9MFssFEyx8Dmu5Eg 提取码:5fr7 含源码版本: 链接:https://pan.baidu.com/ ...
- 尚硅谷java基础学习笔记
小郑 Java基础 常用DOS命令 dir:列出当前目录下的文件以及文件夹 md:创建目录 rd: 删除目录 cd:进入指定的目录 cd- : 退回到上一级目录 cd\ : 退回到根目录 del : ...
- 尚硅谷MySQL高级学习笔记 -- 1.MySQL 的架构介绍
1.MySQL 简介 什么是 MySQL? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中 ...
- 尚硅谷谷粒学院学习笔记9--前台用户登录,注册,整合jwt,微信登录
用户登录业务 单点登录(Single Sign On),简称SSO. 用户只需要登陆一次就可以访问所有相互信任的应用系统 单点登录三种常见方式 session广播机制实现 使用redis+cookie ...
最新文章
- 网络推广——网络推广专员如何看待网站快照更新快慢问题?
- 科学计数怎么转换成数字_手持式尘埃粒子计数器价格多少钱
- 学校门口的树C语言算法,C语言校园导游程序设计汇报.doc
- 项目管理基本目录结构
- (转)使用JMeter进行Web压力测试
- 4.大数据架构详解:从数据获取到深度学习 --- 数据获取
- oracle 分组统计行数,求助分组之后进行统计行数
- ubuntu20.04安装simhei字体--jupyter中文显示框框的解决方案
- ESP8285+WS2812+MAX9814制作的音乐律动氛围灯
- 整理了一份嵌入式软件工具清单!
- React 16 源码解析笔记 02 - JSX 转换为 ReactElement 的过程
- 实现百度地图marker平滑移动
- 抖音直播新号怎么起号?抖音直播间不进人怎么办?
- 自学web前端怎么学?web前端学习路线css属性
- Java面试 - 进阶(大厂Java面试题)
- 【DBC专题】-5-DBC文件格式解析
- Adaptive Server Anywhere 数据库配置ODBC数据源
- 企业为什么要通过直播来做营销呢?
- 【css】box-shadow匹配ps投影效果/text-shadow
- 【Python】词云之 wordcloud库 全解析
热门文章
- 阿里巴巴矢量图标批量下载
- 208个地级市总人口、城市和农村人口、城镇化率面板数据(2010-2019年)
- c语言求同构数的三个步骤,C语言求同构数.doc
- 李沐-动手学深度学习
- groovy java to swift_groovy字符串 - Groovy教程
- 搜苹果ipad版_春季课前第3轮评估! 安卓苹果电脑端全平台支持!
- 计算机技术检索,计算机检索常用技术.ppt
- 电商项目的类目,spu,sku,单品
- Houdini图文笔记:Houdini Indie正版声明
- 一个基本开发框架的整合演化之路--9、整合文件服务器fastdfs