热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud粗理解

定义SpringCloud是一系列框架的有序集合。SpringCloudEureka、SpringCloudRibbon、SpringCloudFeign、SpringClou
定义

Spring Cloud是一系列框架的有序集合。

Spring Cloud Eureka、Spring Cloud Ribbon、Spring Cloud Feign、Spring Cloud Hystrix、Spring Cloud Config、Spring Cloud Zuul、Spring Cloud Bus

它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot

的开发风格做到一键启动和部署。

1.基于Spring

Spring Boot基于Spring,所以Spring有的优点Spring Boot也有,不需要开发人员去学习一个全新的框架,学习门槛相对降低。

 

2. 快速编码

Spring Boot的依赖包都是基于maven的pom文件提供的,而Spring Boot本身就集成了特别多的第三方框架。以前开发Spring应用时,需要用到的第三方框架的库都需要开发人员一个一个去寻找;现在不需要了,有些可能只需引入一个pom.xml,就能把大量需要用到的第三方库自动引入到项目中。所以减少了开发工作量,实现快速编码。

 

3. 模块化

基于Spring Boot开发的项目可以非常简单的实现模块化编程,这样的话可以非常有效的实现项目的分工合作,减少开发过程中的代码冲突。模块化编程还可以非常高效的实现减少代码的改动量,按需修改模块,降低生产发生事故概率。

 

4. 配置简单

在文章开头就说了Spring Boot摈弃了繁琐的xml配置文件,大量的配置文件经常是导致生产事故的原因。Spring Boot大量采用yml形式的配置文件再加上相应的Annotation,从而大大减少了配置文件的个数,因为以前的Spring应用引入一个第三方框架说不定就要添加一个配置文件。举个例子,比如项目中要引入数据库连接池HikariCP,就需要添加一个关于HikariCP数据库连接池的配置文件,但是使用了Spring Boot采用HikariCP可能就只需要那么几行配置就可以了,因为Spring Boot默认集成HikariCP数据库连接池,提供了很多默认的配置。

 

5. 便捷部署

Spring Boot天生就是为了简单、快捷部署而生。SpringBoot内嵌了Tomcat,不需要额外部署应用服务器Tomcat,只需简单一个Java运行环境即可,而且启动的命令也非常简单:java –jar xxx-release.jar。同时Spring Boot结合现在非常火的技术 Docker、Kubernetes可以快速实现集群部署。

 

6. 有效监控

Spring Boot集成了非常高效的监控框架,只要简单引入对spring-boot-start-actuator的依赖,就可以实现对服务性能的监控。结合Spring Cloud就可以实现对整个微服务链路的全天候监控

Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

核心组件

Spring Cloud Netflix组件

组件名称 作用
Eureka 服务注册中心
Ribbon 客户端负载均衡
Feign 声明式服务调用
Hystrix 客户端容错保护
Zuul API服务网关

Spring Cloud Alibaba组件
组件名称 作用
Nacos 服务注册中心
Sentinel 客户端容错保护

Spring Cloud原生及其他组件
组件 作用
Consul 服务注册中心
Config 分布式配置中心
Gateway API服务网关

Sleuth/Zipkin 分布式链路追踪

自己搭建一个服务调用可能存在的问题包括、

1、将微服务的请求路径硬编码到Java代码中

2、对微服务调用的负载均衡(一个微服务为了实现高可用,往往有多个节点,一个请求过来,哪一个节点来响应)

3、加入API网关(方便前端调用,不需要知道不同服务的地址)

4、配置的统一管理(每一个服务都有一个配置,比较繁琐)

5、链路追踪(为了方便日志管理,一个请求走了那些服务)

上面的组件就是为了解决这些问题而存在的

注册中心

1. 服务发现: 服务注册/反注册:保存服务提供者和服务调用者的信息 服务订阅/取消订阅:服务调用者订阅服务提供者的信息,好有实时推送的功能 服务路由(可选):具

有筛选整合服务提供者的能力。

2. 服务配置: 配置订阅:服务提供者和服务调用者订阅微服务相关的配置 配置下发:主动将配置推送给服务提供者和服务调用者

3. 服务健康检测 检测服务提供者的健康情况

服务提供者与服务消费者概念

服务提供者:服务的被调用方(即,为其他服务提供服务的服务);

服务消费者:服务的调用方(即,依赖其他服务的服务);

对于多个服务既可以作为服务的提供方也可以作为消费者,关注业务本身、服务拆解、服务架构、服务划分等


使用eureka的步骤


1.搭建eureka server

1.1创建工程

1.2导入坐标

1.3配置application.yml

1.4配置启动类

2.将服务提供者注册到eureka server上

2.1引入eureka client 的坐标

2.2修改application.yml添加eureka server的信息

2.3修改启动类,添加服务发现的支持(可选)

@EnableEurekaClient
@EnableDiscoveryClient二选一,新版本可不写

3.服务消费者通过注册中心获取服务列表,并调用

Eureka的元数据有两种:标准元数据和自定义元数据。

标准元数据:主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注 册表中,用于服务之间的调用。

自定义元数据:可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这 些元数据可以在远程客户端中访问

3.1引坐标

3.2改配置

3.3在controller中注入restTemplate对象

@RestController
@RequestMapping("/order")
public class OrderController {//注入restTemplate对象@Autowiredprivate RestTemplate restTemplate;/*** 注入DiscoveryClient :* springcloud提供的获取原数组的工具类* 调用方法获取服务的元数据信息**/@Autowiredprivate DiscoveryClient discoveryClient;/*** 基于ribbon的形式调用远程微服务* 1.使用@LoadBalanced声明RestTemplate* 2.使用服务名称替换ip地址*/@RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)public Product findById(@PathVariable Long id) {Product product = null;product = restTemplate.getForObject("http://service-product/product/1",Product.class);return product;}}

@RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)public Product findById(@PathVariable Long id) {//调用discoveryClient方法//已调用服务名称获取所有的元数据List instances = discoveryClient.getInstances("service-product");//获取唯一的一个元数据ServiceInstance instance = instances.get(0);//根据元数据中的主机地址和端口号拼接请求微服务的URLProduct product = null;URI url=URI.create(instance.getUri()+"/product/1");//如何调用商品服务?product = restTemplate.getForObject("http://"+instance.getHost()+":"+instance.getPort()+"/product/1",Product.class);return product;}

两种方式,注意使用下面这种方式时,启动类中不要添加@LoadBlanced注解

3.4启动类中添加restTemplate

@SpringBootApplication
@EntityScan("cn.itcast.order.entity")
public class OrderApplication {/*** 使用spring提供的RestTemplate发送http请求到商品服务* 1.创建RestTemplate对象交给容器管理* 2.在使用的时候,调用其方法完成操作 (getXX,postxxx)* * @LoadBalanced : 是ribbon提供的负载均衡的注解*/@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(OrderApplication.class,args);}
}

Eureka 高可用

 


推荐阅读
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法
    在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。 ... [详细]
  • Apache Maven 3.5.0 版本的发布带来了多项重要特性和性能优化。该版本不仅改进了构建过程的效率,还增强了对复杂项目结构的支持。通过引入新的依赖解析机制和优化的插件系统,Maven 3.5.0 在提升用户体验的同时,也确保了更高的稳定性和兼容性。此外,该版本还修复了多个已知问题,进一步提升了整体的可靠性和安全性。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 在多模块项目中,项目A作为一个独立的工具包,不依赖于任何第三方库。其目录结构如下:`--src--main--java--resources`。当将项目A打包成JAR文件后,发现无法正确访问`resources`目录下的文件资源。这一问题可能源于JAR文件的构建配置或类路径设置不当,需要仔细检查Maven或Gradle的构建脚本,确保资源文件被正确包含并加载。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • 如何构建基于Spring MVC框架的Java Web应用项目
    在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ... [详细]
  • 深入解析Spring Boot自动配置机制及其核心原理
    Spring Boot 的自动配置机制是其核心特性之一,旨在简化开发过程并提高效率。本文将深入探讨这一机制的工作原理,解释其如何通过智能化的类路径扫描和条件注解实现自动装配。通过对 Spring Boot 自动配置的详细解析,读者将能够更好地理解和应用这一强大功能,从而在实际项目中更加高效地利用 Spring Boot。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • 在Windows环境中优化提交Spark任务的方法与实践
    在Windows环境中优化提交Spark任务的方法与实践 ... [详细]
  • 在Java应用程序中调用`response.getStatus()`方法时遇到了`NoSuchMethodError`异常,经过分析,初步判断为依赖冲突问题。通过检查项目依赖树发现,当前项目版本与某些库的版本不兼容,导致该方法无法被正确识别。建议通过更新相关依赖版本或使用依赖管理工具(如Maven或Gradle)来解决此问题,确保所有依赖项版本一致且兼容。 ... [详细]
author-avatar
勤劳的蛇zhong_138
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有