SpringCloud Alibaba入门篇

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

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

SpringCloud微服务详解(springcloud alibaba)


本篇博客的架构图如下
SpringCloud Alibaba入门篇_第1张图片


文章目录

    • 一、前期准备
      • 1-1、创建一个父工程
      • 1-2、创建公共pom
    • 二、创建一个服务提供方(用户服务)
      • 2-1、创建项目
      • 2-2、修改pom
      • 2-3、新增yml配置文件
      • 2-4、新增启动类文件
      • 2-5、新增用户服务
      • 2-6、测试
    • 三、注册中心(nacos)
      • 3-1、下载
      • 3-2、启动
      • 3-3、用户服务注册进nacos
    • 四、网关 (getway)
      • 4-1、参照二、建立一个模块 (getway6001)
      • 4-2、添加yml文件
      • 4-3、配置pom
      • 4-4、配置启动类
      • 4-5、测试
      • 4-6、其它
    • 五、配置中心(nacos)
      • 5-1、添加pom
      • 5-2、修改配置文件
        • 5-2-1、bootstrap.yml
        • 5-2-2、application.yml
      • 5-3、添加nacos配置
      • 5-4、配置动态刷新效果
      • 5-5、最终效果演示
    • 六、服务监控(sentinel)
      • 6-1、sentinal 控制台
        • 6-1-1、下载
        • 6-1-2、登录
      • 6-2、userServer集成sentinel
        • 6-2-1、添加如下pom
        • 6-2-2、修改配置文件(bootstrap.yml)
        • 6-2-3、userServer注册进sentinal
        • 6-2-4、服务限流
    • 七、Nginx负载
    • 八、源代码/安装包 获取

一、前期准备

1-1、创建一个父工程

SpringCloud Alibaba入门篇_第2张图片

SpringCloud Alibaba入门篇_第3张图片
SpringCloud Alibaba入门篇_第4张图片


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


1-2、创建公共pom



<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.0modelVersion>

    <groupId>www.xdx97.cloudgroupId>
    <artifactId>xdxCloudartifactId>
    <packaging>pompackaging>
    <version>1.0-SNAPSHOTversion>

    
    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        <junit.version>4.12junit.version>
        <mysql.version>5.1.47mysql.version>
        <druid.version>1.1.16druid.version>
        <mybatis.spring.boot.version>1.3.0mybatis.spring.boot.version>
    properties>

    
    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-dependenciesartifactId>
                <version>2.2.2.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Hoxton.SR1version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>2.1.0.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>${mysql.version}version>
            dependency>
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druidartifactId>
                <version>${druid.version}version>
            dependency>
            <dependency>
                <groupId>org.mybatis.spring.bootgroupId>
                <artifactId>mybatis-spring-boot-starterartifactId>
                <version>${mybatis.spring.boot.version}version>
            dependency>

            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <version>${lombok.version}version>
                <optional>trueoptional>
            dependency>
        dependencies>
    dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <fork>truefork>
                    <addResources>trueaddResources>
                configuration>
            plugin>
        plugins>
    build>

project>

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

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


2-1、创建项目

SpringCloud Alibaba入门篇_第5张图片

SpringCloud Alibaba入门篇_第6张图片

SpringCloud Alibaba入门篇_第7张图片

SpringCloud Alibaba入门篇_第8张图片


2-2、修改pom

<dependencies>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-actuatorartifactId>
    dependency>
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <optional>trueoptional>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
        <scope>testscope>
    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

SpringCloud Alibaba入门篇_第9张图片


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

  1. 修改user服务的pom文件,加入下面的依赖

<dependency>
	<groupId>com.alibaba.cloudgroupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
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会发现已经注册进去了

SpringCloud Alibaba入门篇_第10张图片



四、网关 (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>
    
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-gatewayartifactId>
    dependency>
    
    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-actuatorartifactId>
    dependency>
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
        <scope>testscope>
    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.cloudgroupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
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配置

SpringCloud Alibaba入门篇_第11张图片
SpringCloud Alibaba入门篇_第12张图片


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

SpringCloud Alibaba入门篇_第13张图片

6-2、userServer集成sentinel

6-2-1、添加如下pom


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
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就可以看到如下内容

SpringCloud Alibaba入门篇_第14张图片

6-2-4、服务限流

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



七、Nginx负载

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



八、源代码/安装包 获取

关注微信公众号回复: SpringCloudAlibabaDemo

SpringCloud Alibaba入门篇_第15张图片

你可能感兴趣的:(#,微服务,SpringCloud,微服务,CloudAlibaba,Nacos,微服务架构)