SpringCloud Alibaba入门篇

上一篇博客我们对SpringCloud有了一个详细的描述,这一次我们根据上次的理念来一个落地实现。

本次只是一个简单的集成(内容实在是太多了),后面会把每一部分单独出一个博客详细解释,但都是基于此服务

SpringCloud微服务详解(springcloud alibaba)


本篇博客的架构图如下
在这里插入图片描述


一、前期准备

1-1、创建一个父工程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


后面直接next、finish就可以了。


1-2、创建公共pom


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>www.xdx97.cloud</groupId>
    <artifactId>xdxCloud</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <!-- 统一管理jar包版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <lombok.version>1.16.18</lombok.version>
        <mysql.version>5.1.47</mysql.version>
        <druid.version>1.1.16</druid.version>
        <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
    </properties>

    <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version  -->
    <dependencyManagement>
        <dependencies>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud Hoxton.SR1-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud alibaba 2.1.0.RELEASE-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.boot.version}</version>
            </dependency>

            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

二、创建一个服务提供方(用户服务)

以后所有的创建方式都是如此


2-1、创建项目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


2-2、修改pom

<dependencies>
    <!-- SpringBoot整合Web组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

2-3、新增yml配置文件

server:
  port: 5001

spring:
  application:
    name: user_server_5001

2-4、新增启动类文件

package com.xdx97;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class UserServer5001 {
    public static void main(String[] args) {
        SpringApplication.run(UserServer5001.class, args);
    }
}

2-5、新增用户服务

package com.xdx97.controller;

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

@RestController
public class UserController {

    @GetMapping("/user")
    public String fun(){
        return "我是用户服务";
    }
}

2-6、测试

在浏览器访问( http://127.0.0.1:5001/user ),如果可以看到结果及表示成功。



三、注册中心(nacos)

目前就用window版本,后面会出nacos集群那时候再用linux版本


3-1、下载

https://github.com/alibaba/nacos/releases


3-2、启动

  1. 把下载好的包,解压出来
  2. 打开CMD去到bin目录下,执行 startup.cmd -m standalone (standalone代表着单机模式运行,非集群模式)
  3. 打开浏览器输入:http://127.0.0.1:8848/nacos/index.htm ,看到如下界面表示成功。
  4. 初始用户名/密码 nacos/nacos

在这里插入图片描述


3-3、用户服务注册进nacos

  1. 修改user服务的pom文件,加入下面的依赖
<!--SpringCloud ailibaba nacos -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 修改yum文件为如下内容
server:
  port: 5001

spring:
  application:
    name: user_server_5001
  cloud:
    nacos:
      discovery:
        #server-addr: localhost:8848 #配置Nacos地址
        server-addr: 127.0.0.1:8848
  1. 在启动类上面加上服务发现注解
@EnableDiscoveryClient
  1. 重启服务,然后刷新nacos会发现已经注册进去了

在这里插入图片描述



四、网关 (getway)

网关里面是已经集成了服务调用负载均衡的


4-1、参照二、建立一个模块 (getway6001)


4-2、添加yml文件


这里面有一个坑,我前面的用户服务取名为user_server_5001,这个名字配置在网关里面无法识别,所以我改成了userServer

server:
  port: 6001

spring:
  application:
    name: getway_6001
  cloud:
    nacos:
      discovery:
        #server-addr: localhost:8848 #配置Nacos地址
        server-addr: 127.0.0.1:8848
    gateway:
      discovery:
        locator:
          enabled: true       #开启从注册中心动态创建路由的功能,利用微服务名进行路由
      routes:
        - id: user_server #payment_route    #路由的ID,没有固定规则但要求唯一,建议配合服务名
#          uri: http://localhost:5001          #匹配后提供服务的路由地址
          uri: lb://userServer                  #配置nacos里面的服务名
          predicates:
            - Path=/user/**         # 断言,路径相匹配的进行路由

4-3、配置pom

<dependencies>
    <!--gateway-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!--SpringCloud ailibaba nacos -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

4-4、配置启动类

@SpringBootApplication
@EnableDiscoveryClient
public class Getway6001 {
    public static void main(String[] args) {
        SpringApplication.run(Getway6001.class, args);
    }
}

4-5、测试

在浏览器输入 http://localhost:6001/user 如果可以成功访问,表示成功。


4-6、其它

本以为网关就是一个转发,但是刚刚测试发现还有其它好玩的东西,但是博客写的太长不好,而且这篇博客就是简单搭建微服务,后面会单独写一篇文章。



五、配置中心(nacos)

为用户服务添加配置中心,以便可以动态的更新配置文件


5-1、添加pom

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

5-2、修改配置文件

5-2-1、bootstrap.yml

我们需要新增一个bootstrap.yml文件,在读取顺序的时候bootstrap.yml是优先于application.yml。

server:
  port: 5001

spring:
  application:
    name: userServer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置

5-2-2、application.yml
spring:
  profiles:
    active: dev

5-3、添加nacos配置

在这里插入图片描述
在这里插入图片描述


5-4、配置动态刷新效果

这里很关键,不可能说当我们去修改了nacos里面的配置文件,然后我们的系统代码立即就收到的,他是有一个过程的。

我们要把全部的配置文件写到一个java文件里面,然后别的地方要用的时候去调用就好了,比如下面的用法:ConfigController.wxApp;

package com.xdx97.controller;

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

@RestController
public class UserController {

    @GetMapping("/user")
    public String fun(){
        return "我是用户服务" + ConfigController.wxApp;
    }
}

我们来配置这个ConfigController,使他里面的都可以动态获取,我这里只配置一个属性(wx.app)作为演示,具体数量看实际需求。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RefreshScope
@RestController
public class ConfigController {

    @RequestMapping("/refreshConfig")
    public String refreshConfig(){
        return "配置刷新成功";
    }

    public static String wxApp;

    @Value("${wx.app}")
    public void setWxApp(String wxApp) {
        this.wxApp = wxApp;
    }
}

5-5、最终效果演示

在这里插入图片描述



六、服务监控(sentinel)

6-1、sentinal 控制台

6-1-1、下载

https://github.com/alibaba/Sentinel/releases

下载后启动, java -jar sentinel-dashboard-1.8.1.jar


6-1-2、登录

访问 http://127.0.0.1:8080 , 用户名/密码 sentinel / sentinel

在这里插入图片描述

6-2、userServer集成sentinel

6-2-1、添加如下pom
<!--SpringCloud ailibaba sentinel -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

6-2-2、修改配置文件(bootstrap.yml)
server:
  port: 5001

spring:
  application:
    name: userServer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719

6-2-3、userServer注册进sentinal

我们的sentinel是懒加载的,我们重启userServer服务,然后访问 http://127.0.0.1:5001/user,再刷新sentinel就可以看到如下内容

在这里插入图片描述

6-2-4、服务限流

sentinal 可以提供各个维度不同的限流,这里我只测试一个最简单的流程:当QPS大于1的时候快速失败

在这里插入图片描述



七、Nginx负载

Nginx实现负载均衡Linux版本(六种负载策略)



八、源代码/安装包 获取

关注微信公众号回复: SpringCloudAlibabaDemo

在这里插入图片描述

  • 3
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
Spring Cloud和Spring Cloud Alibaba都是基于Spring Framework的开源框架,用于构建分布式系统和微服务架构。它们都提供了一系列的组件和工具来简化微服务开发和管理。 Spring Cloud是一个由Pivotal团队维护的项目,它集成了Netflix开源的一些组件,如Eureka作为注册中心、Ribbon作为负载均衡器、Feign作为服务调用工具等。同时,Spring Cloud还提供了其他功能,如Config Server用于动态管理配置、Gateway用于构建API网关等。 而Spring Cloud Alibaba则是阿里巴巴开源的项目,它在Spring Cloud的基础上进行了扩展和定制,增加了一些阿里巴巴自己的组件和工具。比如,它使用Nacos作为注册中心和配置中心,使用Sentinel作为熔断降级工具。 总的来说,Spring Cloud和Spring Cloud Alibaba都是用于构建微服务架构的框架,它们的区别在于Spring Cloud集成了Netflix组件,而Spring Cloud Alibaba集成了阿里巴巴的一些组件。根据具体的需求和技术栈选择使用哪个框架可以更好地满足开发和管理微服务的需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Spring Cloud Alibaba和Spring Cloud的区别](https://blog.csdn.net/weixin_43888891/article/details/126653270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值