Spring Cloud Alibaba Nacos 服务注册与发现

1 篇文章 0 订阅
1 篇文章 0 订阅

nacos 注册中心

注册中心使用

引入nacos discovery , 并在SpingBoot启动类中添加@EnableDiscoveryClient 注解

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>

根据spring.factories来配置来完成相关类的注册,

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\
  com.alibaba.cloud.nacos.ribbon.RibbonNacosAutoConfiguration,\
  com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
  com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
  com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
  com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\
  com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
  com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration

我们来重点关注一下几个类,看名称可能是用来服务注册,NacosServiceRegistryAutoConfiguration用来注册管理这几个bean

public class NacosServiceRegistryAutoConfiguration {

	@Bean
	public NacosServiceRegistry nacosServiceRegistry(
			NacosDiscoveryProperties nacosDiscoveryProperties) {
		return new NacosServiceRegistry(nacosDiscoveryProperties);
	}

	@Bean
	@ConditionalOnBean(AutoServiceRegistrationProperties.class)
	public NacosRegistration nacosRegistration(
			NacosDiscoveryProperties nacosDiscoveryProperties,
			ApplicationContext context) {
		return new NacosRegistration(nacosDiscoveryProperties, context);
	}

	@Bean
	@ConditionalOnBean(AutoServiceRegistrationProperties.class)
	public NacosAutoServiceRegistration nacosAutoServiceRegistration(
			NacosServiceRegistry registry,
			AutoServiceRegistrationProperties autoServiceRegistrationProperties,
			NacosRegistration registration) {
		return new NacosAutoServiceRegistration(registry,
				autoServiceRegistrationProperties, registration);
	}

}

NacosServiceRegistry: 完成服务注册,实现ServiceRegistry
NacosRegistration: 用来注册时存储nacos服务端的相关消息
NacosAutoServiceRegistration: 继承spring 中的AbstractAutoServiceRegistration,AbstractAutoServiceRegistration实现ApplicationListener
通过事件监听发起服务注册,到时会调用NacosServiceRegistry.register(Registration)

服务注册

容器启动时->AbstractAutoServiceRegistration.onApplicationEvent(WebServerInitializedEvent event)->NacosServiceRegistry.register(Registration registration);
具体的代码,可以将nacos源码下载到本地,进行查看。

补充
在将服务注册到nacos时,在NacosServiceRegistry.register(Registration registration); 方法中添加心跳逻辑

服务提供者向nacos server发起注册前,先向nacos server建立起心跳检测机制,同时nacos server也有心跳检测,服务者不停向nacos server发布心跳检测,告知服务的健康状态,nacos server发现服务心跳检测超时会发布超时事件来告知消费者。

服务发现

服务发现有NacosWatch完成,NacosWatch实现了spring 的SmartLifecycle接口,他在容器启动和销毁时会调用对于的start()和stop()方法。

1、服务消费者订阅后会执行一个轮询任务(1s/次)用来拉去最新的服务提供者信息并实时更新,实现代码在HostReactor.UpdateTask中完成。

2、上面服务注册时我们说过,服务提供者注册时nacos服务端也有一个相应的心跳检测,当心跳检测超时也就是未及时收到服务提供者的心跳包,nacos server判定该服务状态异常 随后通过UDP推送服务信息用来告知对应服务消费者,服务消费者通过PushReceiver来处理udp协议,HostReactor.processServiceJson(String json)来更新本地服务列表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值