是Netflix公司出品,英文直译:发现了,找到了!
首先我们来解决第一问题,服务的管理。
问题分析
在刚才的案例中,user_service对外提供服务,需要对外暴露自己的地址。而consumer(调用者)需要记录服务提供者的地址。将来地址出现变更,还需要及时更新。这在服务较少的时候并不觉得有什么,但是在现在日益复杂的互联网环境,一个项目肯定会拆分出十几,甚至数十个微服务。此时如果还人为管理地址,不仅开发困难,将来测试、发布上线都会非常麻烦,这与DevOps的思想是背道而驰的。
网约车
这就好比是 网约车出现以前,人们出门叫车只能叫出租车。一些私家车想做出租却没有资格,被称为黑车。而很多人想要约车,但是无奈出租车太少,不方便。私家车很多却不敢拦,而且满大街的车,谁知道哪个才是愿意载人的。一个想要,一个愿意给,就是缺少引子,缺乏管理啊。
此时滴滴这样的网约车平台出现了,所有想载客的私家车全部到滴滴注册,记录你的车型(服务类型),身份信息(联系方式)。这样提供服务的私家车,在滴滴那里都能找到,一目了然。
此时要叫车的人,只需要打开APP,输入你的目的地,选择车型(服务类型),滴滴自动安排一个符合需求的车到你面前,为你服务,完美!
Eureka做什么?
Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过“心跳”
机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。
这就实现了服务的自动注册、发现、状态监控。
renewal:续约
Eureka-Server:就是服务注册中心(可以是一个集群),对外暴露自己的地址。
提供者:启动后向Eureka注册自己信息(地址,服务名称等),并且定期进行服务续约
消费者:服务调用方,会定期去Eureka拉取服务列表,然后使用负载均衡算法选出一个服务进行调用。
心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
(1)创建一个服务,并在pom文件中进行集成eureka的依赖
(2)添加pom依赖
sh_cloud_parent
com.itheima.sh
1.0-SNAPSHOT
4.0.0
eureka_server
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
(3)添加配置
添加 application.yml
server:
port: 10086 # 默认端口 8761
spring:
application:
name: eureka-server # 应用名称,会在Eureka中作为服务的id标识(serviceId)
eureka:
client:
service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要写其它Server的地址。
defaultZone: http://127.0.0.1:10086/eureka
register-with-eureka: false # 不注册自己 默认值为 true
fetch-registry: false #不拉取服务 默认值为 true
(4)编写引导类
package com.zy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer // 声明这个应用是一个EurekaServer
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class, args);
}
}
(5)启动服务
并访问:http://127.0.0.1:10086
对于现有的服务直接集成eureka就行
实现步骤:
(1)引入pom依赖
在user_service中添加Eureka客户端依赖:
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
(2)配置EurekaServer端的地址
修改user_service配置文件,指定eureka地址
# ...略
spring:
application:
name: user-service
eureka:
client:
service-url: # EurekaServer地址
defaultZone: http://127.0.0.1:10086/eureka/
注意:
这里我们添加了spring.application.name属性来指定应用名称,将来会作为服务的id使用。
不能使用下划线
(3)引导类添加注解
@SpringBootApplication
@EnableDiscoveryClient // 注册到Eureka注册中心
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
(4)重启项目
访问Eureka监控页面查看,我们发现user_service服务已经注册成功了: