前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service
一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心;
Nacos:Dynamic Naming and Configuration Service;
Nacos就是注册中心+配置中心的组合:Nacos = Eureka+Config+Bus
替代Eureka做服务注册中心;替代Config做服务配置中心。
https://github.com/alibaba/Nacos
官网文档:
nacos官网
springcloud 中nacos介绍
1)本地Java8+Maven环境已经OK
2)先从官网下载Nacos: https://github.com/alibaba/nacos/releases/tag/1.1.4
3)解压安装包,直接运行bin目录下的startup.cmd
4)命令运行成功后直接访问http://localhost:8848/nacos
默认账号密码都是nacos
2、POM文件
父POM文件增加:
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
最终文件:
UTF-8
1.8
1.8
4.12
1.2.17
1.16.18
5.1.47
1.1.16
1.3.0
com.atguigu.springcloud
cloud-api-commons
${project.version}
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
org.springframework.boot
spring-boot-dependencies
2.2.2.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR1
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
mysql
mysql-connector-java
${mysql.version}
com.alibaba
druid
${druid.version}
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.spring.boot.version}
junit
junit
${junit.version}
log4j
log4j
${log4j.version}
org.projectlombok
lombok
${lombok.version}
true
org.springframework.boot
spring-boot-maven-plugin
true
true
3、YML文件
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
4、主启动
@EnableDiscoveryClient #开启客户端服务注册发现
@SpringBootApplication
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
5、业务类
@RestController
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id)
{
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}
6、测试
测试网址:
http://lcoalhost:9001/payment/nacos/1
或者
http://127.0.0.1:9001/payment/nacos/1
7、nacos控制台
查看nacos服务注册中心+服务提供者9001都ok了?
如果没有问题 为了下一章节演示nacos的负载均衡,参照9001新建9002;
1、新建Module(cloudalibaba-consumer-nacos-order83)
2、POM文件
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
3、YML文件
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
service-url:
nacos-user-service: http://nacos-payment-provider
4、主启动
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{
public static void main(String[] args)
{
SpringApplication.run(OrderNacosMain83.class,args);
}
}
5、业务类
ApplicationContextBean类:
@Configuration
public class ApplicationContextConfig
{
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
}
OrderNacosController类:
@RestController
@Slf4j
public class OrderNacosController
{
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id)
{
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
6、测试
nacos控制台:
测试网址: 查看83访问9001/9002,轮询负载OK?
http://localhost:83/consumer/payment/nacos/13
Nacos和CAP关系
7. Nacos支持AP和CP模式的切换
1、新建Module(cloudalibaba-config-nacos-client3377)
2、POM文件
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
3、YML
application.yml配置信息
spring:
profiles:
active: dev
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 #指定yaml格式的配置
4、主启动
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
5、业务类
@RestController
@RefreshScope
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
注意:
@RefreshScope
6、在Nacos中添加配置信息
Nacos界面配置对应
7、Nacos中的匹配规则
Nacos中的匹配规则,Nacos中的dataid的组成格式与SpringBoot配置文件中的匹配规则
运行后找不到配置文件 :这里有大坑
2、Nacos的图形化管理界面
命名空间:
3、Namespace+Group+Data ID三者关系?为什么这么设计?
4、举例子: Case
也可以直接指定需要加载的配置
spring.application.name=gulimall-product
#
spring.cloud.nacos.config.server-addr=121.89.172.98:8848 #nacos服务地址
spring.cloud.nacos.config.namespace=aa1cc650-df22-4230-951f-ab259c8d1847 命名空间id
spring.cloud.nacos.config.group=dev #分组id
##
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
##
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
##
spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true
#
下载地址:nacos
解压运行
官方安装运行步骤
https://nacos.io/zh-cn/docs/quick-start.html 单机版运行
运行日志:在nacos/logs/下查看运行日志
问题1运行出错:
readlink: 缺少操作数
Try 'readlink --help' for more information.
dirname: 缺少操作数
Try 'dirname --help' for more information.
ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!
解决方案:
参考地址:Nacos启动报错解决:which: no javac in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
没有配置java的环境变量
java环境变量的配置方法不是安装JAVA_HOME的方式
nacos这边是java_home下的bin目录,当时安装jdk使用的yum命令安装的,自动没带上jre目录。所以修改了java_home的路径到jre即可。
运行成功:
问题2:虚拟机内部可以访问 nacos 在windows中无法访问
解决方案
关闭防火墙
CentOS 7.0默认使用的是firewall作为防火墙
查看防火墙状态
firewall-cmd --state
停止firewall
systemctl stop firewalld.service
禁止firewall开机启动
systemctl disable firewalld.service
配置mysql
mysql 授权远程访问
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
flush privileges;
如果不是本地的还要注意远程的端口是否开放
centos7配置
192.168.88.3:3333
192.168.88.3:4444
192.168.88.3:5555
把nacos项目复制3份 份别修改各自端口号
最终失败!!!
问题:运行后虚拟机卡死
解决办法
修改nacos\bin\startup.sh文件调整java虚拟机启动内存
默认为2G 修改为128M即可
转换采用windows版本的
windows版本配置(数据库配置参考上边)
启动方式:
startup -m cluster 以集群方式启动
1.把项目复制三份(避免复制这里采用虚拟机运行参数设置把一个项目启动三次)
2. 配置nacos\conf\cluster.conf 注意 是.conf 最终加载的是,conf文件 不加载.example(示例文件)
参考地址CentOS 7 下 yum 安装和配置 Nginx (亲测无坑)
修改\nginx-1.18.0\conf\nginx.conf
./nginx -c /tool/nginx/nginx.conf
查看是否运行成功
ps -ef|grep nginx
由于nacos在centos7下集群启动失败
所以nginx也采用windows配置 (和centos7配置相同)
用消费端远程调用服务提供者 也是好用的
现在关闭nginx 发现三个nacos中的服务都没了 但是 不影响 消费端调用服务提供者不知道为什么