一:什么是SpringBoot

1. SpringBoot不是一个全新的框架,而是对Spring框架的一个封装。所以,以前Spring可以做的事情,现在用SpringBoot都可以做。

2. SpringBoot整合了很多优秀的框架,用来简化Spring应用搭建和开发过程,不用我们自己手动去写一堆xml进行Spring Bean配置。

3. 一般情况下,一个SpringBoot应用 = 一个微服务 = 一个模块 。

SpringBoot的核心功能:

1. 独立运行:SpringBoot开发的应用可以以JRA包的形式独立运行,运行一个SpringBoot应用只需通过 java –jar xxxx.jar 来运行;2. 内嵌容器:SpringBoot内嵌了多个WEB容器,如:Tomcat、Jetty、Undertow,所以可以使用非WAR包形式进行项目部署;3. 自动starter依赖:SpringBoot提供了一系列的starter来简化Maven的依赖加载。starter是一组方便的依赖关系描述符,它将常用的依赖分组并将其合并到一个依赖中,这样就可以一次性将相关依赖添加到Maven或Gradle中;4. 自动配置及按需加载:SpringBoot会根据在类路径中的JAR包和类,自动将类注入到SpringBoot的上下文中,极大地减少配置的使用;5. 应用监控:SpringBoot提供基于http、ssh、telnet的监控方式,对运行时的项目提供生产级别的服务监控和健康检测;6. 无代码生成/无需编写XML配置:SpringBoot不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring4.x提倡使用Java配置和注解组合,无需编写任何xml配置即可实现Spring的所有配置功能;

(原文链接:https://blog.csdn.net/goodjava2007/article/details/122859472)

二:什么是springcloud

1. Spring Cloud就是微服务系统架构的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶。 2. 在平时我们构建微服务的过程中需要做如服务发现注册、配置中心、负载均衡、断路器、数据监控等操作,而Spring Cloud 为我们提供了一套简易的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务项目的构建。

三:springboot与springcloud有啥关系

1. 关系:SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。2. 区别: SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系。

四:什么是微服务

1. 简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。 2. 将一个大的项目,按照需求(业务服务)模块拆解成一个个独立小模块(微小服务),然后独立部署,它们之间独立又相互调用。

3. 将子系统拆成一个一个的jar包运行就是微服务。

五:什么是分布式

 1. 将各个组件分开部署,某个组件占一个服务器,互相独立,互相调用,可以将组件的功能发挥强大。  2. 一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)。优点: 1. 模块之间独立,各做各的事,便于扩展,复用性高。 2. 高吞吐量。某个任务需要一个机器运行20个小时,将该任务用10台机器的分布式跑(将这个任务拆分成10个小任务),可能2个小时就跑完了。

六:什么是集群

1. 同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)优点: 1. 通过多台计算机完成同一个工作,达到更高的效率。 2. 两机或多机内容、工作过程等完全一样。如果一台死机,另一台可以起作用。

七:分布式与集群

1. 集群:多个服务器部署同一个项目。

2. 分布式: 多个服务器部署一个项目的不同模块。

3. 集群和分布式并不冲突,可以有分布式集群。

(原文链接: http://t.csdn.cn/TfPsQ)

八:搭建Spring Boot+Spring Cloud微服务

目标:创建两个Spring Boot项目(例:spring-cloud-a、spring-cloud-b),利用SpringCloud(例:spring-cloud-eureka)来将两个服务关联起来,使其可以互相调用。

1. 搭建eureka注册中心

SpringCloud采用的是Eureka来做服务的注册中心,类似于dubbo采用的是zookeeper作为注册中心一样。

(1)创建一个新的springboot项目,名称为spring-cloud-eureka,端口为8003

(2)pom.xml里添加:

1.8

UTF-8

UTF-8

2.3.7.RELEASE

Hoxton.SR9

org.springframework.cloud

spring-cloud-starter-netflix-eureka-server

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

org.springframework.cloud

spring-cloud-dependencies

${spring-cloud.version}

pom

import

org.springframework.boot

spring-boot-dependencies

${spring-boot.version}

pom

import

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

1.8

1.8

UTF-8

org.springframework.boot

spring-boot-maven-plugin

2.3.7.RELEASE

com.dxz.eurekaserver.EurekaServerApplication

repackage

repackage

(3)在resources下创建配置文件application.properties(或 application.yml),如果是application.properties则里面添加如下内容:

spring.application.name=my

server.port=8003

#自我保护默认关闭

eureka.server.enable-self-preservation: false

#不向注册中心注册自己

eureka.client.register-with-eureka=false

#不需要检索服务

eureka.client.fetch-registry=false

#eureka的注册中心地址

eureka.client.serviceUrl.defaultZone=http://localhost:8003/eureka/

如果是application.yml则里面添加内容为:

spring:

application:

name: my

server:

port: 8003

#自我保护默认关闭

eureka:

server:

enable-self-preservation: false

#不向注册中心注册自己

client:

register-with-eureka: false

#不需要检索服务

fetch-registry: false

#eureka的注册中心地址

serviceUrl:

defaultZone: http://localhost:8003/eureka/

(4) 在springboot启动的入口类加入一个注解@EnableEurekaServer,即可将该项目作为服务注册中心,加入注解@SpringBootApplication使项目可以被启动。

(5) 运行启动类来启动该项目,浏览器访问http:localhost:8003可以看到Eureka登录页。

 

 现在注册中心还看不到任何一个应用,需要将spring-cloud-a、spring-cloud-b注册进来。

 2. 创建spring-cloud-a、spring-cloud-b

(1)spring-cloud-a、spring-cloud-b的pom.xml里添加spring-cloud-eureka一样的配置

(2)在spring-cloud-a 的resources下创建配置文件application.properties,里面添加如下内容:

spring.application.name=spring-cloud-a

server.port=8001

#eureka的注册中心地址

eureka.client.serviceUrl.defaultZone=http://localhost:8003/eureka/

在spring-cloud-b 的resource下创建配置文件application.properties,里面添加内容如下:

spring.application.name=spring-cloud-b

server.port=8002

#eureka的注册中心地址

eureka.client.serviceUrl.defaultZone=http://localhost:8003/eureka/

(3)在springboot启动的入口类加入一个注解@EnableDiscoveryClient,即可完成注册服务。

 (4)在本地 spring-cloud-a 、 spring-cloud-b、spring-cloud-eureka都启动的前提下,访问eureka注册中心,能看到新加入的两个服务。

 3. 远程调用服务(spring-cloud-a、spring-cloud-b之间相互调用)

远程调用服务的方式有两种,分别为restTemplate和feign

方式一:restTemplate:主要通过ribbon使客户端做到负载均衡,类似nginx反向代理,需要手动启动(存在问题:a.代码可读性差,编程体验不统一  b. 参数复杂URL难以维护)

方式二:feign:可以简化客户端代码,默认集成了ribbon实现了负载均衡的效果,并和Eureka结合,自动启动(Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送)

(原文链接: https://blog.csdn.net/m0_54849806/article/details/123838479)

这里我们选取方式二具体举例:

1. 在 spring-cloud-a、spring-cloud-b两个系统的pom.xml里都添加依赖:

org.springframework.cloud

spring-cloud-starter-openfeign

2. 在springboot启动的入口类加入一个注解@EnableFeignClients(在需要调用的系统里添加@EnableFeignClients,这里是我 a系统 调用 b系统 的方法,所以在a系统里添加)

 在a系统里添加 调用b系统方法的接口:

 在a系统里添加测试controller (a系统的getStr方法调用b系统的getBStr方法) : 

在b系统里添加controller测试类 :

浏览器访问a系统的getStr方法,调用(远程b系统)成功:

完毕!

我的demo请下载:https://download.csdn.net/download/m0_37951794/87269664

如果spring-cloud-a与spring-cloud-b部署在不同服务器上,需要解决a、b之间跨域问题,请参考:

SpringBoot+SpringCloud微服务搭建全过程(二)_他山之石女士的博客-CSDN博客

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。