Eureka与Nacos注册中心学习笔记

Eureka注册中心

操作流程

1)EurekaServer

  1. 引用依赖 //引入服务端的依赖
<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
  1. 启动类加注解 //@EnableEurekaServer

  2. application.yml配置

server:
  port: 10086  #服务端口
spring:
  application:
    name: eureka_server   #eureka的服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka    #eureka的地址信息

2)提供者-服务注册

  1. 引用依赖 //引入客户端的依赖
  2. application.yml配置
server:
  port: 8080
spring:
  application:
    name: providerservice   #provider_service提示有问题,自己留意
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

3)消费者-服务发现

  1. 引用依赖 //引入客户端的依赖
  2. application.yml配置
server:
  port: 8081
spring:
  application:
    name: consumerservice    #consumer_service提示有问题,自己留意
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
  1. 在配置类中注册使用RestTemplate,添加@LoadBalanced负载均衡,即使只有一个服务也需要添加该注解
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}
  1. 用服务提供者的服务名称进行远程调用

涨知识:

  • IDEA开启一个新的服务

  • 选中要copy的服务,按住ctrl+d,或者右键copy Configuration,记得修改Name和端口 -Dserver.port=8888
    Eureka与Nacos注册中心学习笔记_第1张图片

Eureka与Nacos注册中心学习笔记_第2张图片


总结:

和zookeeper很像,也是通过服务注册、拉取的方式实现远程调用。

如果服务名用下划线分割会出错,如provider_service会提示找不到,不知道为什么,可以自己留意下。

@LoadBalanced的含义:Ribbon负载均衡


Ribbon负载均衡

原理解析

Eureka与Nacos注册中心学习笔记_第3张图片
图片——黑马程序员


@LoadBalanced原理

  • 当使用@LoadBalanced注解,相当于使用一个拦截器拦截住了请求
  • LoadBalancerInterceptor负载均衡拦截器,请求交给RibbonLoadBalancerClient //获取url中的主机名,即服务id
  • 然后调用DynamicServerListLoadBalancer //将获取到的主机名(服务id)从eureka-server中拉取服务,返回获取服务列表
  • 调用IRule基于负载均衡的规则:轮询、随机,从服务列表中选择一个服务,返回给RibbonLoadBalancerClient
  • RibbonLoadBalancerClient将这个服务名称替换url中的主机名,得到一个真实的主机地址,进行访问。

Ribbon负载均衡策略

负载均衡策略图

Eureka与Nacos注册中心学习笔记_第4张图片

负载均衡规则

Eureka与Nacos注册中心学习笔记_第5张图片


修改负载均衡规则

方法一:代码方式

  • 全局的生效,调用哪个微服务都是使用该规则
@Bean
// return new RandomRule();// 随机
// return new RoundRobinRule();// 轮询
// return new RetryRule();

public IRule myRule(){
    return new RandomRule();
}

方法二:配置方式

  • 通过修改配置文件,针对某个微服务而言
userservice:     //针对某个微服务的服务名称
	ribbon: 
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则的全类名

加载规则

1)懒加载

默认懒加载,即第一次使用的时候才会去加载loadBalanceClient,请求时间会比较长。

2)饥饿记载

项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon: 
	eager-load:
		enabled: true    #开启饥饿加载
		clients: userservice   #指定对userservice这个服务饥饿加载,可以添加多个,用 “- 数组表达”

Nacos注册中心

  • Nacos是阿里巴巴的产品,现在是springcloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

快速入门

1. windows安装和启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPptoxHw-1649599351064)(C:\Users\Made\AppData\Roaming\Typora\typora-user-images\image-20220410163020575.png)]


  1. 解压

  2. 通过命令执行

    startup.cmd -m standalone
    

Eureka与Nacos注册中心学习笔记_第6张图片

  • 登录页面http://192.168.254.93:8848/nacos/index.html#/login

Eureka与Nacos注册中心学习笔记_第7张图片

启动成功!!


2. 使用步骤

nacas和eureka在使用上都遵循这相同的接口,由eureka转向nacos只需要:

1)更改依赖

父工程依赖:

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-alibaba-dependenciesartifactId>
    <version>2.2.5.RELEASEversion>
    <type>pomtype>
    <scope>importscope>
dependency>

客户端依赖:


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>

2) 更改配置文件中注册中心的地址,注释eureka地址,添加nacos地址:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
#eureka:
#  client:
#    service-url:
#      defaultZone: http://127.0.0.1:10086/eureka

3. 测试

记得开启nacos,再开启服务,测试成功,途中有遇到问题,用2.2.7就一直报错,2.2.5又可以了。

Eureka与Nacos注册中心学习笔记_第8张图片

非常清新友好的界面!


Nacos服务分级模型

1)Nacos服务分级存储模型

  1. 一级是服务,例如userservice
  2. 二级是集群,例如杭州或上海
  3. 三级是实例,列入杭州机房的某台部署了userservice额服务器

2)如何设置实例的集群属性

  • 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
      discovery:
        cluster-name: SH

结果:

Eureka与Nacos注册中心学习笔记_第9张图片


Nacos负载均衡

NacosRule根据集群负载均衡

  • 设置负载均衡和Ribbon一样,Nacos提供了优先查询本地集群内的服务,再进行随机,进行负载均衡。—NacosRule
#负载均衡的规则
userservice:  #要做配置的微服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
  • 当Order在集群SZ,User1、2在集群SZ,User3在集群SH,Order的请求都会优先访问User1、2服务,当User1、2挂掉的时候,会访问User3,同时发出警告日志。 -----一个跨集群的请求
04-10 18:16:29:711  WARN 13716 --- [io-8080-exec-10] c.alibaba.cloud.nacos.ribbon.NacosRule   :
A cross-cluster call occurs,name = userservice, clusterName = SZ, instance = [Instance{instanceId='192.168.254.93#8083#SH#DEFAULT_GROUP@@userservice', ip='192.168.254.93', port=8083, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName='SH', serviceName='DEFAULT_GROUP@@userservice', metadata={preserved.register.source=SPRING_CLOUD}}]

Nacos权重负载均衡

  • 直接在Nacos控制台页面设置权重值 0~1之间

  • 同集群内的多个实例,权重越高被访问的频率约高

  • 权重设置为0则完全不会被访问

Nacos环境隔离

  1. namespace用来做环境隔离
  2. 每个namespace都有唯一id
  3. 不同namespace下的服务都不可见

Nacos和Eureka的区别

共同点:

  1. 都支持服务注册和服务拉取 —(都是注册中心)
  2. 都支持服务提供者心跳方式做健康监测

不同点:

  1. Nacos支持服务端主动监测提供者状态:临时实例采用心跳模式,非临时实例采用主动监测模式;而Eureka只能采用心跳模式

  2. 临时实例心跳不正常会被剔除,非临时实例则不会被剔除 ----(临时实例捡的孩子,非临时实例不离不弃)

  3. Nacos支持服务列表变更的消息推送服务,服务列表更新更及时

    • 一旦Nacos列表有什么变动,注册中心会主动推送服务列表给消费者(服务拉取端),而Eureka不能,所以信息会比较停滞
  4. Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用Ap方式

reka的区别

共同点:

  1. 都支持服务注册和服务拉取 —(都是注册中心)
  2. 都支持服务提供者心跳方式做健康监测

不同点:

  1. Nacos支持服务端主动监测提供者状态:临时实例采用心跳模式,非临时实例采用主动监测模式;而Eureka只能采用心跳模式

  2. 临时实例心跳不正常会被剔除,非临时实例则不会被剔除 ----(临时实例是捡的孩子,非临时实例是不离不弃的亲生孩子)

  3. Nacos支持服务列表变更的消息推送服务,服务列表更新更及时

    • 一旦Nacos列表有什么变动,注册中心会主动推送服务列表给消费者(服务拉取端),而Eureka不能,所以信息会比较停滞
  4. Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用Ap方式

你可能感兴趣的:(自学java,分布式学习,java,eureka)