0%

Erueka基础

前言

简单介绍了Erueka作为服务注册中心的基本使用

服务调用出现的问题

  • URL需要硬编码在代码中,无法动态分配,也无法做负载均衡
  • 服务消费者该如何获取服务提供者的地址信息?
  • 如果有多个提供者,消费者如何选择
  • 消费者如何得知服务的健康状态

Eureka

注册中心。

  1. 服务提供者需要向Eureka注册服务信息
  2. 消费者从Eureka拉取服务
  3. 消费者负载均衡,从列表里挑选一个
  4. 消费者远程调用
  5. 服务提供者会向Eureka提供心跳,Erueka更新服务的异常状态

基本配置

  • 依赖
1
2
3
4
5
6
7
8
9
10
11
<!-- eureka 服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

<!-- eureka 客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • 服务端使用
1
2
3
4
5
6
7
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
server:
port: 10001

# 服务注册
spring:
application:
name: eurekaserver # 服务名称
eureka:
client:
service-url: # eureka 的地址信息,eureka会把自己也注册到eureka注册上
defaultZone: http://127.0.0.1:10001/eureka
fetch-registry: false # 启动时不同步集群(因为是单点)
  • 客户端使用
1
2
3
4
5
6
7
8
9
// 使用服务名代替ip和端口号
String url = “http://userservice/user/” + id;

// 在RestTemplate上添加负载均衡的注解(Application上)
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
1
2
3
4
5
6
7
8
# 服务注册
spring:
application:
name: orderservice # 服务名称
eureka:
client:
service-url: # eureka 的地址信息,eureka会把自己也注册到eureka注册上
defaultZone: http://127.0.0.1:10001/eureka

总结

  • 搭建EurekaServer
    • 引入eureka-server依赖
    • 添加@EnableEurekaServer注解
    • 在applcation中配置eureka地址
  • 服务注册
    • 引入eureka-client依赖
    • 在application.yml中配置eureka地址
  • 服务发现
    • 引入eureka-client依赖
    • 在application.yml中配置eureka地址
    • 给RestTemplate添加@LoadBalanced注解
    • 用服务提供者的服务名称远程调用