赞
踩
这里需要LINUX的相关知识,会比较长
Nacos可以做到服务注册,服务配置和消息总线这三种功能,可以认为是eureka+config+bus三个组件结合到了一起。
下载地址
先说一下2020年9月23日时nacos的最新版本是1.3.2。
大家可以到nacos的官网:**https://nacos.io/zh-cn/**进行下载
zip的是windows版本而tar.gz是linux版本
下载完成之后解压之后通过cmd进入nacos-server-1.3.2\nacos\bin文件夹
进入之后运行startup.cmd -m standalone可以进入nacos的单机模式,运行成功界面如下
运行成功之后我们可以在浏览器中输入http://localhost:8848来进入nacos
用户名和密码都是nacos
接下来我们要设计几个服务端和用户端来进行注册
首先我们先把alibaba的包导入到父文件中
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
创建一个服务端,我命名为cloudalibaba-provider-payment9001
这是服务端的pom
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <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.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
这里是application.yml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: "*"
这里的spring.cloud.nacos.discovery.server-addr是配置服务注册到哪个路径
yml里面management这一段是暴露所有服务当中的节点
这里是main方法
@SpringBootApplication
@EnableDiscoveryClient
public class AlibabaProviderMain9001 {
public static void main(String[] args) {
SpringApplication.run(AlibabaProviderMain9001.class,args);
}
}
下面写了一个controller来一会给用户端调用
@RestController
public class NacosPaymentController {
@Value("${server.port}")
private String port;
@GetMapping(value = "/payment/provider/nacos/{id}")
public String getNacosInfo(@PathVariable("id") String id){
return "nacos registry,serverport:"+port+"\t"+"id:"+id;
}
}
为了弄集群,在创建一个一模一样的9002,就不重复了在这里插入代码片
下面我们创建用户端83
pom
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- SpringBoot整合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>com.qwf</groupId> <artifactId>cloud-api-commons</artifactId> <version>${project.version}</version> </dependency> <!--日常通用jar包配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
application.yml
server:
port: 83
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
application:
name: nacos-order-consumer
service-url:
nacos-user-service: http://nacos-payment-provider
main
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerMain83 {
public static void main(String[] args) {
SpringApplication.run(ConsumerMain83.class,args);
}
}
因为服务端和nacos链接还是用的resttemplate,所以我们先创建一个config
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
nacos里面有ribbon进行负载调节,所以可以直接使用@LoadBalanced注解
下面我们创建controller
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String URL;
@GetMapping(value = "/payment/consumer/nacos/{id}")
public String getNacosInfo(@PathVariable("id") String id){
return restTemplate.getForObject(URL+"/payment/provider/nacos/"+id,String.class);
}
}
@Value("${service-url.nacos-user-service}")这个注解是向nacos获取调用名称为nacos-user-service的url链接
我们先运行9001和9002,再运行83
通过调用http://localhost:83/payment/consumer/nacos/1得到
而因为我们配置了@LoadBanlancer,nacos会让我们的访问轮询服务,下一次就是9001。
接下来就是配置nacos的config
我们先在nacos的配置列表中添加一个新的配置
注意,配置的名称要严格按照
s
p
r
i
n
g
.
a
p
p
l
i
c
a
t
i
o
n
.
n
a
m
e
−
{spring.application.name}-
spring.application.name−{spring.profile.active}-${spring.cloud.nacos.config.file-extension}
当spring.profile.active没有配置时可以为空,但是有时会发生莫名其妙的bug,以防万一还是配置起来
下面我先创建config
pom
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <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.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
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: DEFAULT_GROUP
namespace: 951f28df-d5d7-459b-a033-bd9bfe641315
spring.cloud.nacos.config.file-extension是导入的文件类型
spring.cloud.nacos.config.group 是文件属于哪个组
spring.cloud.nacos.config.namespace是文件属于哪个命名空间
spring.cloud.nacos.config.ext-config是可以再加载的config,而且是数组形式可以写多个。
例如spring.cloud.nacos.config.ext-config[0].data-id这个是传入配置文件名
spring.cloud.nacos.config.ext-config[0].group这个是传入配置所在的组
spring.cloud.nacos.config.ext-config[0].refresh这个是传入配置是否动态刷新
application.yml
spring:
profiles:
active: dev
现在我们再来看上文提到的
spring.application.name-spring.profile.active-spring.cloud.nacos.config.file-extension
spring.application.name对应了bootstrap中的nacos-config-client
spring.profile.active对应了application中的dev
spring.cloud.nacos.config.file-extension对应了bootstrap的yaml
所以我们创建的名称为nacos-config-client-dev.yaml
main方法
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class,args);
}
}
controller方法
@RestController
@RefreshScope
public class NacosConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping(value = "/config/info")
public String getConfigInfo(){
return configInfo;
}
}
通过@RefreshScope来支持进行动态刷新,@Value("${config.info}")来获取配置文件nacos-config-client-dev.yaml的config.info的内容
接下来我们需要配置nacos集群来使我们的代码更加健壮
而nacos在windows系统下的集群支持不如linux,所以我们先来学习linux的环境配置
我选择的是CentOS8
CentOS8下载地址:https://www.centos.org/download/
我使用VMWare来构建虚拟机
VMWare下载地址:https://www.cr173.com/soft/68480.html
安装完成之后我们打开linux
使用root用户打开终端输入yum install java-1.8.0-openjdk -y
可以直接配置好java环境,可以输入java -version来观察java环境是否配置成功
接下来我们配置nginx环境
1.先测试一下linux有没有自带gcc
gcc -v
没有gcc的话安装gcc:
yum install gcc -y
2. 安装pcre和pcre-level库
pcre是perl库,包括Perl兼容的正则表达式库,而nginx的http模块使用正则表达式,所以需要安装。
安装命令:
yum install pcre pcre-devel -y
3. zlib安装
zlib解压缩组件
安装命令:
yum install zlib zlib-devel -y
4. OpenSSL
自然,没有OpenSSL,信息和裸奔没有区别了
安装命令:yum install OpenSSL OpenSSL-devel -y
上面都配置完成了,我们就可以安装Nginx了
1. 下载Nginx
wget http://nginx.org/download/nginx-1.18.0.tar.gz
2020年9月23日当前稳定版本是1.18.0
可以到http://nginx.org/en/download.html来查看
2. 把Nginx解压到usr/local/java
tar -zxvf nginx-1.18.0.tar.gz
3. 进入到usr/local/java/nginx-1.18.0
cd usr/local/java/nginx-1.18.0
执行下面几条命令
./configure
make
make install
接下来安装mysql
https://blog.csdn.net/weixin_42266606/article/details/80879571
这篇博客写的很详细,就不重复了
mysql安装完毕之后我们下载一个Navicat,是mysql的图形化界面,看起来可以更加直接明白
Navicat下载地址:http://www.navicat.com.cn/download/direct-download?product=navicat15-premium-cs.AppImage&location=2
下载完毕之后把软件放到opt当中,打开终端输入下面两行代码
chmod +x navicat15-premium-cs.AppImage
./navicat15-premium-cs.AppImage
我们链接数据库之后先创建一个nacos_config数据库
创建完成之后调用usr/local/nacos-server-1.3.2/nacos/nacos-mysql.sql文件
这个数据库创建是为了nacos集群调用时的数据统一。
创建完成之后我们来调试nacos的配置
首先我们打开nacos所在文件的终端
我们先复制一份application.properties留一个备份
cp application.properties application.properties.init
复制的命名application.properties.init
之后我们在application.properties文件的末端添加这么一段代码
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql:127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
这里说明使用的数据库类型为mysql,有一个数据库,链接数据库的url地址,数据库的用户名和密码
之后配置cluster.conf.example
同理先备份一份
cp cluster.conf.example cluster.conf
新文件为cluster.conf,我们配置cluster.conf
首先我们在终端中输入下面这段代码查看IP
hostname -i
看到ip为127.0.0.1我们在cluster.conf中输入三个服务节点
127.0.0.1:3333
127.0.0.1:4444
127.0.0.1:5555
我们再修改nacos/bin/startup.sh
我们在while getopts “:m:f:s:c:p:” opt当中添加一个o代表port
再在选择里添加一个
o)
PORT=$OPTARG;;
最后在最下方修改
原本代码
# start
echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &
nohup $JAVA ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
echo "nacos is starting, you can check the ${BASE_DIR}/logs.start.out"
修改为
到此我们nacos集群配置修改完成
最后我们修改nginx配置
我们打开usr/local/nginx-1.18.0/conf/nginx.conf
自然要复制一份
cp nginx.conf nginx.conf.inix
我们在server这边先修改默认监听端口80为1111,
再把root和index全部注掉,改为proxy_pass http://cluster
最后在server上方添加
upstream cluster {
server 127.0.0.1:3333
server 127.0.0.1:4444
server 127.0.0.1:5555
}
到此全部配置完成我们先运行nginx
./nginx -c usr/local/nginx/conf/nginx.conf
移动到nacos再运行三个配置过的nacos
cd usr/local/nacos-server-1.3.2/nacos/bin
./startup.sh -o 3333
./startup.sh -o 4444
./startup.sh -o 5555
接下来在虚拟机中的浏览器运行127.0.0.1:1111/nacos到此nacos集群配置完成
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。