nacos安装
下载地址
https://github.com/alibaba/nacos/releases
自己选择合适版本下载 .tar.gz 格式,本文使用nacos-server-2.0.1.tar.gz版本,本文使用nacos单机模式
解压安装
tar -zxvf nacos-server-2.0.1.tar.gz
运行
进入bn目录
cd ./nacos/bin/
启动
sh startup.sh -m standalone
查看进程
ps -ef | grep nacos
查看网络端口 8848是否存在
netstat -lnpt | grep 8848
tcp6 0 0 :::8848 :::* LISTEN 2750/java
可视化访问(默认用户nacos,密码nacos)
http://部署机器ip地址:8848/nacos/#/login
项目构建
项目总体结构
父项目
pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.priv.nacos</groupId>
<artifactId>nacos-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>nacos-cloud</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.7.RELEASE</version>
<relativePath />
</parent>
<properties>
<spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<spring-cloud.version>Hoxton.SR4</spring-cloud.version>
<spring-boot.version>2.2.7.RELEASE</spring-boot.version>
</properties>
<!--全局引入springcloudalibaba下载依赖地址,并不会引入依赖 -->
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.7 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR4 -->
<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>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests> <!--默认关掉单元测试 -->
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<optimize>true</optimize>
<debug>false</debug>
<showDeprecation>true</showDeprecation>
<showWarnings>false</showWarnings>
<compilerArguments>
<verbose />
<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>nacos-producer</module>
<module>nacos-consumer</module>
</modules>
</project>
生产者项目
nacos配置中心添加生产者配置
项目结构
pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.priv.nacos</groupId>
<artifactId>nacos-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>nacos-producer</artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
bootstrap.yml
server:
port: 9002
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 自己nacos部署机器IP:8848
config:
server-addr: 自己nacos部署机器IP:8848
file-extension: yml
DemoCotroller.java
package com.priv.producer.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.priv.producer.service.DemoService;
@RestController
@RequestMapping("/producer")
public class DemoCotroller {
@Autowired
private DemoService demoService;
@RequestMapping("/test/{key}")
public String test(@PathVariable(name = "key") String key){
return demoService.test(key);
}
}
DemoService.java
package com.priv.producer.service;
public interface DemoService {
String test(String key);
}
DemoServiceImpl.java
package com.priv.producer.service.impl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Service;
import com.priv.producer.service.DemoService;
@RefreshScope
@Service
public class DemoServiceImpl implements DemoService{
@Value("${user.name}")
private String name;
@Value("${user.age}")
private Integer age;
@Override
public String test(String key) {
return key+"---->>>name:"+name+"==age:"+age;
}
}
NacosProducerApplication.java
package com.priv.producer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProducerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProducerApplication.class, args);
}
}
消费者项目
项目结构
pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.priv.nacos</groupId>
<artifactId>nacos-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>nacos-consumer</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
bootstrap.yml
server:
port: 9001
spring:
application:
name: nacos-comsumer
cloud:
nacos:
discovery:
server-addr: 自己部署nacos机器ip:8848
feign:
client:
config:
default:
connectTimeout: 20000
readTimeout: 20000
httpclient:
connection-timeout: 20000
connection-timer-repeat: 20000
enabled: true
max-connections: 200
max-connections-per-route: 50
DemoCotroller.java
package com.priv.consumer.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.priv.consumer.feign.DemoService;
@RestController
@RequestMapping("/consumer")
public class DemoCotroller {
@Autowired
private DemoService demoService;
@RequestMapping("/test/{key}")
public String test(@PathVariable(name = "key") String key){
return demoService.test(key);
}
}
DemoService.java
package com.priv.consumer.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.priv.consumer.feign.DemoService;
@RestController
@RequestMapping("/consumer")
public class DemoCotroller {
@Autowired
private DemoService demoService;
@RequestMapping("/test/{key}")
public String test(@PathVariable(name = "key") String key){
return demoService.test(key);
}
}
NacosConsumerApplication.java
package com.priv.consumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
测试
分别启动nacos-producer、nacos-producer 项目,查看服务注册nacos如下
使用postman进行消费者服务接口测试
修改nacos配置中心生产者服务配置如图,点击发布
再次使用postman进行消费者服务接口测试,返回数据信息,如图
结语
经过如上步骤测试,完成使用nacos作为注册中心、配置中心功能实现