1. 版本选择

cloud和boot版本到cloud官方网站查找

2. 技术升级选型

3. 服务注册中心

    3.1  Eureka: 配置多个Eureka服务,相互注册,遵循CAP原则的AP

  服务端

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

启动类加注解: @EnableEurekaServer // 设置为服务注册中心 EurekaServer

配置yml文件

server:port: 7001# 单机版
#eureka:
#  instance:
#    hostname: localhost  #eureka服务端的实例名字
#  client:
#    register-with-eureka: false    #表识不向注册中心注册自己
#    fetch-registry: false   #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
#    service-url:
#      #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/#集群版
eureka:instance:hostname: eureka7001.com    #eureka服务端的实例名字client:register-with-eureka: false    #表识不向注册中心注册自己fetch-registry: false   #表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务service-url:#设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址defaultZone: http://eureka7001.com:7001/eureka/
#  server:
##    关闭自我保护机制,保证不可用服务被及时踢除
#    enable-self-preservation: false
#    eviction-interval-timer-in-ms: 2000

消费端:

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

配置文件yml

server:port: 80spring:application:name: cloud-order-servicezipkin:base-url: http://localhost:9411sleuth:sampler:probability: 1eureka:client:register-with-eureka: true #是否向注册中心注册自己fetchRegistry: true #是否从注册中心抓取已有的注册信息 默认true,集群必须设置为trueservice-url:#设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址#defaultZone: http://localhost:7001/eureka #单机版defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka  #集群版

消费端启动类加注解:@EnableEurekaClient

        3.2  Zookeeper:遵循CAP中的CP原则

服务器上直接安装Zookpeer服务,消费端直接引入包

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

配置很简单

server:port: 80spring:application:name: cloud-consumer-ordercloud:zookeeper:connect-string: 192.168.30.87:2181

消费端启动注册到zookeeper后可以到zookeeper的服务器上去查看zookeeper下面的服务

4. 服务调用

4.1 Ribbon: Ribbon主要是做负载均衡的,微服务调用用restTemplate,Ribbon是跟Eureka结合的。引入Eureka的eureka-client包后,点进去,你会发现。已经整合了Ribbon的包

首先添加restTemplate Bean的配置

@Configuration
public class ApplicationContextConfig {// 配置bean 不然后面没法依赖注入,就像以前ssm整合时配置依赖注入一样,// 需要在配置文件配置之后,代码中才可以依赖注入// 当前文件就是spring的配置文件@Beanpublic RestTemplate getRestTemplate() {return new RestTemplate();}
}

Controller里调用其他微服务时就可以直接用了

@Resource
private RestTemplate restTemplate;public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";restTemplate.postForObject(PAYMENT_URL+"接口路径", reqParam, ReturnResult.class);

如果我们的微服务提供者是集群。这样写的话,调用会报错。因为我们的微服务名CLOUD-PAYMENT-SERVICE下面会有多台服务。restTemplate调用这个微服务不知道找哪个。所以会报错。这时候我们要再上面的RestTemplate的Bean上加个Ribbon的注解@LoadBalanced

@Configuration
public class ApplicationContextConfig {// 配置bean 不然后面没法依赖注入,就像以前ssm整合时配置依赖注入一样,// 需要在配置文件配置之后,代码中才可以依赖注入// 当前文件就是spring的配置文件@Bean@LoadBalanced //让这个RestTemplate在请求时拥有客户端负载均衡的能力  public RestTemplate getRestTemplate() {return new RestTemplate();}
}

这个注解默认的是轮询的算法

如何修改成其他算法?

        这里面主要有IRule接口,有7种实现,有轮询的,随机的等等

        实现:

        我们的启动类默认有个@CompantScan注解,是扫描包的。默认是当前启动类所在的包以及子包,我们要建个它扫描不到的包,所以要放在启动类所在包的上一层

然后建个配置类

@Configuration
public class MySelfRule {@Beanpublic IRule myRule() {// 此处将ribbon默认使用的轮询策略改为随机策略return new RandomRule();}
}

最后启动类上再加个注解: @RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class) // 启动该服务时去加载自定义的ribbon配置

4.2 openFeign

很简单。首先引入feign的包

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

这个包里也自动集成了Ribbon。

启动类添加注解: @EnableFeignClients // 启动feign

新建个接口

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {@GetMapping(value = "/payment/get/{id}")CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);@GetMapping(value = "/payment/feign/timeout")String paymentFeignTimeout();
}

@FeignClient(value = "CLOUD-PAYMENT-SERVICE") 此注解就指明了这个service接口都是feign调用。指定下微服务名称

下面的方法就是微服务的接口,要保证mapping的value值和方法的参数值跟微服务里的接口一致就行。方法名不同没关系

Controller里直接调用这个service就行

public class OrderFeignController {@Resourceprivate PaymentFeignService paymentFeignService;@GetMapping(value = "/payment/get/{id}")public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {return paymentFeignService.getPaymentById(id);}}

openFeign 调用默认超时时间为1s我们可以设置调用超时时间,以及日志打印记录

#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:#指的是建立连接所用的时间,适用于网络状况正常的情况下, 两端连接所用的时间ReadTimeout: 5000#指的是建立连接后从服务器读取到可用资源所用的时间ConnectTimeout: 5000logging:level:# feign日志以 debug 级别监控 com.atguigu.springcloud.service.PaymentFeignService 接口com.atguigu.springcloud.service.PaymentFeignService: debug

5. 服务降级

5.1 Hystrix :

服务降级: 目标系统不可用了,需要给一个兜底的解决方法,例如,向调用方返回一个预期的,可处理的备选响应(fallback)

服务降级的场景:1.  程序运行异常

2. 超时

3. 服务熔断触发服务降级

4. 线程池打满

服务熔断: 就是保险丝,当服务达到最大访问时,直接拒绝访问,拉闸限电,然后调用服务降级的方法返回友好提示

限流: 秒杀,高并发操作,严禁一窝蜂涌入进来,大家排队,限制1s N个。有序进行

待补充

springCloud 学习记录过程相关推荐

  1. SpringCloud学习记录 | 第十篇:Hystrix DashBoard 实时图像监控界面(豪猪哥)

    一.Hystrix DashBoard Hystrix提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续记录所有的通过Hystrix发起的请求执行信息,并以统计报表和图 ...

  2. SpringCloud学习记录(1)-父工程与子模块创建及子模块调用

    创建父工程,导入依赖 选择创建maven工程,步骤如下: 修改父工程的pom.xml,具体如下: <?xml version="1.0" encoding="UTF ...

  3. SpringCloud学习记录 | 第十五篇:SpringCloud Alibaba Nacos集群版

    重要.重要.重要 Nacos官方资料:https://nacos.io/zh-cn/docs/what-is-nacos.html Nacos集群架构 关于点故障.性能等等Nacos建议我们在实际项目 ...

  4. SpringCloud学习记录 | 第十五篇:SpringCloud Alibaba Nacos配置中心-单机版

    重要.重要.重要 官网资料:https://nacos.io/zh-cn/docs/what-is-nacos.html NacosConfigServer端 前面一篇文章意见说了怎么部署一个Naco ...

  5. java多线程阶乘_【java学习记录】11.用多线程实现阶乘的计算过程和结果的读取(thread类ReadThread )...

    (源码在上传的压缩包"[java学习记录]11.多线程实现阶乘计算(Thread类和Runnable接口)"中可看到,该压缩包可下载)java * 采用Thread类的子类实现线程 ...

  6. 【记录爬虫实战过程】入门学习·详细过程·爬取天气信息并通过pyecharts进行可视化展示1

    文章目录 前言 正文 1.导入对应模块 2.确定爬取的网站 3.得到数据 4.数据处理 5.将所得数据写入CSV 完整代码 补充:数据可视化 前言 入门学习这个部分是跟着b站教学视频做的,记录了所有过 ...

  7. 2023.2.3,周五【图神经网络 学习记录17】二部图——BiNE算法:显式关系,隐式关系;新的随机游走方式 特点:随机游走次数 是跟节点中心性相关的,在随机游走的过程中 添加一个停止随机游走的概率

    声明:仅学习使用~ 前情提要: 2023.2.2,周四[图神经网络 学习记录16]异构图Graph Embedding算法--GATNE(异构图多属性 多边 类型算法),不建议普通PC跑-PyChar ...

  8. 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)

    利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)   作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...

  9. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

最新文章

  1. 使用Capistrano向EC2部署Django代码--关于SSH相关的配置
  2. /bin/bash^M: bad interpreter: 没有那个文件或目录
  3. 一致性哈希算法原理分析及实现
  4. es6 Generator.prototype.throw()方法
  5. textaligncenter仍然不居中_三星Galaxy S21/S21+保护膜曝光:居中挖孔 回归直屏_手机行情...
  6. 二叉树的前中后层遍历
  7. Centos 7 密码重置
  8. CentOS7配置ssh证书登录无效
  9. 【15】一切都是对象
  10. 今天开始,吾使用手机上的五笔输入法
  11. Java实现拖拉/滑动图片验证码
  12. C语言 输出数组中的全部元素的三种方法
  13. AM437X系列编译环境搭建
  14. Java坑人面试题系列: 包装类(中级难度)
  15. Unity中纹理启用SRGB的坑
  16. java excel 导出数据文件格式无效
  17. 随机生成26个英文字母
  18. java两个字符串相等却总返回false
  19. 火狐 代理服务器拒绝连接
  20. 算法与数据结构-分治法

热门文章

  1. java生成xml_在JAVA生成XML文件
  2. python人脸识别门禁系统毕设_人脸识别门禁系统 毕业设计 可移植树莓派
  3. python实现数据恢复_数据恢复/电子取证 非常有用的python库——Construct | 学步园...
  4. 广西专业技术人员职称个人版_「职称评审」机械工程专业技术人员如何写职称论文?...
  5. python list 元素位置_Python将list中某个元素移至末尾
  6. java 线程百科_Java并发——线程介绍
  7. docker 镜像修改的配置文件自动还原_所以到底该如何修改 docker 容器的端口映射!!!...
  8. nuxt webpack配置css,vuecli或nuxt用Webpack的优雅ProgressBar(webpackBar)
  9. python time 时间差,python如何计算时间差
  10. java设置框架位置_怎样设置label的位置啊?求指导