SpringCloud简介及使用

2023-11-17

SpringCloud简介

Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的
微服务:就是把一个单体项目,拆分为多个微服务,每个微服务可以独立技术选型,独立开发,独立部署,独立运维.并且多个服务相互协调,相互配合,最终完成用户的价值.
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署
在这里插入图片描述
五大重要组件
服务发现——Netflix Eureka
客服端负载均衡——Netflix Ribbon/Feign
服务网关——Netflix Zuul
断路器——Netflix Hystrix
分布式配置——Spring Cloud Config

Spring cloud入门-搭建环境( 以maven多模块化的方法搭建)

1.创建Maven普通项目
最外层pom.xml:
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    <springboot.version>2.0.5.RELEASE</springboot.version>
</properties>

<dependencyManagement>
    <dependencies>
	    <dependency>
		    <groupId>org.springframework.cloud</groupId>
		    <artifactId>spring-cloud-dependencies</artifactId>
		    <version>${spring-cloud.version}</version>
		    <type>pom</type>
		    <scope>import</scope>
	    </dependency>
	    <dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-dependencies</artifactId>
		    <version>${springboot.version}</version>
		    <type>pom</type>
		    <scope>import</scope>
	    </dependency>
    </dependencies>
</dependencyManagement>
2.Spring cloud-Eureka注册中心

Eureka是netflix的一个子模块,也是核心模块之一,Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移
服务注册与发现对于微服务架构来说是非常重要的,有了服务发现和注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务,而不需要修改服务调用的配置文件了

1.创建Maven普通模块User_eureka_7001
2.导入jar包
<!--springboot支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>

<!--Eureka服务端支持-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3.创建application.yml
server:
  port: 7001
eureka:
  instance:
    hostname: localhost
  client:
      registerWithEureka: false #是否要注册到eureka
      fetchRegistry: false #表示是否从Eureka Server获取注册信息
serviceUrl:
  defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机配置
4.创建启动类
@SpringBootApplication
@EnableEurekaServer//标识是eureka服务端
public class EnrekaServerApplication_7001 {
public static void main(String[] args) {
        SpringApplication.run(EnrekaServerApplication_7001.class);
    }
}
5.启动入库类访问localhost:7001

在这里插入图片描述

3.Spring cloud-服务提供者
1.创建一个模块存放公共代码User_interface

例:
在这里插入图片描述

2.创建服务提供者模块User_provider_8001
3.导入jar包和公共模块依赖
<dependencies>
    <!--公共代码依赖-->
    <dependency>
	    <groupId>cn.itsource.springcloud</groupId>
	    <artifactId>User_interface</artifactId>
	    <version>1.0-SNAPSHOT</version>
    </dependency>
    
    <!--springboot支持-->
    <dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    
    <!--eureka客户端支持 -->
    <dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
4.创建application.yml
server:
  port: 8001
spring:
  application:
     name: USER-PROVIDER #不要使用下划线
eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka #告诉服务提供者要把服务注册到哪儿
instance:
    prefer-ip-address: true #显示客户端真实ip
5.创建启动类
@SpringBootApplication
@EnableEurekaClient //表示是eureka的客户端
public class UserProviderApplication_8001 {
public static void main(String[] args) {
        SpringApplication.run(UserProviderApplication_8001.class);
    }
}
6.创建controller
@RestController
@RequestMapping("/provider")
public class UserController {

@Autowired
private IUserService userService;

@RequestMapping("/user/{id}") //user/1
public User getUser(@PathVariable("id") Long id) {

// 正常应该调用service获取用户,现在模拟一下
return new User(id, "zs");
    }
}
4.Spring cloud-服务消费者
1.创建Maven模块项目 User_consumer_9001
2.导jar包和公共模块依赖
<!--公共代码依赖-->
<dependency>
    <groupId>cn.itsource.springcloud</groupId>
    <artifactId>User_interface</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

<!--springboot支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
</dependency>
3.创建application.yml
server:
  port: 9001
spring:
  application:
    name: USER_CONSUMER
4.创建启动类
@SpringBootApplication
public class UserConsumerAppliction_9001 {
public static void main(String[] args) {
        SpringApplication.run(UserConsumerAppliction_9001.class);
    }
}
5.创建一个配置bean的类CfgBean
@Configuration // <beans></beans>
public class CfgBean {

    @Bean //<bean class="org.springframework.web.client.RestTemplate"></bean>
    public RestTemplate getRestTemplate(){
    return new RestTemplate();
        }
}
6.创建Controller层
@RestController
@RequestMapping("/consumer")
public class UserController {

    //多个方法调用只需改一处就ok
    public static  final String URL_PREFIX = "http://localhost:8001";
    
    @Autowired
    private RestTemplate restTemplate;
    
    @RequestMapping("/user/{id}")
    public User getUser(@PathVariable("id")Long id){
	    //调用远程服务 http请求
	    String url = URL_PREFIX+"/provider/user/"+id;
	    return restTemplate.getForObject(url,User.class );
	}
}

Spring cloud入门加强-注册中心集群

如果只有一个注册中心服务器,会存在单点故障所以要集群

1.搭建集群

1.映射hosts 模拟域名解析 C:WindowsSystem32driversetc
127.0.0.1       eureka-7001.com
127.0.0.1       eureka-7002.com
2.创建User_eureka_7002 ,与7001一样
3.配置yml

7001项目的application.yml

 server:
      port: 7001
    eureka:
      instance:
        hostname: eureka-7001.com
      client:
        registerWithEureka: false #是否要注册到eureka
        fetchRegistry: false #表示是否从Eureka Server获取注册信息
        serviceUrl:
          #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机配置
          defaultZone: http://eureka-7002.com:7002/eureka/ #集群配置,如果有多个,有逗号分割,不要包含自己

7002项目的application.yml

server:
  port: 7002
eureka:
  instance:
    hostname: eureka-7002.com
  client:
    registerWithEureka: false #是否要注册到eureka
    fetchRegistry: false #表示是否从Eureka Server获取注册信息
    serviceUrl:
      #defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #单机配置
      defaultZone: http://eureka-7001.com:7001/eureka/ #集群配置,如果有多个,有逗号分割,不要包含自己
4.启动测试

在这里插入图片描述在这里插入图片描述

5.服务提供者8001的yml修改
server:
  port: 8001
spring:
  application:
name: user-provider #不要使用下划线
eureka:
  client:
    service-url:
      #defaultZone: http://localhost:7001/eureka #告诉服务提供者要把服务注册到哪儿
      defaultZone: http://eureka-7001.com:7001/eureka,http://eureka-7002.com:7002/eureka
instance:
  prefer-ip-address: true #显示客户端真实ip

2.Spring cloud入门加强-服务消费者(负载均衡)

为了提供并发量,有时同一个服务提供者可以部署多个。这个客户端在调用时要根据一定的负责均衡策略完成负载调用

Spring cloud中常见负载均衡实现技术

1.Ribbon负载均衡

Ribbon是Netflix发布的云中间层服务开源项目,主要功能是提供客户端负载均衡算法。Ribbon客户端组件提供一系列完善的配置项,如,连接超时,重试等

1.创建项目 User_provider_8002,并注册到注册中心
2.User_consumer_9001导入ribbon的jar包
<!--客户端负载均衡实现 ribbon-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3.修改User_consumer_9001的yml
server:
  port: 9001
eureka:
  client:
    registerWithEureka: false #不注册到Eureka,不在注册中心显示
    service-url:
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka-7001.com:7001/eureka,http://eureka-7002.com:7002/eureka
4.启动类
@SpringBootApplication
@EnableEurekaClient
public class UserConsumerApplicaton_9001 {
public static void main(String[] args) {
        SpringApplication.run(UserConsumerApplicaton_9001.class);
    }
}
5.修改User_consumer_9001的config包的CfgBean类
@Configuration
public class CfgBean {

@Bean
 @LoadBalanced //开启负载均衡
public RestTemplate getRestTemplate(){
return  new RestTemplate();
    }
}
6.修改Controller
@RestController
@RequestMapping("/consumer")
public class UserController {

//多个方法调用只需改一处就ok
    //public static  final String URL_PREFIX = "http://localhost:8001";
public static  final String URL_PREFIX ="http://USER-PROVIDER"; //通过服务名从注册中心获取服务列表,通过负载均衡调用

@Autowired
private RestTemplate restTemplate;

@RequestMapping("/user/{id}")
public User getUser(@PathVariable("id")Long id){
//调用远程服务 http请求
String url = URL_PREFIX+"/provider/user/"+id;
return restTemplate.getForObject(url,User.class );
    }
}
2.Feign负载均衡

前面的可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻
在这里插入图片描述
Feign是以接口方式进行调用,而不是通过RestTemplate来调用,feign底层还是ribbo,它进行了封装,

1.创建 User_consum_9002模块
2.到jar包
<dependencies>
    <!--公共代码依赖-->
    <dependency>
	    <groupId>cn.itsource.springcloud</groupId>
	    <artifactId>User_interface</artifactId>
	    <version>1.0-SNAPSHOT</version>
    </dependency>
    
    <!--springboot支持-->
    <dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    
    <!--eureka客户端,服务消费者也要从注册中心获取可用服务列表-->
    <dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    <!--feign的支持-->
    <dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>
3.创建application.yml
server:
  port: 9002
eureka:
  client:
    registerWithEureka: false #不注册到Eureka,不在注册中心显示
    service-url:
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka-7001.com:7001/eureka,http://eureka-7002.com:7002/eureka
4.创建启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = "cn.itsource.microservice") //不在当前包下面
public class UserConsumerFeign9002Application {

	public static void main(String[] args) {
		SpringApplication.run(UserConsumerFeign9002Application.class, args);
	}
}
5.创建一个接口来调用服务
//调用服务名字
@FeignClient(value = "USER-PROVIDER")
public interface UserCilent {
    @RequestMapping("/provider/user/{id}") //user/1
    User getUser(@PathVariable("id") Long id);
}
6.Controller层
@RestController
@RequestMapping("/consumer")
public class UserController {

    @Autowired
    private UserCilent userCilent;
    
    @RequestMapping("/user/{id}")
    public User getUser(@PathVariable("id")Long id){
            System.out.println(userCilent.getClass());
    		return userCilent.getUser(id);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringCloud简介及使用 的相关文章

随机推荐

  • C#编程中遇到的一些异常及部分异常的解决方法

    以下内容是在本人在C 编程中遇到的异常 针对部分异常给出了解决办法 但是此解决方法是否真的好用 有待进一步考证 仅供参考 1 System Invalid Operation Exception 类型的未经处理的异常 出现在System W
  • itext5创建pdf表格及遇到的一些问题

    0 核心依赖 1 设置页眉图片及下划线 2 document参数传递 3 生成的pdf文件转base64编码 4 平方 上标显示问题 5 压缩包的文件流InputStream输出文件 6 itext5进行pdf合并 0 核心依赖
  • 病例对照研究中—两组组间比较—的统计方法选择,基于R语言

    医学中最常设计的试验就是病例对照研究 以探究某一干预措施是否有改善性 需要根据基线的情况 选择相应的方法 试验数据如下 声明 该数据是随机自动生成的 虚拟的 该计算结果不代表任何真实的事情 该数据不适用于现实世界 数据由试验组长病程10名
  • 模型选择、欠拟合和过拟合

    训练误差 training error 模型在训练数据集上表现出的误差 泛化误差 generalization error 模型在任意一个测试数据样本上表现出的误差的期望 常常通过测试数据集上的误差来近似 机器学习模型应该关注泛化误差 模型
  • 简单的开集电极保护电路

    开集电极方式输出经常用于需要向外强力驱动输出数字或者脉冲缓冲信号的情况 在严酷的工作环境下比如汽车系统 这些信号需要被保护用来抵抗那些加在输入信号上可以立即损坏三极管的不可预知的短路信号 通常在开集电极的输出端嵌入一系列电阻的方法也有它的缺
  • 关于"Ueditor 请求后台配置项http错误,上传功能将不能正常使用"的解决办法

    这两天用到Ueditor1 4 3 3的NET版本时 也遇上了这个问题 在网上查了一下 大多都是JS或者JAVA用户遇到的解决办法 另外少部份NET用户遇到 但按他们的方法试过后都不行 再说了按错误提示与自己网站的实际目录对比了一下 设置是
  • 爬虫学得好,然后呢?最新Python人工智能就业班课程

    课程链接 私信 达内 课程介绍 达内最新Python 人工智能就业班课程目录 1 Python核心 2 面向对象程序设计 3 Python高级 4 阶段项目实战 5 Linux操作系统 6 数据处理 7 网络并发编程 8 阶段项目实战 9
  • C++ 最长回文串

    已知一个只包括大小写字符的字符串 求用该字符串中的字符可以生成的最长回文字符串的长度 例如 s abccccddaa 可生成的最长回文字符串长度为9 如dccaaaccd adccbccda acdcacdca等 都是正确的 利用字符哈希方
  • 合肥工业大学密码学课设-RSA

    作者简介 CSDN内容合伙人 信息安全专业在校大学生 系列专栏 课设 密码学课设 RSA 新人博主 欢迎点赞收藏关注 会回访 舞台再大 你不上台 永远是个观众 平台再好 你不参与 永远是局外人 能力再大 你不行动 只能看别人成功 没有人会关
  • windows操作系统基础总结

    文章目录 引言 一 文件目录管理 二 网络配置 三 用户和群组 四 进程 五 核心文件 六 日志审核 七 登录日志 八 恶意行为跟踪 九 日志分析工具 引言 对windows下常见的dos命令进行总结 以及windows操作系统基础知识进行
  • Linux Centos7 测试硬盘IO速度

    1 测试磁盘写速度 time dd if dev zero of test dd bs 1M count 2000 2 测试磁盘读速度 time dd if test dd of dev null bs 1M
  • 云计算:优势与未来趋势

    文章目录 前言 一 云计算的优势 1 降低IT成本 2 提高工作效率 3 提高业务的可靠性和稳定性 4 提升安全性 二 未来发展趋势 1 AI与云计算的融合 2 边缘计算的发展 3 多云的趋势 4 服务器和存储的创新 三 行业应用案例 1
  • spring ioc流程

    spring 大体流程 spring的核心是ioc 所有的操作都是基于ioc来完成的 ioc是一个容器 为了解决类跟类之间的耦合问题 就是说 有一个A类 有一个B类 public class A B b new B public class
  • 理解图像卷积操作的意义

    数字信号处理中卷积 卷积一词最开始出现在信号与线性系统中 信号与线性系统中讨论的就是信号经过一个线性系统以后发生的变化 由于现实情况中常常是一个信号前一时刻的输出影响着这一时刻的输出 所在一般利用系统的单位响应与系统的输入求卷积 以求得系统
  • STM32MP153 Ubuntu系统移植到ST的STM32MP157-DK2记录

    米尔科技STM32MP153 Ubuntu系统移植到ST的STM32MP157 DK2记录 ubuntu18 ros系统 边缘计算 先上最终效果 核心思想 1 解包 挂载 先把米尔科技提供的ubuntu文件系统解包 然后挂载到一个文件夹mn
  • mybatis与mysql的Json格式映射-使用JSONObject

    mybatis与mysql的Json格式映射 使用JSONObject codestn 程序方块 mybatis与mysql的Json格式映射 使用JSONObject JavaBean类 1 2 3 4 5 6 7 public clas
  • 江西南昌电气机械三维测量仪机械零件3d扫描-CASAIM中科广电

    精密机械零部件是指机械设备中起到特定功能的零件 其制造精度要求非常高 这些零部件通常由金属 塑料或陶瓷等材料制成 常见的精密机械零部件包括齿轮 轴承 螺丝 活塞 阀门等 精密机械零部件的制造需要高精度的加工设备和工艺 以确保其尺寸 形状和表
  • wps指定路径不存在怎么办_WPS说目录不存在

    网友提问 安装wps之后 将其打开报错文件 打开的时候提示wps目录不存在的现象 并且将其卸载也是于事无补 那wps临时目录不存在提示无法卸载是怎么回事 下面就来看看wps临时目录不存在提示该如何解决 故障解决 一 wps应用程序本身的故障
  • Python pathlib库路径,使用sorted(中文、字母和数字混合名称)定义排序,解决1位数、2位数、3位数的数字排序问题

    Path rgolb 当路径指向一个目录时 列出该路径下所有子路径 默认升序排列 输出为 使用sorted和lambda定义排序 中文 字母和数字混合名称的排序 输出
  • SpringCloud简介及使用

    SpringCloud简介 Spring cloud是一个基于Spring Boot实现的服务治理工具包 在微服务架构中用于管理和协调服务的 微服务 就是把一个单体项目 拆分为多个微服务 每个微服务可以独立技术选型 独立开发 独立部署 独立