SpringCloud Eureka、Ribbon、Nacos学习笔记

1、Eureka注册中心
Eureka的作用:
1、消费者该如何获取服务提供者具体信息?

  1. 服务提供者启动时向eureka注册自己的信息
  2. eureka保存这些信息
  3. 消费者根据服务名称向eureka拉取提供者信息

2、如果有多个服务提供者,消费者该如何选择?

  1. 服务消费者利用负载均衡算法,从服务列表中挑选一个

3、消费者如何感知服务提供者健康状态?

  1. 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  2. eureka会更新记录服务列表信息,心跳不正常会被剔除
  3. 消费者就可以拉取到最新的信息

搭建EurekaServer服务:

  1. 创建项目,引入spring-cloud-starter-netflix-eureka-server依赖
<dependencies>
       <dependency>
           <groupId>org.springframework.cloudgroupId>
           <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
       dependency>
dependencies>
  1. 编写启动类,添加@EnableEurekaServer注解
@EnableEurekaServer//Eureka自动装配
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}
  1. 添加application.yml文件
server:
  port: 10010 #服务端口
spring:
  application:
    name: eurekaServer #服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10010/eureka #Eureka地址信息

服务注册:
将服务提供者与服务消费注册到Eureka中(服务消费者也可以做提供者)

  1. 引入spring-cloud-starter-netflix-eureka-client的依赖
<dependency>
	<groupId>org.springframework.cloudgroupId>
	<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
  1. 在application.yml中配置:
spring:
  application:
    name: userServer #user服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10010/eureka #eureka地址信息

服务发现:
使用RestTemplate发送远程调用

例:
@Service
public class OrderServiceImpl implements OrderService {
	@Autowired
	private RestTemplate restTemplate;
	
	@Override
	public Order queryOrderById(Long orderId) {
		Order order = orderMapper.findById(orderId);//通过订单id查询订单

		String url = "http://userServer/user/"+order.getUserId();//Eureka服务发现 userServer提供者服务名称
		User user = restTemplate.getForObject(url, User.class);//使用restTemplate发送HTTP请求实现远程调用返回user对象
		
		order.setUser(user);//封装user信息
		return order;
	}
}

RestTemplate添加@LoadBalanced负载均衡注解:

/**
 1. 创建RestTemplate注入spring容器,发送http请求
*/
@LoadBalanced//负载均衡
@Bean
public RestTemplate restTemplate(){
    return new RestTemplate();
}

Ribbon负载均衡:

  1. 负载均衡流程

SpringCloud Eureka、Ribbon、Nacos学习笔记_第1张图片

  1. 负载均衡策略
    SpringCloud Eureka、Ribbon、Nacos学习笔记_第2张图片
    Ribbon的负载均衡规则是一个叫做IRule的接口来定义的,每一个子接口都是一种规则
    SpringCloud Eureka、Ribbon、Nacos学习笔记_第3张图片
    通过定义IRule实现可以修改负载均衡规则,有两种方式:

1.代码方式:在消费者的配置类或者启动类中,定义一个新的IRule:

/**
* Ribbon负载均衡   默认轮询
* 全局生效
*/
@Bean
public IRule randomRule(){
    return new RandomRule();//随机
}

2.配置文件方式:

#配置Ribbon负载均衡  针对某个服务
userServer: #提供者服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

Ribbon饥饿加载配置:

#加载策略 Ribbon默认懒加载(第一次访问的时候会去创建LoadBalanceClient,所以第一次请求时间较长,而饥饿加载则会在项目启动时创建)
ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients: userServer # 指定对userServer这个服务饥饿加载

Nacos注册中心
1、服务注册到Nacos:
父工程中添加spring-cloud-alilbaba的管理依赖:


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

子工程添加Nacos客户端依赖:


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

配置yml文件:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址

启动测试:
SpringCloud Eureka、Ribbon、Nacos学习笔记_第4张图片

2、Nacos服务分级存储模型:
服务–集群–实例
设置实例的集群属性:
application.yml文件添加spring.cloud.nacos.discovery.cluster-name属性

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
      discovery:
        cluster-name: CS #集群名称

效果
SpringCloud Eureka、Ribbon、Nacos学习笔记_第5张图片

Nacos根据集群负载均衡:本地集群找不到提供者,才去其它集群寻找,并且会报警告
在消费者中设置负载均衡的IRule为NacosRule:

#配置Ribbon负载均衡  针对某个服务
userServer: #提供者服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则(优先选择本地集群,-随机)
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

3、Nacos权重设置:根据权重负载均衡
SpringCloud Eureka、Ribbon、Nacos学习笔记_第6张图片
SpringCloud Eureka、Ribbon、Nacos学习笔记_第7张图片
实例的权重控制:
1.Nacos控制台可以设置实例的权重值,0~1之间
2.同集群内的多个实例,权重越高被访问的频率越高
3.权重设置为0则完全不会被访问

4、Nacos环境隔离 - namespace
SpringCloud Eureka、Ribbon、Nacos学习笔记_第8张图片
SpringCloud Eureka、Ribbon、Nacos学习笔记_第9张图片
SpringCloud Eureka、Ribbon、Nacos学习笔记_第10张图片
application.yml添加namespace:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
      discovery:
        cluster-name: CS #集群名称
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 #nacos环境隔离(namespaceID)

你可能感兴趣的:(Java,eureka,java,ribbon)