SpringBoot+SpringCloud微服务搭建全过程(一)

news2024/11/25 12:38:18

一:什么是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里添加:

 <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
 
    <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>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.dxz.eurekaserver.EurekaServerApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
 

(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里都添加依赖:

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

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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java项目_第171期ssm房屋租赁系统_计算机毕业设计

java项目_第171期ssm房屋租赁系统_计算机毕业设计 【源码请到下载专栏下载】 今天分享的项目是《ssm房屋租赁系统》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,查看房屋租赁情况&#xff0c;并且进行租赁。 还可以登录到后台&#xff0c;进行租赁订单管理…

【20221212】【每日一题】一和零

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 思路&#xff1a;背包有两个维度&#xff1a;m、n。不…

【工作项目总结】交易系统

写工作项目总结的目的就是,明明自己工作中负责了一些模块也写了很多代码,解决了不少坑。但是面试的时候,总是记不起来在自己过往做的项目中,该项目的具体亮点难点分别是什么,有哪些令人印象深刻的问题,以及是如何解决它的。那么记录问题与解决思维就是我创作这个工作复盘…

C#连接蓝牙设备

看过各种博主的文章&#xff0c;发现基本上都是属于误人子弟的狗屁文章&#xff0c;踩过各种坑最终实现了此功能。 1.思路 电脑蓝牙和蓝牙模块配对连接 和我们平时正常连接蓝牙设备一样&#xff0c;需要先搜索附近的蓝牙设备&#xff0c;然后根据设备名来选择要连接的蓝牙模块…

VSCODE 系列(六)使用Plantuml插件制作UML类图

文章目录前言下载和安装支持文件格式支持绘制类型导出语法申报要素UML类图关系参考例子参考前言 软件设计中&#xff0c;有好几种图需要画&#xff0c;比如流程图、类图、组件图等&#xff0c;我知道大部分人画流程图一般都会用微软的visio绘制&#xff0c;visio画图有个不好的…

[附源码]计算机毕业设计高校实验室仪器设备管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

Java学习笔记 --- 反射

一、反射机制 Java Reflection 1、反射机制允许程序在执行期间借助于 ReflectionAPI取得任何类的内部信息&#xff08;比如成员变量&#xff0c;构造器&#xff0c;成员方法等&#xff09;&#xff0c;并能操作对象的属性及方法。反射在设计模式和框架底层都会用到 2、加载完…

数学基础从高一开始6、全称量词与存在量词

数学基础从高一开始6、全称量词与存在量词 目录 数学基础从高一开始6、全称量词与存在量词 全称量词 存在量词 1.判断命题的真假 2.判断命题的真假 阅读下列两组命题&#xff0c;语言上有什么特点? A组&#xff1a; (1)对任意一个x∈Z&#xff0c;2x1是整数; (2)每一个素…

Pod使用进阶

Pod使用进阶 封面 写在前面 语雀上阅读效果更佳&#xff0c;请访问如下地址&#xff1a; 197 Pod使用进阶 语雀 《197 Pod使用进阶》 1、Pod 资源配置 实际上上面几个步骤就是影响一个 Pod 生命周期的大的部分&#xff0c;但是还有一些细节也会在 Pod 的启动过程进行设置&…

Hive 计算用户留存率(次日,3日,N日)

文章目录什么是用户留存率&#xff1f;创建数据源计算留存率计算 N 日的留存率什么是用户留存率&#xff1f; 用户留存率是指在特定时间段内&#xff0c;用户在使用某个产品或应用程序后&#xff0c;再次使用该产品或应用程序的比例。 它可以帮助公司了解用户是否喜欢他们的产…

2022 第十四届蓝桥杯模拟赛第二期题目题解(比赛时使用方法)

目录 第一题&#xff1a;最小的2022 第二题&#xff1a;经过天数 第三题&#xff1a;特殊的十六进制数 第四题&#xff1a;矩阵的最小路径 第五题&#xff1a;质数拆分 第六题&#xff1a;拷贝时间 第七题&#xff1a;单词去重 第八题&#xff1a;最短回文串 第九题&a…

[附源码]Node.js计算机毕业设计大学校园二手教材与书籍Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

GoWeb 优雅的 ORM 框架之 GORM,实现 MySQL 数据库的增删改查等操作(附案例全代码)

1、前言 什么是web应用,Web应用程序简单流程如下图所示 通过上图我们发现,我们 GoWeb 实战项目还缺少最后关键的环节数据库。那么如何使用 GO 语言操作数据库并完成增删改查等操作是我们今天学习的目标。 GoWeb 的 MVC 入门实战案例,基于 Iris 框架实现(附案例全代码) …

[附源码]Python计算机毕业设计Django的连锁药店销售管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

11.校验token和解析token获取数据代码优化

校验token和解析token获取数据代码优化 解决方案 基于ThreadLocal 拦截器的形式统一处理 一、使用拦截器进行统一身份鉴权 1.1定义拦截器 package com.tanhua.server.interceptor;import com.tanhua.commons.utils.JwtUtils; import org.springframework.web.servlet.Handl…

[附源码]Nodejs计算机毕业设计基于java旅游信息分享网站Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

二、物理层(一)通信基础

目录 1.1通信基础概念 1.2传输方式 1.2.1串行传输和并行传输 1.2.2单工通信、半双工通信和全双工通信 1.3编码与调制 1.3.1数字数据编码为数字信号 1.3.2数字数据调制为模拟信号 1.3.3模拟信号编码为数字信号 1.3.4模拟数据调制为模拟信号 1.4电路交换、报文交换与分…

装了就不舍得卸载,4款电脑必装软件,功能实用又免费

下面4款电脑软件&#xff0c;每一个都是你绝对能用得上的神器&#xff0c;可遇不可求。 1、AutoOff AutoOff是一款完全免费&#xff0c;纯绿色的电脑操作定时工具&#xff0c;功能强大且实用&#xff0c;体积不到1M&#xff0c;非常小巧&#xff0c;支持自动关机、重启、休眠、…

Mysql批量插入对比(附github仓库demo)

前言 本文记录个人使用MySQL插入大数据总结较实用的方案&#xff0c;通过对常用插入大数据的4种方式进行测试&#xff0c; for循环单条拼接SQL批量插入saveBatch()循环 开启批处理模式 最近趁空闲之余&#xff0c;在对MySQL数据库进行插入数据测试 准备工作 测试环境&…

189:vue+openlayers 上传CSV文件,导出Geojson格式文件

第189个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers上传CSV文件,导出GeoJSON文件。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果使用的csv文件安装依赖配置方…