前四个字母为Nameing和Configuration的前两个字母,最后的s为Service。
Nacos
(Nacos:Dynamic Naming and Configuration Service)是一个更易于构建原生应用的动态服务发现、配置管理和服务管理平台。Nacos就是注册中心+配置中心的组合,它等价于Eureka
+Config
+Bus
。
它能替代Eureka
做服务中心,替代Config
做微服务配置中心。
安装之前首先下载Nacos
,下载地址https://github.com/alibaba/nacos/releases 。这里注意如果是Windows(有Java+MySQL8.0以下版本环境)可以下载完开箱即用。Windows启动如下命令。
startup.cmd -m standalone
如果你的MySQL
版本是8.x,使用方法如下:
1.下载源码git clone https://github.com/alibaba/nacos.git
2.用Idea打开项目,修改pom.xml
里面的MySQL
版本
mysql
mysql-connector-java
8.0.18
3.修改MySQL驱动 com/alibaba/nacos/naming/healthcheck/MysqlHealthCheckProcessor.java
// import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;原数据在24行
//将其替换
import com.mysql.cj.jdbc.MysqlDataSource;
4.重新编译
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
5.将编译好的文件复制到你所要存放的nacos的地方:
cp distribution xxx
mv distribution nacos
这时候就相当于你下载了一个支持MySQL8.x
的Nacos
。你可以用相对应得命令启动。
已经编译好下载地址:https://pan.baidu.com/s/1xVeg0t98BKlUbgvQMzTBxA 提取码:vssl
如果是Linux/Mac
,启动命令如下。
sh startup.sh -m standalone
启动之后可以访问Nacos
客户端,默认用户名密码都是nacos
1.创建springboot项目并添加依赖
1.8
2.2.0.RELEASE
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
2.配置文件配置
server.port=9001
spring.application.name=nacos-provider
# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=localhost:8848
3.启动文件添加注解
@EnableDiscoveryClient
@SpringBootApplication
public class AlibabaProviderApplication {
public static void main(String[] args) {
SpringApplication.run(AlibabaProviderApplication.class, args);
}
}
4.提供消费接口
@RestController
public class HelloController {
@Value("${server.port}")
String serverPort;
@GetMapping("/provider/hello")
public String hello(){
return "nacos1 hello"+serverPort;
}
}
5.再创建一个项目如上配置用于后面做负载均衡测试,或者如下图直接拷贝虚拟端口映射
6.启动项目测试提供的接口:http://localhost:9001/provider/hello
1.创建springboot项目并添加依赖,这里依赖与服务提供方相同
2.配置application.properties
server.port=9011
spring.application.name=nacos-consumer
spring.cloud.nacos.discovery.server-addr=localhost:8848
#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url.nacos-user-service=http://nacos-provider
3.配置注册RestTemplate
进行服务间接口调用
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
4.调用服务提供方接口
@RestController
public class OrderNacosController {
@Autowired
RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverUrl;
@GetMapping("/consumer/hello")
public String hello(){
return restTemplate.getForObject(serverUrl+"/provider/hello",String.class);
}
}
5.启动项目测试:http://localhost:9011/consumer/hello
1.创建springboot项目并引入依赖
1.8
2.2.1.RELEASE
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
2.对两个配置文件进行配置bootstrap.properties
和application.properties
,boostrap加载优先级高于application
bootstrap.properties:
server.port=3377
spring.application.name=nacos-config-client
# 注册中心
spring.cloud.nacos.discovery.server-addr=localhost:8848
# 配置中心
spring.cloud.nacos.config.server-addr=localhost:8848
# 这里指定的文件格式需要和nacos上新建的配置文件后缀相同,否则读不到
spring.cloud.nacos.config.file-extension=properties
# 分组配置
#spring.cloud.nacos.config.group=DEV_GROUP
# 命名空间配置
# spring.cloud.nacos.config.namespace=782bd58a-0902-4ac4-bef3-f145806eff3c
# 配置文件名称拼接公式,拼接后与nacos中相对于
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
详细说明参考https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
application.properties配置:
spring.profiles.active=dev
3.定义接口获取配置信息
@RestController
@RefreshScope //支持nacos动态刷新
public class ConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo(){
return configInfo;
}
}