SpringCloud微服务

最近简单了解了一下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 缩进空格数量不重要,只需要对齐就可以了

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值