首页 > 其他分享 >SpringCloud微服务

SpringCloud微服务

时间:2024-08-20 14:25:31浏览次数:5  
标签:服务 SpringCloud springframework spring org import cloud

最近简单了解了一下SpringCloud微服务,本篇对于SpringCloud进行一个简单总结,并使用nacos进行简单实例实现。


目录

前言

一、SpringCloud微服务基础概念

1.集群

2.分布式

3.微服务

二、微服务开发简单介绍

1.关键技术

2.SpringCloud解决方案

3.SpringCloud Alibaba

4.设计架构

三、实践开发

1.Nacos

(1)nacos简介

(2)nacos结构

(3)使用方法

2.项目实践

(1)主要流程

(2)详细步骤

 ① 添加依赖

② 编写配置文件

③ 编写控制层代码进行简单测试

④ 为一个服务添加多个实例运行

⑤ 服务间通信的负载均衡

总结

注意事项


前言

本篇所采用的框架为 Spring Cloud Alibaba,该框架基于SpringCloud改良的微服务框架,不仅包含了原来SpringCloud拥有的基本功能,还升级了其他部分内容

官方文档:

        Spring Cloud:Spring Cloudicon-default.png?t=N7T8https://spring.io/projects/spring-cloud

       Spring Cloud Alibaba:spring-cloud-alibaba/README-zh.md at 2.2.x · alibaba/spring-cloud-alibaba · GitHubSpring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware. - spring-cloud-alibaba/README-zh.md at 2.2.x · alibaba/spring-cloud-alibabaicon-default.png?t=N7T8https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.mdSpring Cloud Alibaba官网 | Spring AI + 阿里通义组件 | Springboot | 微服务实践教程 - Spring Cloud Alibaba官网 (aliyun.com)icon-default.png?t=N7T8https://sca.aliyun.com/        Nacos:Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网Nacos 提供动态服务发现、配置和管理,助力用户在私有云、混合云、公有云等环境中快速构建和交付微服务平台,提升业务复用和创新交付速度,为用户赢得市场竞争力。icon-default.png?t=N7T8https://nacos.io/download/nacosserver/#%E7%A8%B3%E5%AE%9A%E7%89%88%E6%9C%AC

Nacos Spring Cloud 快速开始Nacos Spring Cloud 快速开始icon-default.png?t=N7T8https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

环境配置:

  • JDK1.8
  • NACOS

一、SpringCloud微服务基础概念

1.集群

        同一个业务,部署在不同的服务器上面,为高并发的使用提供条件。

2.分布式

        同一个业务,拆解成多个子业务,部署在不同的服务器上面,每个子业务都可以做成集群,目的是为了分摊服务器的压力。

3.微服务

        相对于分布式的服务来说,它的颗粒度更小,可以实现精细化管理,使得整体项目的耦合度更低。

        每个微服务都可以单独部署,进行开发测试,拥有自己的开发生命周期,这样的设计敏捷性更高,这些多个微服务最终都会整合为一个微服务框架。

二、微服务开发简单介绍

1.关键技术

  • 开发技术:SpringBoot
  • 治理技术:SpringCloud(微服务一站式解决方案)
  • 部署技术:Docker,K8S,Jekins等

2.SpringCloud解决方案

  • 注册中心:Euerka
  • 负载均衡:Ribbn
  • 声明式调用远程方法:OpenFeign
  • 熔断 降级 监控:Hystrix
  • 网关:Gateway
  • 分布式配置中心:SpringCloud Config
  • 消息总线:SpringCloud Bus
  • 消息驱动:SpringCloud Stream
  • 链路跟踪:Sleuth

3.SpringCloud Alibaba

  • 服务注册配置中心:SpringCloudAlibaba Nacos
  • 熔断 降级 限流:SpringCloudAlibaba Sentinel
  • 分布式事务:SpringCloudAlibaba Seate

4.设计架构

三、实践开发

思想:将项目业务拆解为多个微服务后,到Nacos中进行注册

1.Nacos

(1)nacos简介

        配置管理微服务,动态管理、配置服务,流量管理的软件

(2)nacos结构

(3)使用方法

        解压安装 → 通过cmd进入nacos的bin文件夹中 → 输入命令行 startup.cmd -m standalone(选择采用独立模式)

        注:如果使用的是PowerShell进行运行,命令前需要添加 .\ 即为 .\startup.cmd -m standalone

        最后显示 Nacos started successfully 即为成功

        点击Console后的网址进行访问

        出现此页面即为成功,此时可以点击 服务管理 - 服务列表 进行查看,此时为空,接下来我们进行服务的添加

2.项目实践

(1)主要流程

        创建maven项目 → 添加两个SpringBoot的子工程 → 添加依赖 → 编写配置文件 → 编写Controller层 → 运行查看nacos中是否添加服务

(2)详细步骤

        创建工程这里就不进行赘述了,我们直接从依赖添加开始进行,注意的是选择的SpringBoot版本为2.7.6

        这里以物流管理用户与订单为例,工程结构如下图所示:

        

        ① 添加依赖

将下列依赖添加到order-server与user-server的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.7.6</spring-boot.version>
    <spring.cloud.version>2021.0.3</spring.cloud.version>
    <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.6</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

    <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>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2021.0.5.0</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

</dependencies>


<dependencyManagement>
    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

    </dependencies>
</dependencyManagement>
        ② 编写配置文件

        使用yml文件进行nacos配置

        

        ③ 编写控制层代码进行简单测试

        首先在order-server子工程中进行测试

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderController {
    // http://localhost:8000/getOrderUid?uid=1001
    @GetMapping("/getOrderUid")
    public String getOrderUid(String uid) {
        System.out.println("UID: " + uid);
        return "UID: " + uid;
    }
}

        运行后控制台输出如下文本即为成功            

        

        Nacos中已经成功添加服务

        使用对应端口进行访问:

        测试成功

        ④ 为一个服务添加多个实例运行

        运行后使用新实例的端口进行访问测试

        

        nacos进行刷新,发现实例已经添加完成

        ⑤ 服务间通信的负载均衡

        由于我的nacos版本较高,所以需要在user-server的pom.xml中添加一个依赖来启动SpringCloud的负载均衡

<!-- 升级spring cloud之后,Nacos消费者服务依赖该组件 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>3.1.6</version>
    <type>pom</type>
</dependency>

        编写配置类,开启负载均衡,采用轮询方式

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced //开启负载均衡 默认轮询模式
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

        编写controller类,进行访问

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class OrderController {

    @Autowired
    DiscoveryClient discoveryClient; // 发现客户端

    @Autowired
    RestTemplate restTemplate;

    // http://localhost:9000/getOrder?userId=1001
    @GetMapping("/getOrder")
    public String getOrder(@RequestParam(name = "userId") String userId) {
        

        String requestUrl = "http://order-server/getOrderUid?uid=" + userId;
        // 调用 nacos 上面的服务 负载均衡策略实现
        String str = restTemplate.getForObject(requestUrl, String.class);
        System.out.println(str);

        return str;
    }
}

        运行后,会在两个服务之间轮流执行

至此一个简单的SpringCloud工程就搭建完成了


总结

本篇简单介绍了SpringCloud的基础概念与微服务开发,并简单实现了一个客户端交互的负载均衡,以上仅做一个简单示例;

在日常开发中,我们的小项目没有高并发的情况,SpringCloud并不是必须的,而在企业级生产中微服务的使用就十分必要了。

注意事项

  • nacos安装时本地的环境变量中JDK过多将安装失败,确保环境中只进行了一个环境变量的配置;
  • SpringBoot、SpringCloud与Alibaba注意版本对应
  • yml文件中的配置编写注意事项:

                #大小写敏感

                #数值前面必须要有空格作为分隔符

                #使用缩减方式表示层级关系  只能使用空格不能使用tab 缩进空格数量不重要,只需要对齐就可以了

标签:服务,SpringCloud,springframework,spring,org,import,cloud
From: https://blog.csdn.net/m0_64337048/article/details/141351407

相关文章

  • 连接江西,服务未来:江西综合服务平台上线啦
    在互联网时代,数字化平台正在改变着我们的生活方式。为了更好地服务江西本地用户与企业,方勃传统医学倾力打造了一个全新的综合电商平台——江西综合服务平台。这个平台以“连接江西,服务未来”为使命,集成了全能中医、地方特产、文化旅游、农副产品、酒水饮料、餐饮美食、家政服务......
  • 【Minecraft】京东云轻量云主机搭建我的世界联机服务器教程(Java版)
    一、Minecraft介绍《我的世界》(英语:Minecraft)是一款沙盒游戏,最初由瑞典游戏设计师马库斯·阿列克谢·泊松单独开发,随后由2009年成立的瑞典公司Mojang开发并发行。玩家可以在一个随机生成的3D世界内,以带材质贴图的立方体为基础进行游戏。游戏中的其他特色包括探索世界、采集资......
  • 在java中实现使用文件名称和文件路径从一个服务器保存文件到另一个服务器
    要在Java中实现从一个服务器下载文件并将其保存到另一个服务器的功能,你可以采用以下步骤:从源服务器下载文件。将文件保存到目标服务器。这里我们将使用Java的HttpURLConnection来处理HTTP请求,并使用FTP协议通过JSch或ApacheCommonsNet库将文件上传到另一台服务器。首先,你需......
  • 短URL服务设计
    引言在营销系统里,为了增加系统的活跃用户数,经常会有各种各样的营销活动。这类活动几乎都是为了充分利用存量用户的价值,促使他们分享产品或App以达到触达到更多用户的目的。又或者是出于营销目的,群发优惠券触达短信这种场景。分享App活动页(或其他各种页面)时URL一般会带有各种参数......
  • 华为云服务器搭建小游戏
    在当今数字化的时代,搭建自己的小游戏服务器成为了许多开发者和爱好者的热门选择。华为云服务器凭借其强大的性能、稳定的服务和丰富的功能,为我们提供了一个理想的平台。接下来,让我们一起探索如何在华为云服务器上搭建小游戏。一、准备工作注册华为云账号并完成实名认证。开......
  • NFS服务部署
    一、基础概念NFS是一种网络文件系统,实现数据一致性,文件共享NFS将硬盘进行共享,共享的目录;两台服务器的前提下不同用户如何实现上传访问到静态图片/视频都能看到相同的数据则使用NFS其实现在很多企业都会有一个CDN分布式文件缓存,这个缓存可以实现将静态图片/视频上传到CDN分布式......
  • 独立高防服务器特点免费全能空间存在吗
    独立高防服务器,是在独享整台服务器硬件资源和卓越性能的基础上独立高防服务器有哪些特点呢?因为独立高防服务器具有超强稳定性,用户可安装独立的操作系统,http、ftp、ssh、sendmail、mysql等都是独立的,只有你一个人在用,不像虚拟主机一样是免费服务器很多人共享,在安全性、性能、......
  • C++ 获取Linux 服务器CPU占用率+内存空闲率(亲测绝对可以运行)
    转自:C++获取Linux服务器CPU占用率+内存空闲率(亲测绝对可以运行)-远征i-博客园(cnblogs.com)代码来自网络,部分修改,亲测绝对可用C++:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<unistd.h>usingnamespacestd;type......
  • SpringCloud:服务保护和分布式事务详解
    ♥️作者:小宋1021......
  • tcp与udp的总结+connect阻塞+tcp三次握手、四次挥手+常见的服务器IO(发送数据+接收数
    一,TCP与UDP的基本总结TCP(传输控制协议)和UDP(用户数据报协议)是两种主要的传输层协议。TCP是面向连接的,提供可靠、顺序的传输,适用于需要高可靠性的应用,如网页浏览和文件传输。它通过重传机制和流量控制确保数据完整性。UDP是无连接的,速度快但不保证数据的可靠性和顺序,适用于对实时性......