准备好centos7,配好JAVA_HOME, Nacos下载地址 。
tar xf nacos-server-1.1.4.tar.gz -C {指定解压目录} cd {解压目录} #修改持久层为mysql(默认是用derby) #将 conf/nacos-mysql.sql怼到你的数据库 vi conf/application.properties #添加以下内容,具体内容根据自己的环境定,比如数据,用户和密码 # spring.datasource.platform=mysql # db.num=1 # db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true # db.user=nacos_devtest # db.password=youdontknow #启动单节点 sh startup.sh -m standalone #入口地址 #http://{本机ip}/nacos/index.html#/login #默认用户名/密码为 nacos/nacos 复制代码
nacos可以做为配置中心(同类产品有apollo, springcloud config), 注册中心(同类型eureka, consul,zookeeper)。
nacos可以做高可用,集群,具体怎么搭,请参考官网文档。
Maven Pom
<properties> <nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version> </properties> <dependencies> <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.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>${nacos-config-spring-boot.version}</version> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-actuator</artifactId> <version>${nacos-config-spring-boot.version}</version> </dependency> </dependencies> 复制代码
本地properties配置
nacos.config.server-addr=地址:8848 复制代码
@SpringBootApplication @NacosPropertySource(dataId = "first_data", groupId = "first_group", autoRefreshed = true) @RestController public class NacosApplication { @NacosValue(value = "${test.mytest:defaultString}", autoRefreshed = true) private String test; public static void main(String[] args) { SpringApplication.run(NacosApplication.class, args); } @GetMapping("/get") public JsonNode get() { ObjectNode jsonNodes = JsonNodeFactory.instance.objectNode(); jsonNodes.put("testStringIs", test); return jsonNodes; } } 复制代码
为什么用properties做nacos存储,因为我去整合yml,其中有一个maven依赖报错,我暂时无法解决。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.1.0.RELEASE</version> </dependency> 复制代码
报错如图,有人知道这是啥问题吗?
或者用spirng-cloud封装好的starter
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>0.9.0.RELEASE</version> </dependency> 复制代码
spring.cloud.nacos.config.server-addr=192.168.208.102:8848 spring.application.name=first_data spring.cloud.nacos.config.group=first_group spring.cloud.nacos.config.file-extension=properties 复制代码
这个starter是有坑的,比如我拿之前first_data / first_group,他发http请求会发到http://192.168.208.102:8848/nacos/v1/cs/configs?dataId=first_data.properties&group=first_group,但是这个地址是拿不到的,需要去除掉first_data后缀properties才能拿到数据的,不知道是spring封装的有问题还是。
父工程pom
<dependencyManagement> <dependencies> <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> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>0.9.0.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.1.0</version> </dependency> </dependencies> </dependencyManagement> 复制代码
子项目pom
<properties> <nacos-discovery-spring-boot.version>0.2.1</nacos-discovery-spring-boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.0.Final</version> </dependency> </dependencies> 复制代码
Springboot启动类
@SpringBootApplication @EnableDiscoveryClient public class Producer { public static void main(String[] args) { SpringApplication.run(Producer.class, args); } @RestController class EchoController { @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET) public String echo(@PathVariable String string) { return "Hello Nacos Discovery " + string; } } } 复制代码
application.properties
server.port=8100 spring.application.name=nacos-provider spring.cloud.nacos.discovery.server-addr=192.168.208.102:8848 复制代码
pom
<properties> <spring-cloud-openfeign.version>2.0.0.RELEASE</spring-cloud-openfeign.version> <spring-cloud-netflix.version>2.0.0.RELEASE</spring-cloud-netflix.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>${spring-cloud-netflix.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>${spring-cloud-openfeign.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency> </dependencies> 复制代码
启动类
@SpringBootApplication @EnableDiscoveryClient public class ConsumerApplication { @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } @RestController public class TestController { private final RestTemplate restTemplate; @Autowired public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;} @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET) public String echo(@PathVariable String str) { return restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class); } } } 复制代码
application.properties
server.port=8200 spring.application.name=service-consumer spring.cloud.nacos.discovery.server-addr=192.168.208.102:8848 复制代码