【Nacos】02-Nacos注册中心与SpringCloud
Nacos注册中心与SpringCloud
简介
nacos:服务的注册中心与配置中心
应用
服务注册
编码
项目结构
pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
<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>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14server:
port: 9011
spring:
application:
name: cloud-ali-service
cloud:
nacos:
discovery:
server-addr: nacos8848.com:8848 # nacos注册中心 地址配置。注意:不能加前缀http,会报错
management:
endpoints:
web:
exposure:
include: '*'AliServiceMain9011.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24/**
* 1. nacos-注册中心
* 1.1 依赖
* spring-cloud-alibaba-nacos-discovery
* 1.2 配置
* spring:
* cloud:
* nacos:
* discovery:
* server-addr: nacos8848.com:8848 # nacos注册中心 地址配置。注意:不能加前缀http,会报错
* 1.3 启动类
* 添加注解:@EnableDiscoveryClient
* @author zsq
* @create 2021-09-04-23:03:32
*/
public class AliServiceMain9011 {
public static void main(String[] args) {
SpringApplication.run(AliServiceMain9011.class);
}
}TestController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class TestController {
public String ok( String id){
String result = "ali.service - ok - id = " + id;
log.info(result);
return result;
}
}启动项目,并编写相同服务,改项目名称为
cloud-ali-service-9012
使用
打开
http://nacos8848:8848/nacos
,找到服务列表服务名:cloud-ali-service
实例数:2
查看详情
负载均衡
编写一个cloud-ali-service的服务消费者,通过负载均衡调用生产者提供的接口。
由下图可见,nacos服务注册中心引入了ribbon依赖,是得其可以通过负载均衡实现生产者服务的接口调用
编码
编写消费者服务的代码
项目结构
pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
<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>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.8</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13server:
port: 9021
spring:
application:
name: cloud-ali-consumer
cloud:
nacos:
discovery:
server-addr: nacos8848.com:8848
# 消费者将要去访问的微服务名称,该路径名自己取。代码中通过@Value引入微服务名
nacos-server:
service-name: cloud-ali-serviceAliConsumerMain9021.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39/**
* 1. 消费者负载均衡调用生产者
* 1.1 依赖
* spring-cloud-alibaba-nacos-discovery:该依赖中包含ribbon的依赖
* 1.2 配置
* server:
* port: 9021
* spring:
* application:
* name: cloud-ali-consumer
* cloud:
* nacos:
* discovery:
* server-addr: nacos8848.com:8848
* # 消费者将要去访问的微服务名称,该路径名自己取。代码中通过@Value引入微服务名
* nacos-server:
* service-name: cloud-ali-service
* 1.3 启动类
* 添加注解:@EnableDiscoveryClient
* 1.4 配置类
* 使用注解:@Bean,@LoadBalanced
* public RestTemplate getRestTemplate() {
* return new RestTemplate();
* }
* 注解LoadBalanced:启动负载均衡
* 1.5 控制层
* 见该类{@link ConsumerTestController}
* @author zsq
* @create 2021-09-04-23:55:25
*/
public class AliConsumerMain9021 {
public static void main(String[] args) {
SpringApplication.run(AliConsumerMain9021.class);
}
}RestTemplateConfig.java
1
2
3
4
5
6
7
8
9
public class RestTemplateConfig {
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}ConsumerTestController.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class ConsumerTestController {
private RestTemplate restTemplate;
/**
* 服务名称:cloud-ali-service
*/
private String serverName;
/**
* 1. 使用ribbon负载均衡,通过服务名称serverName,调用服务接口
* 2. 负载均衡调用方式`restTemplate.getForObject("http://serverName/path", String.class)`
* @param id 入参
* @return result
*/
public String ok( String id){
String result = "ali.consumer - ok - id = " + id;
log.info(result);
return restTemplate.getForObject("http://" + serverName + "/test/ok/" + id, String.class);
}
}启动项目
注意:nacos中服务调用使用的负载均衡为ribbon,因此启动负载均衡需要使用@LoadBalance
注解
使用
调用接口
http://localhost:9021/consumer/ok/1
5次页面返回结果:
生产者服务中,接口的调用情况,查看日志。两接口均被调用
cloud-ali-service:9011
cloud-ali-service:9012
如果此时还不能确定是否调用负载均衡,可以使用如下操作:
修改生产者的返回值:将
端口号
也加入到返回值中即可1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class TestController {
private Integer port;
public String ok( String id){
String result = "ali.service - " + port + " - ok - id = " + id;
log.info(result);
return result;
}
}重启项目后,再次调用接口
http://localhost:9021/consumer/ok/1
,返回结果如下:结果:
ali.service - 9012 - ok - id = 1
结果:
ali.service - 9011 - ok - id = 1
可以发现,负载均衡真的配置成功了