- Eureka-提供者与消费者
- Eureka-原理分析
- 搭建Eureka服务
- Eureka-服务注册
- Eureka-服务发现
- 服务提供者:一次业务中,被其他微服务调用的服务。(提供接口给其他微服务)
- 服务消费者:一次业务中,调用其他微服务的服务。(调用其他微服务提供的接口)
- 提供者与消费者角色是相对的
- 一个服务可以同时是服务提供者和服务消费者
思考一个问题:
服务A调用服务B,服务B调用服务C,那么B服务是什么角色?
答:提供者与消费者都是相对而言的,B服务相对A服务来讲是提供者,相对C服务是消费者
Eureka的作用:
- 消费者该如何获取提供者具体信息?
- 服务提供者启动时向Eureka 注册自己的信息
- Eureka保存这些信息
- 消费者提供服务名称向Eureka拉取提供者信息
- 如果有多个服务提供者,消费者该如何选择?
- 消费服务者利用负载均衡算法,从服务列表中挑选一个
- 消费者如何感知服务提供者的健康状态?
- 服务提供者会每个30秒向EurekaService发送心跳请求,报告健康状态
- Eureka会更新记录列表信息,心跳不正常会被剔除
- 消费者就可以拉取到最新的信息
Eureka 整合Ribbon实现负载均衡
Eureka总结:
- EurekaServer:服务端,注册中心
- 记录服务记录
- 心跳监控
- EurekaClient:客户端
- provider:服务提供者,列入案列中的 user-service
- 注册自己的信息到EurekaServer
- 每隔30秒向EurekaServer发送心跳
- consumer:服务消费者,例如案列中的 order-service
- 根据服务名称EurekaServer 拉取服务列表
- 基于服务列表做负载均衡,选中一个微服务后发起远程调用
- provider:服务提供者,列入案列中的 user-service
1、创建eureka-server模块,引入spring-cloud-starter-netflix-eureka-server的依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-server
2、编写启动类,添加@EnableEurekaServer注解
package cn.itcast.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
3、添加application.yml文件,编写配置
server: port: 10086 #服务端口 spring: application: name: eurekaserver #eureka服务名 eureka: client: service-url: #eureka的地址信息 defaultZone: http://127.0.0.1:10086/eureka #如果有多个以逗号隔开
正常启动成功 http://127.0.0.1:10086/ 会看到如下界面
注册user-service
- 在user-service项目中引入spring-cloud-starter-netflix-eureka-client依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-client
- 在application.yml文件中假如如下配置
spring: application: name: userserver #userserver服务名 eureka: client: service-url: #eureka的地址信息 defaultZone: http://localhost:10086/eureka #如果有多个以逗号隔开
同样在order-service中添加配置,注意application.yml中服务名要写成要写成orderserver,跟userserver区分开
重新启动user-service 会发现userserver是集群
在order-service 完成服务拉取
服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
- 修改OrderService的代码,修改访问url路径,用服务名代替ip、端口
// 2.1请求 url,这里的服务名userserver为application.yml文件中配置的服务名 String url = "http://userserver/user/" + order.getUserId();
- 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解@LoadBalanced
// Spring 提供 RestTemple 用于发送 http 请求 @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }
总结:
- 搭建EurekaServer
- 引入 spring-cloud-starter-netflix-eureka-server 依赖
- 在启动类上添加 @EnableEurekaServer 注解
- 在application.yml中配置eureka地址
- 服务注册
- 引入eureka-client依赖
- 在application.yml中配置eureka地址
- 无论是消费者还是提供者,引入eureka-client依赖并且知道eureka地址后,都可以完成服务注册
- 服务发现
- 引入eureka-client依赖
- 在application.yml中配置eureka地址
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)