nacos–基础–5.2.2–集成–SpringCloud–服务注册,发现,负载均衡
代码位置
https://gitee.com/DanShenGuiZu/learnDemo/tree/master/nacos-learn
1、介绍
- 服务发现客户端 从服务发现中心获取服务列表
- 服务消费 通过负载均衡获取服务地址
2、添加依赖
基于nacos–基础–springboot集成–01–前置 的代码进行操作
2.1、nacos-learn 新增依赖
pom.xml 整体如下
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>fei.zhou</groupId>
<artifactId>nacos-learn</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<!-- spring-boot 的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud 的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-alibaba 的依赖-->
<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>
</dependencies>
</dependencyManagement>
</project>
2.2、生产者,消费者 新增 服务发现依赖
<!--服务发现的客户端,
1、将自己的地址注册到服务发现中心
2、从服务发现中心获取服务列表-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3、服务注册(生产者)
3.1、修改配置
- 配置nacos服务发现相关的配置
- 修改完配置,重启服务
server:
port: 8081
spring:
application:
name: nacos-restful-provider #服务名
cloud:
nacos:
discovery:
server-addr: 192.168.187.171:8848 #服务发现中心地址
3.2、查看
- 服务名:每个服务在服务注册中心的标识
- 实例数:
- 就是同一个服务名,注册了多少个实例
- 每个实例都有自己的IP和端口
4、服务发现(消费者)
4.1、修改配置
配置nacos服务发现相关的配置
server:
port: 8088
##配置服务提供方的地址(ip和端口)
#provider:
# address: 127.0.0.1:8081
spring:
application:
name: nacos-restful-consumer #服务名
cloud:
nacos:
discovery:
server-addr: 192.168.187.171:8848 #服务发现中心地址
4.2、修改Controller中远程调用的代码
@RestController
public class ConsumerController {
// 要进行远程,需要知识提供方的ip和端口
// @Value("${provider.address}")
// private String provider;
@Autowired
LoadBalancerClient loadBalancerClient;
// 指定服务名
String serviceId = "nacos-restful-provider";
@GetMapping(value = "/consumer/service")
public String service() {
// 远程调用
RestTemplate restTemplate = new RestTemplate();
// String result = restTemplate.getForObject("http://"+provider+"/provider/service", String.class);
// 发现一个地址
ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);
System.out.println("服务注册中心的服务实例:"+serviceInstance.getUri());
// //获取一个http://开头的地址,包括ip和端口
URI uri = serviceInstance.getUri();
String result = restTemplate.getForObject(uri + "/provider/service", String.class);
return "消费者 执行服务 |" + result;
}
}
4.3、查看
查看注册中心
执行请求
查看消费者日志
5、负载均衡
- 2个生产者
- 1个消费者
5.1、启动2个生产者
5.2、消费者配置轮询策略
# 生产者服务,配置负载均衡
nacos-restful-provider:
ribbon:
# 轮询
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
5.3、测试
http://localhost:8088/consumer/service