1.Nacos注册中心
1.1. 什么是Nacos注册中心
注册中心主要有三部分组成:
Nacos-Server:注册中心
提供服务的注册和发现。
Nacos-Provider:服务提供方
把自身的服务实例注册到 Nacos Server 中
Nacos-Consumer:服务调用方
通过 Nacos Server 获取服务列表,消费服务。
1.1.1. 服务发现和负载均衡
服务发现是微服务架构中必不可少的组件,它可以让微服务动态地发现和调用其他服务。Naxos注册中心通过维护一个服务实例列表来实现服务发现,每个服务实例包括服务名称、IP地址、端口号等信息。当一个微服务需要调用其他服务时,它可以向Naxos注册中心发送服务名称,Naxos注册中心将返回该服务的所有可用实例列表,微服务可以根据负载均衡策略选择其中一个实例进行调用。Naxos注册中心支持多种负载均衡算法,如轮询、随机等。
1.1.2. 配置管理
在微服务架构中,服务配置通常是分散在多个服务实例中的,Naxos注册中心提供了一个统一的配置中心,让微服务可以集中管理配置信息。Naxos注册中心支持动态配置更新,当一个配置项发生变化时,Naxos注册中心会自动通知到订阅该配置项的微服务。Naxos注册中心还支持配置版本控制和回滚,可以让微服务方便地管理和维护配置信息。
1.1.3. 健康检查
微服务架构中,服务实例的数量通常会动态变化,Naxos注册中心可以定期检查服务实例的健康状况,将不健康的服务实例从服务列表中删除,避免微服务调用不可用的服务实例。Naxos注册中心支持多种健康检查方式,如HTTP请求、TCP连接等。
1.1.4. 可扩展性和高可用性
Naxos注册中心是一个分布式的系统,可以通过多节点部署来实现高可用性。当一个节点出现故障时,其他节点可以自动接管它的工作,保证服务的可用性。同时,Naxos注册中心支持横向扩展,可以通过增加节点来提高系统的性能和容量。
1.1.5. 易于集成
Naxos注册中心提供了RESTful API和Java SDK,可以方便地集成到各种微服务框架中,如Spring Cloud、Dubbo等。
总之,Naxos注册中心是一个功能强大、易于使用和高可用性的服务发现和配置中心,可以为微服务架构提供基础设施支持。
1.2. Nacos注册中心入门
1.2.1. 修改nacos_provider
pom.xml
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>
</dependency>
application.yml
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.209.129:8848 #nacos服务的地址
application:
name: nacos-provider #向注册中心注册的名字
测试
1.2.2.修改nacos_consumer
pom.xml
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>
</dependency>
application.yml
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.209.129:8848 #nacos服务的地址
application:
name: nacos-consumer #向注册中心注册的名字
启动类APP
@SpringBootApplication
@EnableDiscoveryClient//向注册中心注册该服务,并可以获取其他服务的调用地址
public class ConsumerApp {
public static void main(String[] args) {
SpringApplication.run(ConsumerApp.class);
}
}
控制层controller
@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping(value="/getUserById/{id}")
public User getUserById(@PathVariable Integer id){
//获取nacos中注册的所有服务信息
List<String> serviceList = discoveryClient.getServices();
for (String service : serviceList) {
System.out.println(service);
}
//获取nacos中注册的指定服务信息
ServiceInstance instance = discoveryClient.getInstances("nacos-provider").get(0);
String serviceUrl = instance.getHost() + ":" + instance.getPort();
String url = "http://"+serviceUrl+"/provider/getUserById/"+id;
return restTemplate.getForObject(url, User.class);
}
}
测试