微服务学习——Eureka

本贴最后更新于 571 天前,其中的信息可能已经天翻地覆

1、基础知识介绍

提供者与消费者

服务提供者:一次业务中,被其他微服务调用的服务(提供接口给其他服务)
服务消费者:一次业务中,调用其他微服务的服务(调用其他微服务提供的接口)

问题:服务 A 调用服务 B,服务 B 调用服务 C,那么服务 B 是什么角色?
一个服务既可以是消费者也可以是服务者,具体业务具体分析,抛开业务谈都是扯淡 😳

2、Eureka 注册中心

2.1Eureka 原理分析

原理图:

image.png

分析原理:

● 消费者该如何获取服务提供者具体信息?
■ 服务提供者启动时向 eureka 注册自己的信息
■ eureka 保存这些信息
■ 消费者根据服务名称向 eureka 拉取提供者信息

● 如果有多个服务提供者,消费者该如何选择?
■ 服务消费者利用负载均衡算法,从服务列表中挑选一个

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

总结:097e1e056cc6b6fde0b712eaa1c1a50.png

2.2 搭建 Eureka 注册中心

d80bb92e59a60160455850af0d48f75.png

首先注册中心服务端:eureka-server,这必须是一个独立的微服务

2.2.1 创建 eureka-server 服务

image.png
image.png

然后在新创建的服务里面引入 eureka 依赖

2.2.2 引入 eureka 依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

maven 记得配置阿里云镜像,下载的会更快

2.2.3 编写启动类

先创建一个名为 EurekaApplication 的 Java Class 文件

image.png

给 eureka-server 服务编写一个启动类,一定要添加一个 @EnableEurekaServer 注解,开启 eureka 的注册中心功能:

package cn.itcast.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

2.2.4.编写配置文件

编写一个 application.yml 文件,内容如下:

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka

2.2.5.启动服务

image.png

这边把服务启动以后,点击上图中 10086/或者手动去浏览器访问 http://127.0.0.1:10086
显示以下界面就是成功了
image.png

2.3 服务注册

image.png

2.3.1 引入依赖

在 user-service 的 pom 文件中,引入下面的 eureka-client 依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.3.2 配置文件

在 user-service 中,修改 application.yml 文件,添加服务名称、eureka 地址:

spring:
  application:
    name: userservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

user-service 配置文件
image.png
order-service 配置文件
image.png

2.3.3 重启服务

重启服务后查看 eureka-server 管理页面
image.png
如图所示,注册成功

2.3.4 模拟多实例部署

为了演示一个服务有多个实例的场景,我们添加一个 SpringBoot 的启动配置,再启动一个 user-service

image.png

image.png
在环境变量 VM options 中配置-Dserver.port=8082

重启后发现 eureka-server 管理页面中 userService 服务中注册了两个实例
image.png

2.4 服务发现

2.4.1 大致步骤

image.png

2.4.2 服务拉取和负载均衡

给 RestTemplate 这个 Bean 添加一个 @LoadBalanced 注解
修改访问的 url 路径,用服务名代替 ip、端口

image.png
image.png
image.png
image.png
由上图可以看到,我在浏览器请求了两次,分别在 userService 的两个实例中各执行了一次,说明拉取成功。

由此得知,spring 会自动帮助我们从 eureka-server 端,根据 userservice 这个服务名称,获取实例列表,而后完成负载均衡。

3、总结

image.png

  • Eureka
    22 引用 • 3 回帖
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...