栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud从零到一之注册中心与负载均衡

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud从零到一之注册中心与负载均衡

SpringCloud从零到一之注册中心与负载均衡

文章目录
  • SpringCloud从零到一之注册中心与负载均衡
    • 简单搭建SpringCloud环境
    • 注册中心之Eureka
      • Eureka注册中心服务搭建
      • 服务的注册与发现
    • 负载均衡
      • 自定义负载均衡
      • 开启饥饿加载
    • 注册中心之Nacos
      • 服务分级存储模型
        • 配置服务集群
        • 修改负载均衡
      • 环境隔离
    • Eureka与Nacos的区别

了解分布式的朋友一定熟悉zookeeper,它起到的就是注册中心的作用,然后通过Dubbo可以进行服务的注册和订阅。微服务就是集分布式大成的东西,也是需要注册中心进行服务的注册和订阅。

简单搭建SpringCloud环境
		// SpringCloud环境简单搭建
		
            
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.2.6.RELEASE
                pom
                import
            
            
            
                mysql
                mysql-connector-java
                ${mysql.version}
            
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                ${mybatis.version}
            
        
注册中心之Eureka

Eureka作为SpringCloud的注册中心,可以进行服务的注册和发现。
主要流程如下:

  • A服务创建实例后,将信息注册到eureka-server中。
  • eureka-server保存服务名称到服务地址的映射关系。
  • B服务拉取eureka-server中的服务列表。
Eureka注册中心服务搭建
  1. 创建Eureka注册中心的模块进行搭建。
  2. 在启动类中增加==@SpringBootApplication==注解。
  3. 在springapplication.yml文件中填写以下配置文件,表明Eureka的地址、名称和端口号
	server:
	  port: 10086
	spring:
	  application:
	    name: eurekaserver # eureka的服务名称
	eureka:
	  client:
	    service-url: # eureka的地址信息
	      defaultZone: http://localhost:10086/eureka
  1. 访问localhost:10086查看是否配置成功。
服务的注册与发现
  1. 在该服务pom文件中引入以下依赖:

    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client

  1. 进行配置文件编写
spring:
  application:
    name: 服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka # 注册中心地址
  1. 如果想要进行服务的拉取和调用,需要进行以下几步:
    首先创建restTemplate并注入spring容器,通过其发送请求的api进行服务调用。
    然后在service层进行服务的调用。
   @Bean
    @LoadBalanced // 负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
  

	//  service层
	@Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2. 利用RestTemplate发送http请求,查询用户
        // 2.1 url
        String url = "http://userservice/user/"+order.getUserId();
        // 2.2 发送http请求,实现远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 3. 封装user到 order
        order.setUser(user);
        // 4.返回
        return order;
    }
负载均衡

SpringCloud中,内置了Ribbon进行负载均衡的配置,可以通过配置不同的负载均衡策略进行修改。
主要的负载均衡策略有三种:

  • 轮询
  • 随机
  • 权重
自定义负载均衡

通过定义IRule实现可以修改负载均衡规则,有两种方式:

  1. 通过代码的方式,创建负载均衡策略Bean并在RestTemplate的Bean实例前添加==@LoadBalanced==注解,该方式对所有的服务都进行该种方式的负载均衡策略。
	@Bean
	public IRule randomRule(){
	    return new RandomRule();
	}
  1. 在配置文件中配置。
serviceName: # 给某个微服务配置负载均衡规则,serviceName代指服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 
开启饥饿加载

由于Ribbon默认是懒加载,即调用时才创建,当用户第一次调用时还需要加载Ribbon,十分缓慢,所以使用饥饿加载,即初始化时就加载。

ribbon:
  eager-load:
    enabled: true
    clients: userservice
注册中心之Nacos

在父工程中添加依赖:


    com.alibaba.cloud
    spring-cloud-alibaba-dependencies
    2.2.6.RELEASE
    pom
    import

在各个服务中添加依赖:


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery

服务分级存储模型

我理解的服务分级存储模型就是Nacos对服务分集群进行管理;主要的目的在于容灾。
服务分级存储模型就是服务–>集群–>实例;通过这三个级别进行服务的调用与治理,看情况对同一/不同集群中的服务实例进行调用。

配置服务集群
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称
修改负载均衡

又由于默认的负载均衡策略无法优先同一集群进行负载均衡,所以需要修改负载均衡策略:

serviceName:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
环境隔离

Nacos提供了namespace来实现环境隔离功能。

  • nacos中可以有多个namespace
  • namespace下可以有group、service等
  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

给微服务配置namespace只能通过修改配置来实现:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
Eureka与Nacos的区别

Nacos与Eureka的相同点:

  • 都采用心跳进行健康检测
  • 都可以进行服务的注册和发现

Nacos与Eureka的区别:

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328155.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号