一,什么是Spring Cloud
Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
二,微服务和微服务架构
微服务就是微小的服务,通过微服务思想,将原有的大而全的项目拆分成多个小而巧的项目,每个小的项目就是一个微服务,若干个微服务组成一个完整项目。微服务架构就是利用这种思想搭建的项目架构方式。
微服务架构可以提供高并发、高吞吐、高可用的特性。
三,什么是Nacos
Redirecting to: https://nacos.io/ 官方文档
nacos的两个核心功能:注册中心(发现中心)、配置中心(配置管理)
注册中心:登录记载项目使用的微服务
配置中心:管理各个微服务共用的配置
阿里旗下产品。Nacos是Spring Cloud Alibaba的开源组件之一,它不仅可以像Consul、Eureka那样作为注册中心,还可以像Spring Config那样作为远程的配置中心,并且,它还有很多自己的特性。
四,Docker安装Nacos
基于Docker安装
#拉取docker镜像:
docker pull nacos/nacos-server:1.3.1
#创建挂载目录:
mkdir -p /usr/local/docker/nacos/init.d /usr/local/docker/nacos/logs
#安装nacos:
docker run -d \
-p 8848:8848 \
-e MODE=standalone \
-e PREFER_HOST_NAME=hostname \
-v /usr/local/docker/nacos/init.d:/home/nacos/init.d \
-v /usr/local/docker/nacos/logs:/home/nacos/logs \
--name nacos nacos/nacos-server:1.3.1
-e MODE=standalone:运行模式为单例模式,nacos支持集群,当前用单例运行
-e PREFER_HOST_NAME=hostname:以主机名启动,也可以用ip地址
【命令1:】
【命令2:】
【命令3:】
五、实现Nacos注册中心功能
1.添加依赖:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jsoft</groupId>
<artifactId>demo-nacos</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.7.RELEASE</version>
</parent>
<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.6.13</spring-boot.version>
<jwt.version>0.7.0</jwt.version>
<fastjson.version>1.2.60</fastjson.version>
<spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--json-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<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>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.编写bootstrap.yml配置文件:
是配置注册中心的,要优先于application.yml文件读取。
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.43.8:8848
3.编写application.properties配置文件:
给当前工程取的名,用于在nacos中显示和管理。
spring.application.name=nacos01
4.编写启动类:
@SpringBootApplication
public class SpringBootMain {
public static void main(String[] args) {
SpringApplication.run(SpringBootMain.class);
}
}
5.运行程序,访问Nacos:
http://192.168.43.8:8848/nacos/#/login
六、实现Nacos配置中心功能
【1、修改application.yml】
server:
port: 99
common:
name: zhangsan
age: 20
【2、创建控制器】
package org.jsoft.demo.controller;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value; //注意这一项
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
@Setter
public class UserController {
@Value("${common.name}")
private String name;
@Value("${common.age}")
private Integer age;
@GetMapping
public String test(){
return name+"----"+age;
}
}
【3、启动,访问】
【4、添加maven依赖】
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
【5、创建命名空间】
【注意:上图里的‘命名空间ID’,一会粘贴在idea项目配置文件中。】
【6、配置中心添加配置文件】
【注意:下图中的Data ID ,为自定义。】
common:
name: lisi
【再配置一个】
common:
age: 25
【7、修改bootstrap.yml配置文件】
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.43.8:8848
config:
server-addr: 192.168.43.8:8848
file-extension: yaml
namespace: d2a5ce42-8836-4dc4-89e0-9f8620b82327
shared-configs:
- data-id: dz14b-demo1.yaml
group: DEFAULT_GROUP
- data-id: dz14b-test1.yaml
group: DEFAULT_GROUP
inetutils:
preferred-networks: 192.168.56
server-addr:nacos服务ip及端口
file-extension:配置文件类型
namespace:命名空间,在nacos页面中创建,用来管理配置文件
shared-configs:配置中心配置
data-id:配置文件唯一标识
group:配置文件分组
preferred-networks:设置微服务的网段
【8、查看上步操作中,获得注册中心里的网段】
【9、重新启动项目,再次访问】
获得配置中心里的值了。(配置中心里有的值,读配置中心;配置中心没有的值,读本地;本地也没有,报错。)