系列文章目录
第一章 Nacos入门尝鲜-下载安装
文章目录
前言
上一篇演示了如何在本地的Windows环境中安装运行Nacos,可以看一下系列文章。
一、服务注册和负载均衡
1、搭建父工程
先搭建起nacos-test父工程,pom文件如下,使用到的是springCloud Hoxton.SR1版,和alibaba 2.1.0.RELEASE的版本,之前按照文档查了一下版本依赖但是结果报错,就只有降低版本了结果就没问题了。
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>nacos-provide</module>
<module>nacos-consumer</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.taikangsc</groupId>
<artifactId>nacos-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacos-test</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring.cloud.version>Hoxton.SR1</spring.cloud.version>
<spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<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-starter-actuator</artifactId>
</dependency>
<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>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>2.3.1.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2、搭建9001端口上的nacos-provide子工程
1、导入pom文件
POM文件中如下,导入discovery和config的starter,discovery用于服务的发现,config用于服务配置
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>nacos-test</artifactId>
<groupId>com.taikangsc</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nacos-provide</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</project>
2、application.yml
#端口
server:
port: 9001
#nacos注册中心地址
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
management:
endpoints:
web:
exposure:
include: "*"
#用于测试nacos的config动态实时更新配置
app:
name: zhangsan
3、新建bootstrap.yml
spring:
application:
name: nacos-producer
profiles:
active: dev
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
namespace: public
bootstrap与application
1.加载顺序
这里主要是说明application和bootstrap的加载顺序。
bootstrap.yml(bootstrap.properties)先加载
application.yml(application.properties)后加载
bootstrap.yml 用于应用程序上下文的引导阶段。
bootstrap.yml 由父Spring ApplicationContext加载。
父ApplicationContext 被加载到使用 application.yml 的之前。
2.配置区别
bootstrap.yml 和application.yml 都可以用来配置参数。
bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
application.yml 可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。
3、NacosProvideApplication.java
要想服务被被发现,就得在启动类上加上@EnableDiscoveryClient
/**
* @author Administrator
*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProvideApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProvideApplication.class, args);
}
}
4、NacosProvide9001.java
Controller代码:
/**
* @author Administrator
*/
@RestController
/**
该注解用于实时刷新配置文件
**/
@RefreshScope
@RequestMapping("/provider")
public class NacosProvide9001 {
@Value("${server.port}")
private String serverPort;
/**
用于测试config动态更新
*/
@Value("${app.name}")
private String userName;
@GetMapping("/get")
public String get() {
System.out.println(userName);
return userName;
}
@GetMapping("/getProviderServerPort")
public String getServerPort() {
return serverPort;
}
}
到此,我们的provider配置结束了,我们启动这个子工程,打开控制台我们会在服务管理-服务列表中看到我们的此服务
点进这条记录中的详情可以看到我们运行在9001端口上的服务运行正常
3、搭建9002端口上的nacos-provide子工程
我们新建一个provider子工程运行在9002端口,搭建方法还是同9001的provider子工程。我偷懒就直接用copy了一份改了配置。
4、搭建9003端口上的nacos-consumer子工程
1、pom文件
这里我们只需要引入spring-cloud-starter-alibaba-nacos-discovery
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>nacos-test</artifactId>
<groupId>com.taikangsc</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nacos-consumer</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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-actuator</artifactId>
</dependency>
</dependencies>
</project>
2、application.yml
server:
port: 9003
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: nacos-consumer
service-url:
#这个地址写nacos的服务列表里面的名称,保持一致,这个名称也是provider中的spring:application:name: nacos-producer
nacos-user-service: http://nacos-producer
3、NacosConsumerApplication.java
同样要加上@EnableDiscoveryClient
该注解
/**
* @author Administrator
*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
4、NacosConsumer9003.java
/**
* @author Administrator
*/
@RestController
public class NacosConsumer9003 {
@Resource
private RestTemplate restTemplate;
@Value("${server.port}")
private String serverPort;
@Value("${service-url.nacos-user-service}")
private String serverUrl;
@GetMapping("/getServerPort")
public String getServerPort() {
return restTemplate.getForObject(serverUrl + "/provider/getProviderServerPort", String.class);
}
}
5、Config.java
配置实现负载均衡,关键注解@LoadBalanced
,前提这里我们新建一个provider子工程运行在9002端口,搭建方法还是同9001的provider子工程。
/**
* @author Administrator
* 实现负载均衡
*/
@Configuration
public class Config {
@Bean
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
5、启动
我们先启动9001再启动9002,我们可以分别访问http://localhost:9001/provider/getProviderServerPort、http://localhost:9002/provider/getProviderServerPort
看到分别出现9001、9002
再启动9003的nacos-consumer,查看控制台可以看到现在我们有两个微服务正在运行
接着我们访问http://localhost:9003/getServerPort可以看到9001、9002反复出现。这就实现了我们的服务注册和负载均衡。
下一篇我们会看一下如何实现服务配置的动态实时刷新。