SpringCloud概述&注册中心和配置中心Nacos

spring cloud alibaba概述

一 . 系统架构的演变

  •  单体架构:代码耦合,迭代困难  
  •  分布式: 各系统存在重叠业余(重复开发)
  •  SOA:  抽取的粒度大,服务提供方和消费方耦合度高
  •  微服务: 单一职责,面向服务

二. Spring Cloud概述

         1. 什么是Springcloud?

                    Spring Cloud是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等

                    Spring没有重复造轮子,只是基于springboot将其他公司(Netflix)的服务框架组合起来

         2. Spring Cloud Alibaba?

               同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。    

                  作为 Spring Cloud 体系下的新实现,Spring Cloud Alibaba 跟Spring Cloud官方的组件或其它的第三方实现如 Netflix, Consul,Zookeeper 等对比,具备了更多的功能:

 

                                                                        SpringCloud = springboot+Netflix 

                                                                        SpringCloud  Alibaba= springboot+alibaba 

        3. Spring Clolud、Spring Cloud Alibaba、SpringBoot的版本关系?(推荐使用)                            

                Spring Boot和Spring Cloud的版本号如下:

                        Spring Boot版本号:https://spring.io/projects/spring-boot#learn

                        Spring Cloud版本号:https://spring.io/projects/spring-cloud#learn

                        Spring Cloud Alibaba版本号:https://spring.io/projects/spring-cloud-alibaba#learn

     

                版本号说明

                       Spring Cloud是基于Springboot的对应版本号开发的,属于依赖的关系,所以不能都选用最新版本版本关系

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Version
2.2.6.RELEASESpring Cloud Hoxton.SR92.3.2.RELEASE

注册中心Nacos

一.  什么是Nacos注册中心

        注册中心主要有三部分组成:

  • Ø Nacos-Server:注册中心        
    • 提供服务的注册和发现

  •  Ø Nacos-Provider:服务提供方
    •  把自身的服务实例注册到 Nacos Server 中
  • Ø Nacos-Consumer:服务调用方
    • 通过 Nacos Server 获取服务列表,消费服务

  二.  nacos安装和启动

            下载地址:https://github.com/alibaba/nacos/tags

1、解压
        tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local
2、启动和关闭
        启动:
            cd /usr/local/nacos/bin
            ./starup.sh -m standalone #非集群模式启动
        关闭:
            cd /usr/local/nacos/bin
            ./shutdown.sh

 三、nacos注册中心(存放服务)

1、服务提供者:nacos_provider
        1、pom.xml
            spring-cloud-starter-alibaba-nacos-discovery
        2、application.yml
            spring:
              cloud:
                nacos:
                  server-addr: 192.168.116.131:8848 #注册中心的地址
               application:
                  name: nacos-provider #注册到nacos的名字
        3、app启动类
            @EnableDiscoveryClient

    2、服务消费者:nacos_consumer
        1、pom.xml
            spring-cloud-starter-alibaba-nacos-discovery
        2、application.yml
            spring:
              cloud:
                nacos:
                   discovery:
                    server-addr: 192.168.116.131:8848 #注册中心的地址
               application:
                  name: nacos-consumer #注册到nacos的名字
        3、app
            @EnableDiscoveryClient
    3、为什么要使用注册中心?
        ①地址硬编码
        ②不能负载均衡

 四、naocs配置中心(存放配置文件)

1、入门案例:nacos_config
        1、pom.xml
            nacos-config、nacos-discovery、web
        2、bootstrap.yml
            spring:
              cloud:
                nacos:
                  config:
                server-addr: 192.168.116.131:8848 #配置中心的地址
                file-extension: yaml #配置文件扩展名只支持properties和yaml
                prefix: nacos-config #文件名,默认是spring.application.name                      

        注意:       

               客户端配置文件的名称必须为bootstrap.yml

     bootstrap/ application 的应用场景:            

    bootstrap.ymlapplicaton.yml 优先加载,应用于系统级别参数配置,一般不会变动;

               application.yml应用于SpringBoot项目的自动化配置
        3、在nacos中创建配置文件
             Data ID:prefix.file-extension
             配置格式:yaml或properties

2、为什么要用配置中心?
        ①集中管理配置文件
        ②动态更新配置文件
    3、隔离模型
        namespace  --------------------------环境:dev、test、prod

        group          --------------------------项目名:health、jd

        Data ID       --------------------------工程名:nacos-config.yaml   health-provider.yaml

  • 获取配置集需要指定:

    1. nacos服务地址,必须指定

    2. namespace,如不指定默认public

    3. group,如不指定默认 DEFAULT_GROUP

    4. dataId,必须指定

       

 五、持久化

1.为什么要持久化?(集群模式下数据统一

        Nacos默认有自带嵌入式数据库derby,但是如果做集群模式的话,就不能使用自己的数据库不然每个节点一个数据库,那么数据就不统一了,需要使用外部的mysql

2.持久化入门操作

        2.1 切换数据库

                修改nacos存放路径下的conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql,版本要求:5.6.5+)
        

### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.31.19:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1111

          2.2 初始化数据库
                2.2.1、创建nacos库(配置文件默认库名为:nacos ,可在application.properties文件中进行修改)
                   ​​​​​​​ 注意:库名和application.properties中的库名保持一致
                2.2.2、创建所需表
                    找到conf/nacos-mysql.sql文件并执行

                    例如:

                2.2.3、测试--测试之前mysql要先启动,否则启动不了
                    1、重启nacos服务
                    2、打开浏览器输入nacos地址,在新建配置新建配置文件
                    3、观察配置文件是否持久化到mysql中

 

 六、集群

        1. 什么是集群?

                同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)

        2. 集群的搭建(只是模拟一下效果,在一台虚拟机开了三个服务)

                1.找到nacos安装路径下的conf/cluster.conf.example,将其改名为 conf/cluster.conf

                2.打开 conf/cluster.conf文件,添加信息

# ip:port
192.168.128.132:8848
192.168.128.132:8849
192.168.128.132:8850

                3. 将nacos安装目录复制三份

[root@localhost bin]# cd /usr/local
[root@localhost java]# mkdir nacos_cluster
[root@localhost java]# cp -r nacos nacos_cluster/nacos_8848
[root@localhost java]# cp -r nacos nacos_cluster/nacos_8849
[root@localhost java]# cp -r nacos nacos_cluster/nacos_8850

                4.将复制的三份文件中 conf/application.properties 中的端口号分别改为:

server.port=8848
server.port=8849
server.port=8850

 七、配置代理服务Nginx

        1. 什么是Nginx?

                Nginx作为负载均衡服务:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。

       2. Linux系统安装Nginx(可跟nacos安装到同一台虚拟机中)

                1.由于nginx采用C进行编写,首先需要安装nginx的依赖库

yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

                2. 下载nginx

wget -c https://nginx.org/download/nginx-1.12.0.tar.gz      

                3. 解压安装包

tar -zxvf nginx-1.12.0.tar.gz​​​​​​​

                4.配置nginx安装包、

cd nginx-1.12.0

 ./configure --prefix=/usr/local/nginx

注意:

        ./configure配置nginx安装到/usr/java/nginx目录下

                5.编译并安装

make && make install

        3.配置nginx代理nacos

                1. 打开nginx安装路径下的conf/nginx.conf文件

#将要代理的tomcat服务器的地址以及权重(weight是权重,权重越大,分配的几率越大)

#行号的第34行附近插入数据

upstream nacos {
  server 192.168.128.132:8848;
  server 192.168.128.132:8849;
  server 192.168.128.132:8850;
}

server {
  listen 80;
  server_name  localhost;
  location / {

     #行号54行附近插入数据

     #配置nginx的代理
    proxy_pass http://nacos;
  }
}

        4.测试

                1. 启动nacos集群

[root@localhost upload]# cd /usr/local/nacos_cluster/nacos_8848/bin
[root@localhost bin]# ./startup.sh
[root@localhost bin]# cd /usr/local/nacos_cluster/nacos_8849/bin
[root@localhost bin]# ./startup.sh
[root@localhost bin]# cd /usr/local/nacos_cluster/nacos_8850/bin
[root@localhost bin]# ./startup.sh

                 2.启动nginx

[root@localhost nginx]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ./nginx 

                3.案例准备

  • 创建springcloud_parent

  • pom.xml​​​​​​​
<?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>com.bjpowernode</groupId>
    <artifactId>springcloud_parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <properties>
        <!-- 项目源码及编译输出的编码 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- 项目编译JDK版本 -->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!--Spring Boot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud Netflix-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud 阿里巴巴-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
  • 创建nacos_config 
  • pom.xml
<?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">
    <parent>
        <artifactId>springcloud_parent</artifactId>
        <groupId>com.bjpowernode</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>nacos_config</artifactId>

    <dependencies>
        <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-config</artifactId>
        </dependency>
    </dependencies>
</project>
  • bootstrap.yml​​​​​​​ ​​​​​​​
spring:
  application:
    name: nacos-confing
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.128.132:81 #nginx绑定的域名 nginx默认的端口的是80,我这里使用的是81端口
      config:
        server-addr: 192.168.128.132:81 #nginx绑定的域名 nginx默认的端口的是80,我这里使用的是81端口
        file-extension: yaml #后缀名 
        prefix: nacos-config #文件名
  • App​​​​​​​ ​​​​​​​​​​​​​​
  • package com.bjpowernode;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient //向注册中心注册该服务,并可以获取其他服务的调用地址
    public class NacosConfigApp {
    
        public static void main(String[] args) {
            SpringApplication.run(NacosConfigApp.class);
        }
    }
  • controller

package com.bjpowernode.controller;

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

@RestController
@RefreshScope //重新从BeanFactory获取一个新的实例(该实例使用新的配置)
public class ConfigController {
    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;
    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.password}")
    private String password;
    @Value("${spring.datasource.type}")
    private String type;

    @GetMapping("/config/info")
    public String getConfig(){
        System.out.println(this);
        String configInfo = driverClassName+"<br>"+url+"<br>"+username+"<br>"
                +password+"<br>"+type;
        return configInfo;
    }
}

​​​​​​​                4.往Nacos添加配置信息

  • 新建配置文件 ​​​​​​​

  •  添加配置文件

  •  内容如下:
server:
  port: 81
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.128.130:3306/health?characterEncoding=UTF-8
    username: root
    password: 1234
    type: com.alibaba.druid.pool.DruidDataSource

                5.测试​​​​​​​

                        启动nacos-confing服务

                        通过nginx访问nacos集群:http://192.168.128.132/nacos ​​​​​​​

 

                        浏览器访问http://127.0.0.1:81/config/info ​​​​​​​

 

  八、Nacos开机自启

        1. 编写开机启动文件              

  • 添加nacos.service文件(打开终端新建文件)

vim /lib/systemd/system/nacos.service (文件位置不可变

  • 文件内容如下:

[Unit]
Description=nacos
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone  #nacos安装路径
ExecReload=/usr/local/nacos/bin/shutdown.sh  #nacos安装路径
ExecStop=/usr/local/nacos/bin/shutdown.sh  #nacos安装路径
PrivateTmp=true

[Install]
WantedBy=multi-user.target

  • 修改nacos的startup.sh

  • 修改JAVA_HOME路径并注销之后的3行配置,如下:

[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk1.8.0_191  #jdk安装路径
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
#[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
#[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME

  • 设置开机启动

systemctl daemon-reload        #重新加载服务配置
systemctl enable nacos.service #设置为开机启动
systemctl start nacos.service  #启动nacos服务
systemctl stop nacos.service   #停止nacos服务

​​​​​​​

​​​​​​​​​​​​​​

​​​​​​​

​​​​​​​

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值