springCloud之Nacos学习
nacos是什么: 官网介绍–Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
提示:本文章为本人学习使用,如有不足请多多指教!
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
- nacos参考学习文档
- 如何使用nacos
- 单机环境及集群环境配置nacos
提示:以下是本篇文章正文内容,下面案例可供参考
一、Nacos官方参考文档
- Nacos文档:
https://nacos.io/zh-cn/docs/what-is-nacos.html - NacosGit地址
https://github.com/alibaba/nacos - Nacos各个版本下载地址
https://github.com/alibaba/nacos/tags
点击版本号,下拉到最后,选择版本
备注:这里使用了1.1.4版本的Windows及linux版
接下来将先使用windows版直接安装nacos
二、使用步骤
1. 解压Windows压缩包,解压后如下所示:
双击bin目录下startup.cmd:
代码如下(示例):
访问 http://localhost:8848/nacos/#/login 显示如下界面:
以上就是nacosWindows版启动单机版的步骤
2. springCloud 集成Nacos的服务治理与服务发现
父pom引入jar包
<!-- 版本为-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.22</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>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- springBoot 2.2.2 -->
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-alibaba-->
<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>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- mybatis-->
<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>
</dependency>
</dependencies>
</dependencyManagement>
新建子项目cloud-alibaba-provider-payment-9001
pom引入jar包为:
<name>alibaba-nocas-客户端-9001</name>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-provider-payment-9001</artifactId>
<dependencies>
<!-- nacos注册中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- <version>2.1.0.RELEASE</version>-->
</dependency>
<!-- 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> <!--实现springboot的热加载-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
</dependencies>
application.yml 配置为:
server:
port: 9001
spring:
application:
name: nocas-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #指定服务注册地址
management:
endpoints:
web:
exposure:
include: '*'
启动类:
/**
* @author mgy
* @version 1.0
* @date 2020/9/24
* {@link @EnableDiscoveryClient 服务注册与发现}
*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosCenter {
public static void main(String[] args) {
SpringApplication.run(NacosCenter.class,args);
}
}
测试访问接口 controller.PaymentController:
@RestController
@Slf4j
public class PaymentController {
@Value("${server.port}")
private String port;
@GetMapping("/payment/nacos/{id}")
public String getPort(@PathVariable("id") Integer id){
return "nacos success ok port:"+port+" value :"+id;
}
}
启动该服务: 并查看Nacos管理中心,会发现我们的nocas-payment-provider已经注册成功
以该项目为模板,新建相同项目端口为9002,注意
spring:
application:
name: nocas-payment-provider
需要相同,因为即将我们要测试Nacos的负载均衡
接下来我们启动cloud-alibaba-provider-payment-9002项目,并查看服务列表,显示如下:
然后我们测试接口是否畅通: 访问 http://localhost:9001/payment/nacos/1
及http://localhost:9002/payment/nacos/1
查看返回信息:
以上,我们的两个服务提供者就已经创建好了。接下来我们测试Nacos的负责均衡
3. Nacos负载均衡
新建项目名为cloud-alibaba-consumer-nacos-order-83
pom.xml
<artifactId>cloud-alibaba-consumer-nacos-order-83</artifactId>
<dependencies>
<!-- nacos注册中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- <version>2.1.0.RELEASE</version>-->
</dependency>
<!-- 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> <!--实现springboot的热加载-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
</dependencies>
application.yml
port: 83
spring:
application:
name: nocas-order-consumer
cloud:
nacos:
discovery:
#注册地址
server-addr: localhost:8848
配置RestTemplate
@Configuration
@Slf4j
public class ApplicationConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
log.info("注册RestTemplate.....");
return new RestTemplate();
}
}
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosPaymentProivder {
public static void main(String[] args) {
SpringApplication.run(NacosPaymentProivder.class,args);
}
}
请求接口controller
@Slf4j
@RestController
public class OrderPaymentController {
public static final String URL = "http://nocas-payment-provider";
@Resource
private RestTemplate restTemplate;
/**
* 测试nacos 负载均衡
* @param id
* @return
*/
@GetMapping("/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Integer id) {
return restTemplate.getForObject(URL + "/payment/nacos/" + id, String.class);
}
}
启动该服务,访问接口 http://localhost:83/consumer/payment/nacos/1
对此,服务的负载均衡测试成功
4. Nacos持久化
目前只持久化到mysql并推荐mysql使用主备模式
修改conf目录下application.properties
最后处增加以下配置–请使用本机配置
# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos-mysql?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
本机执行该sql文件
https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql
或者在conf下nacos-mysql.sql文件执行–请注意匹配的数据库名称
4.1. Nacos配置中心
新增cloud-alibaba-config-nacos-client-3377项目测试
pom文件
<!-- nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos注册中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- <version>2.1.0.RELEASE</version>-->
</dependency>
<!-- 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> <!--实现springboot的热加载-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
</dependencies>
配置文件–这里有bootstrap.yml【系统级】application.yml【用户级】
bootstrap.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #指定服务注册地址
config:
server-addr: localhost:8848 #指定配置中心地址
file-extension: yaml
# group: TEST_GROUP #分组
# namespace: 25363260-45ee-45b0-8d19-10a0a8d08c4d #命名空间
application.yml
spring:
profiles:
active: dev
# active: test
# active: info
启动类
@SpringBootApplication
@EnableDiscoveryClient
public class ConfigNacosCenter3377 {
public static void main(String[] args) {
SpringApplication.run(ConfigNacosCenter3377.class,args);
}
}
controller层
@RestController
@RefreshScope //支持nacos的动态刷新
public class NacosCenterController {
@Value("${config.info}")
private String configInfo;
@GetMapping("config/info")
public String getConfigInfo(){
return configInfo;
}
}
这里的controller层获取了config.info的配置信息,我们以上yml中都没有该配置的信息,那么我们将需要在Nacos管理界面中新增该配置信息
点击配置列表:点击+号 data id输入
spring:
application:
name:
的值 也就是nacos-config-client 再加上
spring:
profiles:
active:
的值加上 file-extension:的值
也就是以下这种格式
${prefix}-${spring.profiles.active}.${file-extension}
根据以上条件 以下输入
然后我们启动cloud-alibaba-config-nacos-client-3377该项目
访问我们编写的测试接口 http://localhost:3377/config/info
显示如下:
以上就是该配置中心的测试 备注:分组及命名空间的测试暂不进行编写,请自行查阅哦
三、Linux下的Nacos集群环境搭建
1. 准备环境
1.1 该环境为Linux + nginx + Nacos * 3
1.2 将我们下载好的nacos 1.1.4上传到linux中
我上传的路径为: /opt/myNacos
解压后如下所示:
编辑conf下的cluster.conf
修改为: 这里我们启动三分Nacos 端口分别为 3333 3344 3355
#it is ip
#example
ip:3333
ip:3344
ip:3355
ip的查看命令为:
hostname -i
选择67的ip复制上去–结果如下:
#it is ip
#example
172.17.165.67:3333
172.17.165.67:3344
172.17.165.67:3355
1.3 修改启动文件命令:startup.sh
找到while getopts ":m:f:s:" opt
57行处
修改为:
while getopts ":m:f:s:p:" opt
do
case $opt in
m)
MODE=$OPTARG;;
f)
FUNCTION_MODE=$OPTARG;;
s)
SERVER=$OPTARG;;
#设置端口传参
p)
PORT=$OPTARG;;
?)
echo "Unknown parameter"
exit 1;;
esac
done
原格式为:
while getopts ":m:f:s:" opt
do
case $opt in
m)
MODE=$OPTARG;;
f)
FUNCTION_MODE=$OPTARG;;
s)
SERVER=$OPTARG;;
?)
echo "Unknown parameter"
exit 1;;
esac
done
第132行处也要进行修改:
原:nohup $JAVA ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
修改为:
#设置启动端口
nohup $JAVA -Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
因为目前是测试服务器,内存比较小,而nacos默认设置做大2g左右,最小1g左右,而我们要启动3份,所以我们要设置内存限制
原设置:
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
修改后:
JAVA_OPT="${JAVA_OPT} -server -Xms300m -Xmx300m -Xmn100m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=160m"
这里我们设置最大为300m最小为100m。可根据自身情况进行设定。 如果内存大的请忽略该修改。
1.4 nginx进行配置。
请先安装nginx,我这里使用的版本为 1.18 安装参考博客https://blog.csdn.net/grhlove123/article/details/47834673
先不要启动,因为我们还需要修改配置文件
修改/usr/local/nginx/conf/nginx.conf
配置文件
1. #gzip on; 下增加以下配置
#gzip on;
# 集群nacos
upstream cluster{
server 127.0.0.1:3333;
server 127.0.0.1:3344;
server 127.0.0.1:3355;
}
修改访问端口为 1111
location修改成以下:
server {
# 访问端口
listen 1111;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# root html;
# index index.html index.htm;
proxy_pass http://cluster;
}
以上为nginx修改的地方
2. 进行测试
在/opt/myNacos/nacos/bin
下依次执行该命令
./startup.sh -p 3333
./startup.sh -p 3344
./startup.sh -p 3355
在/usr/local/nginx/sbin
路径执行该命令
./nginx -c /usr/local/nginx/conf/nginx.conf
备注: /opt/myNacos
为我的目录,请注意与本机匹配 /usr/local/nginx
为nginx安装地址, 集群环境下也可以通过修改application.properties
进行持久化步骤,可参考4. Nacos持久化
启动后我们访问我们linux ip+ 1111
http://ip:1111/nacos/#/login
使用默认账号密码进行登录如果你看到该界面,那么您的nacos集群化部署就成功啦。。。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了nacos的使用,而nacos提供了大量能使我们快速处理方法。
友情提示:
道路千万条,安全第一条
代码不规范,亲人两行泪
要是喜欢就点个赞呗!谢谢亲