Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • SpringCloudAlibaba

  • MQ消息队列

  • Nginx

  • Elasticsearch

  • Gateway

  • Xxl-job

  • Feign

  • Eureka

    • Eureka基础
      • 1.配置Eureka服务端
      • 2.配置注册Eureka客户端
      • 3.服务发现
      • 4.Ribbon负载均衡
  • 中间件
  • Eureka
phan
2023-05-15
目录

Eureka基础

# Eureka基础

Eureka注册中心是服务端,所有微服务是客户端。

img

  • 消费者根据服务名称利用负载均衡算法向Eurake拉取提供者
  • 提供者每30秒向注册中心发送心跳请求,注册中心会把心跳不正常的服务剔除

# 1.配置Eureka服务端

  • 引入maven坐标依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1
2
3
4
  • 启动类上添加注解@EnableEurekaServer
  • springboot配置文件中添加①服务端口②客户端的url地址信息
server:
  port: 10086
spring:
  application:
    name: eurekaserver
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
1
2
3
4
5
6
7
8
9

# 2.配置注册Eureka客户端

  • 在user-service(微服务项目)引入maven坐标依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
1
2
3
4
  • springboot.yml文件添加配置
spring:
  application:
    name: orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
1
2
3
4
5
6
7
  • 复制多个服务实例:右键服务copy configuration->modify options->program arguments->--server.port=8082
image-20230301104936597

# 3.服务发现

  • 修改restTemplate.getForObject()方法的url地址,使用服务名代替ip和端口
String url = "http://userservice/user/" + order.getUserId();
1
  • 在消费者的启动类中的RestTemplate添加负载均衡注解@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}
1
2
3
4
5

# 4.Ribbon负载均衡

  • 负载均衡流程

根据URL向注册中心拉取对应服务(地址),并根据负载均衡策略最终返回一个服务,消费者调用。

  • 源码分析

本质上是一个拦截器,实现了interceptor方法,其中根据URL的服务名称先去注册中心返回服务列表,返回的服务列表(localhost:8081,localhost:8082)会向IRule基于各种规则(随机,轮询)选择服务,最后修改url发起请求。整个过程都是Client做的。

public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor {}
1

image-20230301112125356

  • 负载均衡策略

1.轮询2.随机

3.zone轮询(优先选择和消费者在同一个地域或者机房的服务,然后再进行轮询),IRule默认实现是这种方式

配置方法:在消费者服务的springboot配置文件中添加

userservice:
	ribbon:
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule# 负载均衡规则 
1
2
3
  • 懒加载

懒加载:Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。 饥饿加载:在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
	eager-load:
		enabled: true # 开启饥饿加载
			clients: userservice # 指定对userservice这个服务饥饿加载
1
2
3
4
编辑 (opens new window)
#中间件
上次更新: 2023/12/15, 15:49:57
Feign远程调用

← Feign远程调用

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式