✏️ 【上图】服务器 127.0.0.0 部署了 order-service.jar 项目
✏️ 服务器 127.0.0.1 部署了 user-service.jar 项目
✏️ order-service.jar 项目的数据库中有一个订单表,订单表中有 user_id 字段。但该项目的数据库中是没有 user 数据的
✏️ 它只能向另一个服务器(127.0.0.1)的 order-service.jar 发送网络请求,进而获取用户数据
服务提供者: 一次业务中,被其它微服务调用的服务(提供接口给其它微服务调用的服务)【如 user-service】
服务消费者: 一次业务中,调用其它微服务的服务(调用其它微服务提供的接口)【如 order-service】
❓ 消费者该如何获取服务提供者的具体信息 ❓
服务提供者启动时向 eureka 注册自己的地址信息
eureka 保存这些信息
消费者根据服务名称向 eureka 拉取提供者信息
❓ 如果有多个服务提供者,消费者该如何选择 ❓
服务消费者利用负载均衡算法,从服务列表中挑选一个
❓ 消费者如何感知服务提供者健康状态 ❓
服务提供者会每隔30秒向 eureka-server(Eureka 服务端) 发送心跳请求,报告健康状态
eureka 会更新服务列表信息,心跳不正常会被剔除
消费者可拉取到最新的服务提供者信息
在 eureka 架构中,微服务角色有两类:
✏️ EurekaServer:服务端,注册中心
✒️ 记录服务信息
✒️ 心跳监控
✏️ EurekaClient:客户端
✒️ provider:服务提供者(如 user-service)
需要创建一个全新的微服务
需要创建一个全新的项目
<project>
<parent>
<artifactId>cloud-demoartifactId>
<groupId>com.zgqgroupId>
<version>1.0version>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>eureka-serverartifactId>
<version>1.0-SNAPSHOTversion>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
project>
@SpringBootApplication
@EnableEurekaServer // 启动 eureka 的服务端
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
server:
port: 10086 # 服务的端口号
# 以下两个配置是在做服务的注册
spring:
application:
name: eurekaserver # 微服务名称(Eureka 服务端本身也是一个微服务)
eureka:
client: # eureka 客户端服务地址(eureka 也是微服务, eureka 也会把自己的地址信息添加进注册中心, 方便 eureka 集群)
service-url:
defaultZone: http://127.0.0.1:10086/eureka/ # eureka 地址信息(defaultZone 没有代码提示)
启动该项目,并访问可看到 eureka 服务默认的页面【http://localhost:10086/】
部署的一个微服务就是一个实例(Instance)
将微服务注册到 Eureka 中
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
dependencies>
server:
port: 8080
spring:
application:
name: orderservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
无论是消费者还是提供者,引入 eureka-client 依赖,且知道 eureka 地址,即可完成服务注册
服务拉取: 基于服务名称获取服务列表,然后对服务列表做负载均衡(根据负载均衡策略选择一个服务地址访问)
根据 Bilibili 黑马程序员学习
可一起讨论学习哦(私信我)
如有错误请不吝赐教