0
点赞
收藏
分享

微信扫一扫

实战Spring Cloud微服务治理组件Eureka


文章目录

  • ​​背景​​
  • ​​一、Eureka Server搭建​​
  • ​​1.1 创建Spring Cloud工程​​
  • ​​1.2 修改启动类​​
  • ​​1.2 增加Eureka配置​​
  • ​​1.3 启动Eureka服务器​​
  • ​​二、搭建Eureka服务提供者​​
  • ​​2.1 创建商品服务项目​​
  • ​​2.2 修改启动类​​
  • ​​2.2 增加Eureka Client配置​​
  • ​​2.3 编写商品服务程序​​
  • ​​2.4 启动商品服务​​
  • ​​三、搭建Eureka服务消费者​​
  • ​​3.1 创建用户服务项目​​
  • ​​3.2 修改启动类​​
  • ​​3.3 配置Eureka消费者​​
  • ​​3.4 创建Restful测试接口,在接口中调用商品微服务​​
  • ​​3.5 调用Restful接口进行测试​​
  • ​​小结​​

背景

  • 分布式微服务架构的核心是对应用按单一职责进行拆分,形成独立部署的服务单元。随着服务的不断水平扩展,需要有专门的服务治理组件来管理和保证微服务的可用性。
  • Eureka是Netflix开源微服务框架中专门进行服务发现及治理的组件,Spring Cloud对其进行了二次封装,并与Spring Boot紧密集成。
  • 本文将通过实战掌握Eureka基本的使用。
  • 实战Spring Cloud微服务治理组件Eureka_java

一、Eureka Server搭建

1.1 创建Spring Cloud工程

  • 通过Spring网站创建项目
  • 实战Spring Cloud微服务治理组件Eureka_服务器_02

  • 设置项目属性
  • 实战Spring Cloud微服务治理组件Eureka_spring cloud_03

  • 选择Spring Cloud Discovery
  • 实战Spring Cloud微服务治理组件Eureka_服务器_04

  • 自动生成项目结构及下载jar包
  • 实战Spring Cloud微服务治理组件Eureka_服务器_05

1.2 修改启动类

  • 只需要增加@EnableEurekaServer注解,Spring Boot在启动应用的时候就会自动构建一个默认的服务治理服务器。

/**
* Eureka服务启动类
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}

1.2 增加Eureka配置

  • 在项目配置文件application.properties中增加Eureka相关配置

# 服务器端口
server.port=8761
# 服务名称
spring.application.name=eureka-server
# 是否将自己注册到Eureka服务中
# 服务本身就是服务治理服务器,而且尚未构建任何服务治理集群,因此将其设置为false
eureka.client.register-with-eureka=false
# 是否从Eureka中获取注册信息
eureka.client.fetch-registry=false

1.3 启动Eureka服务器

  • 启动Eureka服务器项目,并通过http://localhost:8761访问Eureka控制台
  • 实战Spring Cloud微服务治理组件Eureka_spring cloud_06


  • 实战Spring Cloud微服务治理组件Eureka_java_07

二、搭建Eureka服务提供者

2.1 创建商品服务项目

  • 建立SpringBoot工程
  • 实战Spring Cloud微服务治理组件Eureka_spring cloud_08

  • 设置项目名称为goods-service
  • 实战Spring Cloud微服务治理组件Eureka_spring_09

  • 勾选Spring Cloud Discovery- Eureka Discovery Client
  • 实战Spring Cloud微服务治理组件Eureka_服务治理_10

  • 增加 spring-boot-starter-web依赖
  • 实战Spring Cloud微服务治理组件Eureka_spring_11

2.2 修改启动类

  • 在应用引导类中增加@EnableDiscoveryClient注解:通过该注解,在Spring Boot启动完毕之后,就会根据配置中的信息尝试与服务治理服务器进行连接,连接成功之后进行服务注册或者服务注册信息的同步。

/**
* 商品服务启动类
*/
@EnableEurekaClient
@SpringBootApplication
public class GoodsServiceApplication {
public static void main(String[] args) {
SpringApplication.run(GoodsServiceApplication.class, args);
}
}

2.2 增加Eureka Client配置

# 服务器端口
server.port=8080
# 服务名称
spring.application.name=goods-service
# 是否将自己注册到Eureka服务中: 服务需要向服务治理服务器进行注册
eureka.client.register-with-eureka=true
# 是否从Eureka中获取注册信息:启动时从服务治理服务器拉取信息
eureka.client.fetch-registry=true
#Eureka客户端与Eureka服务端进行交互的地址
eureka.client.service-url.defaultZone=http://172.22.34.63:8761/eureka

2.3 编写商品服务程序

/**
* 商品服务-模拟返回商品列表
*/
@RestController
@RequestMapping("api/goods")
public class GoodsService {

// 返回商品列表
@GetMapping
public List<Goods> getAllGoods() {
List<Goods> goods = new ArrayList<>();
goods.add(new Goods("电脑", 10));
goods.add(new Goods("手机", 20));
goods.add(new Goods("书籍", 30));
return goods;
}

}

/**
* 商品类
*/
public class Goods implements Serializable {

// 商品名称
private String name;
// 商品价格
private Integer number;

public Goods(String name, Integer number) {
this.name = name;
this.number = number;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getNumber() {
return number;
}

public void setNumber(Integer number) {
this.number = number;
}
}

2.4 启动商品服务

  • 启动该工程项目,并通过Eureka控制台观察商品服务是否已在服务治理服务器进行注册
  • 实战Spring Cloud微服务治理组件Eureka_spring cloud_12

  • 注册成功
  • 实战Spring Cloud微服务治理组件Eureka_服务治理_13

三、搭建Eureka服务消费者

3.1 创建用户服务项目

  • 项目命名为user-consumer
  • 实战Spring Cloud微服务治理组件Eureka_java_14

  • 勾选Spring Cloud Discovery- Eureka Discovery Client
  • 实战Spring Cloud微服务治理组件Eureka_服务治理_10

  • 增加 spring-boot-starter-web依赖
  • 实战Spring Cloud微服务治理组件Eureka_spring_11

3.2 修改启动类

  • 在应用引导类中增加@EnableDiscoveryClient注解:通过该注解,在Spring Boot启动完毕之后,就会根据配置中的信息尝试与服务治理服务器进行连接,连接成功之后可以向服务治理服务器获取服务列表。
  • 创建一个RestTemplate Bean,加上@LoadBalanced注解,让消费者通过Eureka服务器中注册的服务名访问服务提供者。

/**
* 用户消费者启动类
*/
@EnableEurekaClient
@SpringBootApplication
public class UserConsumerApplication {

// 向Spring注册一个RestTemplate Bean
@Bean
// 必须加入 @LoadBalanced注解,否则不能以Eureka中注册的服务名进行访问
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}

public static void main(String[] args) {

SpringApplication.run(UserConsumerApplication.class, args);
}

}

3.3 配置Eureka消费者

server.port=8081

spring.application.name=user-consumer
# 向eureka服务器获取服务列表
eureka.client.fetch-registry=true

#Eureka客户端与Eureka服务端进行交互的地址
eureka.client.service-url.defaultZone=http://172.22.34.63:8761/eureka
# 调用商品服务的地址
goods-service.url=http://GOODS-SERVICE/

3.4 创建Restful测试接口,在接口中调用商品微服务

/**
* 用户消费者--调用eureka服务器中的商品服务,并对外提供RestFul接口测试
*/
@RestController
@RequestMapping("user/")
public class UserConsumer {

@Autowired
private RestTemplate restTemplate;

@Value("${goods-service.url}")
private String url;

@GetMapping("/goods")
public User getUserGoods() {
User user = new User();
// 调用商品微服务
Object response = restTemplate.getForEntity(url + "api/goods", Object.class).getBody();
try {
user.setName("jack");
user.setGoods((List<GoodsDTO>) response);
} catch (Exception e){
throw new RuntimeException(e.getMessage());
}
return user;
}

}

/**
* 用户类
*/
public class User implements Serializable {

private String name;

private List<GoodsDTO> goods;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public List<GoodsDTO> getGoods() {
return goods;
}

public void setGoods(List<GoodsDTO> goods) {
this.goods = goods;
}
}

/**
* 商品数据传输类
*/
public class GoodsDTO {

private String name;
private Integer number;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getNumber() {
return number;
}

public void setNumber(Integer number) {
this.number = number;
}
}

3.5 调用Restful接口进行测试

  • 测试返回成功
  • 实战Spring Cloud微服务治理组件Eureka_spring cloud_17

小结

  • 按搭建服务治理服务器、微服务提供者、微服务消费者三个步骤进行了实战演示。
  • Eureka Server 环境一般都需要部署至少两个server,通过配置实现互相向对方注册,保证服务治理中心的高可用性。
  • 服务治理还会结合客户端负载均衡组件Ribbon,保证微服务调用的高性能。
  • 在以上文章中仅是通过RestTemplate实现了服务消费者向提供者,但实际生产项目中会引入Feign,可以让开发者通过注解的方式实现远程微服务调用,大大简化了代码的编写。


举报

相关推荐

0 条评论