【SpringCloud微服务实战01】Eureka 注册中心

  • 前言

在 Eureka 架构中,微服务角色有两类:

  •  EurekaServer :服务端,注册中心

                记录服务信息
                心跳监控

  • EurekaClient :客户端

         Provider :服务提供者,例如案例中的 user-service
                         注册自己的信息到 EurekaServer
                        每隔 30 秒向 EurekaServer 发送心跳
         consumer :服务消费者,例如案例中的 order-service
                        根据服务名称从 EurekaServer 拉取服务列表
                         基于服务列表做负载均衡,选中一个微服务后发起远程调用

架构图:

常见问题:

  • 消费者该如何获取服务提供者具体信息?

                服务提供者启动时向 eureka 注册自己的信息
                eureka 保存这些信息
                消费者根据服务名称向 eureka 拉取提供者信息

  • 如果有多个服务提供者,消费者该如何选择?

                服务消费者利用负载均衡算法,从服务列表中挑选一个

  • 消费者如何感知服务提供者健康状态?

                服务提供者会每隔 30 秒向 EurekaServer 发送心跳请求,报告健康状态
                eureka 会更新记录服务列表信息,心跳不正常会被剔除
                消费者就可以拉取到最新的信息 


 

一、Eureka服务端搭建

1. 创建项目,引入 spring-cloud-starter-netflix-eureka-server 的依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2. 编写启动类,添加 @EnableEurekaServer 注解

3. 添加 application.yml 文件,编写下面的配置:

server:
  port: 10086
spring:
  application:
    name: eurekaserver
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/

启动后访问管理页面http://127.0.0.1:10086

二、Eureka服务注册 

1. 分别 user-service 和 order-service 项目中引入 spring-cloud-starter-netflix-eureka-client 的依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2. 在 application.yml 文件,分别编写下面的配置:

spring:
  application:
    name: userservice #orderservice
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/

这里还可以通过复制userService配置 修改VM:-Dserver.port=8082,模拟一个服务启动多个实例:

三、Eureka服务发现(服务拉取)

下面以在 order-service 服务中拉取 user-service中的查询用户信息接口为例:

1、用服务提供者的 服务名称 远程调用服务接口:

String url = "http://userservice/user/" + order.getUserId();

2、给 RestTemplate 添加 @LoadBalanced 注解(实现多示例负载均衡)

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
} 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 22:22:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 22:22:02       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 22:22:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 22:22:02       20 阅读

热门阅读

  1. 【力扣二刷思路】DAY3

    2024-03-15 22:22:02       16 阅读
  2. 使用回溯法解决leetcode 1219

    2024-03-15 22:22:02       23 阅读
  3. 几种ADG搭建方式,汇总整理!

    2024-03-15 22:22:02       19 阅读
  4. 大量数据的优化之虚拟滚动和web workers

    2024-03-15 22:22:02       19 阅读
  5. 蓝桥集训之奶牛选美

    2024-03-15 22:22:02       19 阅读
  6. 乘积尾零 2018年第九届蓝桥杯省赛

    2024-03-15 22:22:02       21 阅读
  7. 2024.3.9每日一题

    2024-03-15 22:22:02       19 阅读
  8. mysql binlog自动删除与手动删除

    2024-03-15 22:22:02       20 阅读
  9. 老卫带你学---leetcode刷题(189. 轮转数组)

    2024-03-15 22:22:02       20 阅读
  10. 【算法-特征选择】reliefF算法实现

    2024-03-15 22:22:02       22 阅读