Java-SpringCloud-基础

【Java学习路线之JavaWeb】Spring Cloud教程(非常详细) 文章目录读者阅读条件微服务是什么微服务,我们可以从字面上去理解,即“微小的服务”,下面我们从“服务”和“微小”两个方面进行介绍。微服务架构微服务架构 vs 单体架构微服务的特点微服务框架Java 微服务框架Go 语言微服务框Phyton 微服务框架NodeJS微服务框架Spring Cloud是什么Spring Cloud 常用组件Spring Boot 和 Spring Cloud 的区别与联系1. Spring Boot 和 Spring Cloud 分工不同2. Spring Cloud 是基于 Sp 阅读详情

在这里插入图片描述

一. 服务注册与发现

  • 服务注册:服务提供者将服务的信息(IP、端口、协议等)登记到注册中心
  • 服务发现:服务消费者根据一定策略从注册中心的服务列表选取一个服务
    在这里插入图片描述
1.eureka
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
eureka:
  instance:
    hostname: eureka7003.com #eureka服务端的实例名称
    instance-id: payment8001 
    prefer-ip-address: true
  client:
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      #集群指向其它eureka
      #defaultZone: http://eureka7002.com:7002/eureka/
      #单机就是7001自己
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
    #server:
    #关闭自我保护机制,保证不可用服务被及时踢除
    #enable-self-preservation: false
    #eviction-interval-timer-in-ms: 2000
2.zookeeper
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
spring:
  application:
    name: cloud-zoo-consumer-order
  cloud:
    zookeeper:
      connect-string: 192.168.10.58:2181
3.consul
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
spring:
  application:
    name: consul-payment-provider
  cloud:
    consul:
      host: 192.168.10.58
      port: 8500
      discovery:
        service-name: ${spring.application.name}

主启动类添加注解开启服务注册与发现

@EnableDiscoveryClient
@SpringBootApplication
4.Nacos

二. 负载均衡

将请求压力分配到多个服务器,来提高服务器的性能、可靠性

1.ribbon

负载均衡策略

  • RandomRule:随机
  • RoundRobinRule:轮询,按顺序
  • RetryRule:选择server不成功则在规定时间内一直重试
  • BestAvailableRule:选并发量最低的server
  • AvailabilityFilteringRule:过滤掉老失败或并发量达到阈值的
  • ResponseTimeWeightedRule:响应快的权重高,被选到的概率高
  • ZoneAvoidanceRule:综合判断server所在区域的性能

配置负载均衡

//注意不能和主启动类放在一个包下,所以另建一个包存放
@Configuration
public class Myrule {
    @Bean
    public IRule initRule() {
        return new RandomRule(); //随机
    }
}

主启动类添加注解加载配置

@RibbonClient(name = "cloud-payment-service", configuration = Myrule.class)

三. 服务调用

针对每个微服务自行封装所依赖服务的调用,常用方式有

1.Ribbon + RestTemplate

RestTemplate调用,使用 xxxforObject 或 xxxforEntity

@RestController
public class OrderController {

    public static final String PAYMENT_URL = "http://localhost:8001";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment) {
        return restTemplate.postForObject(PAYMENT_URL + "payment/create", payment, CommonResult.class);
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPayment(@PathVariable("id") Long id) {
        return restTemplate.getForObject(PAYMENT_URL + "payment/get/" + id, CommonResult.class);
    }
}
2.Dubbo(RPC)

RPC调用,使用@Reference注解

@Service
public class UserService {
	@Reference
	ProductService productService;	//注入其他服务
	...
}
3.OpenFeign(内部集成ribbon负载均衡+hsytrix熔断)

OpenFeign调用,启动类添加注解,使用@FeignClient指定要调用的提供方服务名

@EnableFeignClients
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")  //提供方服务名
public interface Service {
    @GetMapping(value = "/payment/get/{id}")
    Response<Payment> getPaymentById(@PathVariable("id") Long id);
}

超时设置

ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

logging:
  level:
    ml.ytooo.feignservice.Service: debug

配置日志

@Configuration
public class FeignLogConfig {
    @Bean
    public Logger.Level getLevel() {
        return Logger.Level.FULL;
    }
}

四. 服务治理(限流、熔断、降级)

  • 服务限流:配置服务承载能力,只允许系统能够承受的访问量进来,超出的会被丢弃
  • 服务熔断:下游服务故障,暂时切断,局部牺牲,保全整体
  • 服务降级:从服务负载考虑,停到一些非核心功能的服务,并给客户端返回友好提示
1. Hsytrix

降级

@EnableCircuitBreaker

针对单个核心业务的方法配置独立的降级规则

@HystrixCommand(fallbackMethod = "paymentInfo_TimeOut_Handler", commandProperties = {
	@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", 
	value = "3000")	
})//访问接口调用此方法如果超时3s,则调用回调方法
public String paymentInfo_TimeOut(Integer id) {
    return "线程池:  " + Thread.currentThread().getName() + " paymentInfo_TimeOut,id:  " + id + "\t" + "O(∩_∩)O哈哈~" + "  耗时(秒): " + time;
}

//超时回调方法
public String paymentInfo_TimeOut_Handler(Integer id) {
    return "线程池:  " + Thread.currentThread().getName() + " paymentInfo_TimeOut_Handler,id:  " + id + "\t" + "o(╥﹏╥)o";
}

针对普通的其他业务配置全局降级规则

@RestController
@Slf4j
@DefaultProperties(defaultFallback = "globle",commandProperties = {
	@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", 
	value = "3000")
})
public class Controller {
    @HystrixCommand
    @GetMapping("/timeout/{id}")
    public String paymentInfo_TimeOut(@PathVariable("id") Integer id) {
        String result = feignService.paymentInfo_TimeOut(id);
        log.info("*****result: " + result);
        return result;
    }
    public String globle() {
        return "全局";
    }
}

熔断

//=====服务熔断
@HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = { //
	@HystrixProperty(name = "circuitBreaker.enabled",value = "true"),// 是否开启断路器
	@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),// 请求次数
	@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), // 时间窗口期
 	@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"),// 失败率达到多少百分百后跳闸
})
public String paymentCircuitBreaker(@PathVariable("id") Integer id)
{
    if(id < 0)
    {
        throw new RuntimeException("******id 不能负数");
    }
    String serialNumber = IdUtil.simpleUUID();

    return Thread.currentThread().getName()+"\t"+"调用成功,流水号: " + serialNumber;
}
public String paymentCircuitBreaker_fallback(@PathVariable("id") Integer id) //熔断后降级方法
{
    return "id 不能负数,请稍后再试,/(ㄒoㄒ)/~~   id: " +id;
}
2. Sentinel

五. 服务网关

请求统一发送到网关,由网关转发,解决跨域、权限等问题

1. GateWay

动态路由

spring:
  application:
    name: cloud-gateaway-gateaway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true	#开启从注册中心动态创建路由的功能,利用微服务名进行路由
      routes:
      -	id: payment_routh	#路由id,没有固定规则,但要求统一
      	#uri: http://localhost:8001 匹配集群服务1的地址
      	uri: lb://cloud-payment-service	#匹配提供方服务名
      	predicates:	#断言,配置的属性可以作为转发请求的触发条件
      	- Path=/payment/get/**  #匹配需要的转发请求
      	- After=2021-02-21T15:51:37.485+08:00[Asia/Shanghai] #这个时间之后才能转发请求
      	- Cookie=name,value #请求需要携带指定Cookie才能访问

	  -	id: payment_routh
		#uri: http://localhost:8002 匹配集群服务2的地址	
      	uri: lb://cloud-payment-service	#如果匹配的是服务名,则网关会实现负载均衡
      	predicates:
      		Path=/payment/lb/**  

自定义过滤器,可以对请求转发前进行处理

filters:
  - AddRequestParamter=rowid,1024
@Component
@Slf4j
public class GatewayLogFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("=====================进入全局过滤器=====================");
        String name = exchange.getRequest().getQueryParams().getFirst("name");
        if (null == name) {
            exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

六. 分布式配置中心

对大量不同服务提供一套集中式、动态的外部总配置

1.SpringCloud Config

服务端

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
spring:
  application:
    name: cloud-config-center
  cloud:
    config:
      server:
        git:
          uri: https://github.com/youdmeng/cloud-config
          search-paths:
            - cloud-config
      label: master
@EnableConfigServer
@SpringBootApplication

客户端

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
</dependency>
spring:
  application:
    name: cloud-condig-client
  cloud:
    config:
      label: master  # 分支
      name: config # 配置文件名称
      profile: dev   # 版本
      uri: http://127.0.0.1:3344 # config服务端地址
2.Nacos

六. 分布式消息

1.RabbitMQ
2.RocketMQ
Java零基础——SpringCloud篇 SpringCloud就是微服务理念的一种具体落地实现方式,帮助微服务架构提供了必备的功能。目前开发中常用的落地实现有三种:Dubbo+Zookeeper 半自动化的微服务实现架构 (别的管理没有)、SpringCloud Netflix 一站式微服务架构、SpringCloud Alibaba 新的一站式微服务架构。 阅读详情

相关推荐

STM32 热敏电阻测量温度

1、硬件 STM32F103C8T6、热敏电阻传感器、OLED。 2、热敏电阻传感器的介绍

weixin_54721788的博客 1万+

Hystrix基本使用

Hystrix基本使用 Hystrix是Netflix开源的一款容错框架,包含常用的容错方法:线程隔离、信号量隔离、降级策略、熔断技术。 在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常大,依赖有很多不可控的因素,比如网络连接变慢,资源突然繁忙,暂时不可用,服务脱机等。我们要构建稳定、可靠的分布式系统,就必须要有这样一套容错方法 熔断触发降级 熔断的目的是为了起到保护作用 降级 主动降级,大促的时候关闭非核心服务。 被动降级,熔断降级、限流降级 降级 熔断是一种降级策略 一. 添加

xingxinggua9620的博客 1229

暴力破解pdf文档密码

相信小伙伴们都遇到这种情况;你收到了一些标题很吸引人的pdf文档 或者是重要数据泄露 学习资料总结,再或者是某机构的押题密卷,打开pdf却提示你要输入密码 因为不知道密码 只能弃罢。我就遇到过这种情况 网友发来了标题为某天一的押题密卷 ,我也想看看这个卷子的题怎么样,因为被设置了密码 我尝试用6到10位的纯数字组合来暴力破解这个pdf,结果三 四个小时都没找到正确的密码。有些网友为破解这个密码 请某宝某多来破解 也都没有破解成功。

shelter1234567的博客 1万+

Hystrix原理

在分布式系统中,一个微服务响应超时或异常,如果不进行处理,那么,前端不断请求,势必会造成链路地阻塞和资源地耗尽,会导致应用系统的其他微服务也无法使用,造成系统雪崩,为了防止这种情况的发生,hystrix提供了五种理论技术,如下:1.降级:当调用出现异常或超时等无法返回正常数据时,返回一个合理的结果或实现fallback方法,针对客户端而言。2.熔断:当失败率达到阈值自动触发降级,通俗理解为:熔断就是具有特定条件的降级,当出现熔断时在设定的时间内不在请求。

qq_40811542的博客 1756

西工大noj100题python2024第三季21-30

【代码】西工大noj100题python2024第三季21-30。

weixin_70523540的博客 1576

全球尺度遥感云计算平台:Google Earth Engine

Google Earth Engine(GEE)是一个基于 Google 云服务基础设施的遥感大数据分析平台,它结合 Google 强大的云计算能力与 NASA、ESA、NOAA 等机构的空间数据,用于在全球尺度解决一些非常重要的社会问题:森林退化、粮食安全、灾害预警、水资源管理、气候监测以及环境保护等。 GEE 官方宣传视频(版权归 Google 所有) Spacefan 的视频 ·303播放 发展背景 2008 年,手握 40 多年 LandSat 数据的美国地质调查局(USG...

qq_41240287的博客 5014

SpringCloud微服务

微服务(Microservice Architecture)是近几年流行的一种架构思想,引用 ThoughtWorks 公司的首席科学家 Martin Fowler于2014年提出的一段话来解释微服务:

锟斤拷 3799

Python爬虫实战:5分钟搞定东方财富网股票数据抓取(附完整代码)

本文详细介绍了如何利用Python爬虫技术,快速抓取东方财富网的实时股票数据。通过逆向分析其JSONP数据接口,构建了包含请求处理、数据清洗、分页调度及多格式存储的完整自动化采集系统,并提供了应对反爬策略与生产部署的进阶优化思路,附有可直接运行的完整代码。

weixin_29084231的博客 875

Java Spring Cloud框架

Java Spring Cloud框架

sanmansan的博客 821

【EPICS学习记录】根据官方教程创建一个IOC应用

参照官网给出的IOC创建教程逐步操作完成了一个IOC应用的创建,官网教程中有部分过程表述的不清晰,自己摸索之后完成了IOC的创建,并把流程记录下来。其中有一些操作不是很理解,有问题或者建议欢迎指正。

yifeng_H的博客 3661

ADS电路仿真方法综述:原理与应用

在射频与微波电路设计中,精确的仿真技术是验证性能的关键。ADS(Advanced Design System)作为行业标准工具,集成了多种仿真方法,适用于不同场景。本文将系统解析瞬态分析、谐波平衡(HB)、交流分析(AC)、直流分析(DC)、S参数、大信号SP(LSSP)及包络分析的原理、实现机制与应用场景。

u014344410的博客 480

Java-SpringCloud:Spring Cloud 是什么

ylbtech-Java-SpringCloud:Spring Cloud 是什么 1.返回顶部 1、 一、概念定义 Spring Cloud是一个微服务框架,相比Dubbo等RPC框架,Spring Cloud提供的全套的分布式系统解决方案。 Spring Cloud对微服务基础框架Netflix...

weixin_30614109的博客 133

PCIe协议之 Equalization篇 之 谈谈几种模式

对于两端有能力最高支持 32 GT/s 及以上速率的设备,如果把目标速度设置为 8 GT/s 或 16 GT/s 速率,是不建议采用 Bypass-Equalization-to-Highest-Rate 模式的,即便采用了,也不会针对 8 GT/s 或 16 GT/s 的目标速率进行 EQ。对于支持 32 GT/s 及以上速率的设备,其可能根本无需工作在 8 GT/s 或 16 GT/s 速率,这时再针对 8 GT/s 或 16 GT/s 速率进行 EQ,多少有点浪费。

那么菜的博客 562

Java从HelloWord到SpringCloud

Java基础、Javaweb、Maven应用、Spring应用、Springweb应用、Springwebmvc应用、Springboot应用、SpringCloud微服务应用、SpringGateway网关应用。

weixin_57911375的博客 447

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java技术栈面试系列+SpringCloud项目实战学习路线

❤️,持续更新...❤️解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。❤️。关注我,不迷路。❤️ 再小的收获x365天都会成就不一样的自己,一起学习,一起进步。不管你有没有java基础,我认为学习没有捷径,必须坚持理论+实操,才能真正收获一门知识。接下来的写作计划里会重点打造两个系列:《java面试题系列》+《SpringCloud项目实战系列》!

qq_24428851的博客 889

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JAVA学习之路(八)—— SpringCloud

微服务(Microservice Architecture) 是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。究竟什么是微服务呢?在此引用ThoughtWorks 公司的首席科学家 Martin Fowler 于2014年提出的一段话:原文:https://martinfowler.com/articles/microservices.html汉化:https://www.cnblogs.com/liuning8023/p/4493156.html。

m0_46747954的博客 1354

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SpringCloud与Java特性的联系

Spring框架、Java动态绑定、反射、泛型、动态代理

haosongmanzou的博客 199

Java有必要学springcloud,有了kubernetes你为什么还要用 springcloud

本来想的标题是 《springcloud 和 kubernetes 比较 》不过想着想着就放弃了,因为本来的出发点就是,有了kubernetes我为啥还要用springcloud ... 想了半天,完全没理由啊就好像机箱为啥买太阳神,就为了ROG全家桶?没理由啊第一次用springcloud 还是在 2017年,那时候微服务概念刚刚兴起 ( 也可能是孤陋寡闻的我刚刚听说 ),于是做了一个基于 Do...

weixin_39763953的博客 1357

Java基础、springboot、springcloud、docker系列目录

目录: 一、SpringBoot 系列一: 01、SpringBoot&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;am

cp026la的博客 3772

Java面试:SpringBoot与SpringCloud源码深度解析

本次面试通过层层深入的提问,全面考察了候选人对SpringBoot和SpringCloud源码的理解和实战能力。候选人的回答展现了扎实的理论基础和丰富的项目经验,面试官对候选人的表现给予了高度评价,认为其是团队中不可多得的技术人才。

南客先生的博客 1066

Java基础之Spring、SpringBoot、Spring Cloud、Spring MVC

因为换工作最近面试被问到很多Java基础知识,基本都忘记了,现在总结一下,以备以后查看。内容基本来源于网络。 1.Spring 2.Spring Boot 3.Spring Cloud 4.Spring MVC 5.总结

The night of summer 214

走进Java:创建SpringCloud项目

使用Spring Initializr(

热爱IT行业 929

Java SpringCloud系列(前言) —— SpringCloud简介

一、前言 各位同学,又是时隔两个月,由于近期项目紧张,所以一直没有时间来博客上进行技术整理,这次给大家带来的是一个比较流行的技术——微服务,本篇文章只是对什么是微服务以及SpringCloud做一些简介,让同学们有一个初步的了解,在后面的文章中,我会对SpringCloud的整体以及会具体讲解关于SpringCloud中的Eureka、Hystrix、Ribbon、Config、Fegin...

beyondLi71的博客 4222

Java程序员现在还有必要学习SpringCloud吗?

SpringCloud想必每一位Java程序员都不会陌生,很多人一度把他称之为“微服务全家桶”,它通过简单的注解,就能快速地架构微服务,这也是SpringCloud的最大优势。但是最近有去面试过的朋友就会发现,现在面试你要是没有SpringCloud经验基本面试机会都不会有。

weixin_50205273的博客 201
上一篇: Javaweb-Vue-Springboot-前后端分离交互
下一篇: Javaweb-ES6基础
codfishXY
博客等级 码龄9年 25粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值