一.SpringCloud概述&注册中心和配置中心Nacos
1.系统框架的演变:
(1)单体架构:所有功能模块都在一个war包里
存在的问题: 代码耦合 迭代困难 扩展受限 技术债务
(
2)分布式架构
: 就是将原来一个项目应用进行拆分,将其拆分为互不想干的几个应用,以此来提升系统的整体性能
存在的问题: 存在重叠的业务(如订单服务、物流、推广都需要调用用户服务)
(3)SOA框架:面向服务的架构
存在的问题:服务提供方与调用方接口耦合度较高
抽取服务粒度较大
(4)微服务:SOA架构的基础上进一步扩展,将其彻底拆分为Spring Cloud Alibaba一个个小的可以独立部署的微服务
特征:隔离性强 面向服务 单一职责 自治
2.Spring Cloud概述
(1)SpringCloud:Spring Cloud是一系列框架的有序集合如服务发现注册、配置中心、消息总线、负载均衡、熔断器、等。
(2)Spring Cloud与Spring boot的关系:
spring->Spring boot->Spring Cloud
Spring boot 是 Spring 的一套
快速配置脚手架,可以基于spring boot 快速开发单个微服务;
Spring Cloud是一个基于SpringBoot实现的微服务开发方案;
3.Spring Cloud Alibaba概述
(1)Spring Cloud Alibaba: Spring Cloud +Alibaba
(2)Spring Cloud 和 Spring Boot版本关系:
二、注册中心和配置中心nacos
一、什么是nacos
Nacos 是阿里巴巴的新开源项目,其核心定位是 “一个更易于帮助构建云原生应用的集注册中心与配置中心于一体的管理平 台”。
二、nacos安装和启动
1、解压 : tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local (
Tags · alibaba/nacos · GitHub)
2、启动和关闭 启动:cd /usr/local/nacos/bin
./startup.sh -m standalone
关闭:cd /usr/local/nacos/bin
./shutdown.sh
三、nacos注册中心(存放服务)
什么是注册中心:
注册中心主要有三部分组成:
Nacos-Server
:注册中心----
提供服务的注册和发现。
Nacos-Provider
:服务提供方------
把自身的服务实例注册到 Nacos Server 中
Nacos-Consumer
:服务调用方------
通过 Nacos Server 获取服务列表,消费服务。
1 .服务提供者:nacos_provider
(1) pom.xml
<!--nacos客户端--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
(2)
.application.yml
application.ymlspring:cloud:nacos:server-addr: 192.168.116.131:8848 #注册中心的地址application:name: nacos-provider #注册到nacos的名字
(3)、app
@SpringBootApplication@EnableDiscoveryClient//向注册中心注册该服务,并可以获取其他服务的调用地址public class ProviderApp {public static void main(String[] args) {SpringApplication.run(ProviderApp.class);}}
2、服务消费者:nacos_consumer
(1)、pom.xml<!--nacos客户端--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>(2)、application.ymlapplication.ymlspring:cloud:nacos:discovery:server-addr: 192.168.116.131:8848 #注册中心的地址application:name: nacos-consumer #注册到nacos的名字(3)、app@SpringBootApplication@EnableDiscoveryClient//向注册中心注册该服务,并可以获取其他服务的调用地址public class ConsumerApp {public static void main(String[] args) {SpringApplication.run(ConsumerApp.class);}}
3、为什么要使用注册中心?
①地址硬编码
②不能负载均衡
四、naocs配置中心(存放配置文件)
配置中心的思路是:
-
首先把项目中各种配置全部都放到一个集中的地方进行统一管理。
-
当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。
-
当配置中心中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。
1、入门案例:创建nacos_config
(1)、引入依赖pom.xml
<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>
(2)、bootstrap.yml
-
注意:
-
客户端配置文件的名称必须为 bootstrap.yml
-
-
bootstrap/ application 的应用场景:
-
bootstrap.yml 比 applicaton.yml 优先加载,应用于系统级别参数配置,一般不会变动;
-
application.yml 应用于SpringBoot项目的自动化配置;
-
spring:cloud:nacos:config:server-addr: 192.168.116.131:8848 #配置中心的地址file-extension: yaml #配置文件扩展名只支持properties和yamlprefix: nacos-config #文件名,默认是spring.application.name
(3)、在nacos中创建配置文件
在Nacos中dataId(配置文件的完整命名规则)规矩如下
:
${spring.cloud.nacos.config.prefix}.${spring.cloud.nacos.config.file-extension}
spring.cloud.nacos.config.prefix:默认是当前服务的服务名称
spring.cloud.nacos.config.file-extension:配置文件的格式(后缀),目前只支持yaml和properties
例如:
2、为什么要用配置中心?
①集中管理配置文件
②动态更新配置文件
3、隔离模型
namespace -------------------------- 环境:dev、test、prod
group -------------------------- 项目名:health、jd
Data ID -------------------------- 工程名:nacos-config.yaml health-provider.yaml
三、Nacos集群隔离和持久化
一、持久化
1、修改conf/application.properties
### 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、建库建表
1、创建nacos库
注意:库名和application.properties中的库名保持一致
2、建表
找到conf/nacos-mysql.sql文件并执行
3、测试
1、重启nacos
2、新建配置文件
3、观察配置文件是否持久化到mysql中
二、集群
1.部署架构图:
2、节点规划:
节点
|
端口
|
192.168.xxx.xxx
|
8848/49/50
|
3、集群的搭建
(1)
找到conf/cluster.conf.example ,将其改名为 conf/cluster.conf ,并将内容改为如下:
# ip:port192.168.209.129:8848192.168.209.129:8849192.168.209.129:8850
(2)复制三份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
(3) 将 conf/application.properties 中的端口号分别改为:server.port=8848server.port=8849server.port=8850
三、配置服务代理
1.安装nginx
(1)安装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
2.配置nginx代理nacos
upstream nacos {
server 192.168.209.129:8848;
server 192.168.209.129:8849;
server 192.168.209.129:8850;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://nacos;
}
}
3.测试
(1)启动nacos集群:
[root@localhost upload]# cd /usr/local/nacos_cluster/nacos_8848/bin[root@localhost bin]# ./startup.sh
(2)启动nginx
[root@localhost nginx]# cd /usr/local/nginx/sbin/[root@localhost sbin]# ./nginx
(3)
将微服务注册到Nacos集群
(4).访问nacos集群
启动nacos-config服务,并通过nginx访问nacos集群:
http://192.168.209.129/nacos
四、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
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
(2)修改nacos的startup.sh
修改JAVA_HOME路径并注销之后的3行配置,如下:
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk1.8.0_191
#[ ! -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
(3)设置开机自启动
systemctl daemon-reload #重新加载服务配置systemctl enable nacos.service #设置为开机启动systemctl start nacos.service #启动nacos服务systemctl stop nacos.service #停止nacos服务