• 【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 的依赖:

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
    4. dependency>

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

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

    1. server:
    2. port: 10086
    3. spring:
    4. application:
    5. name: eurekaserver
    6. eureka:
    7. client:
    8. service-url:
    9. 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 的依赖

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
    4. dependency>

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

    1. spring:
    2. application:
    3. name: userservice #orderservice
    4. eureka:
    5. client:
    6. service-url:
    7. 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 注解(实现多示例负载均衡)

    1. @Bean
    2. @LoadBalanced
    3. public RestTemplate restTemplate() {
    4. return new RestTemplate();

  • 相关阅读:
    No126.精选前端面试题,享受每天的挑战和学习
    为什么需要扩展标签属性?(搭建场景体会)
    Vue Router
    南京邮电大学电工电子(数电)实验报告——二进制全加器 & 数据选择器 & 集成触发器
    Cognex Visionpro-9.5 software handbook translate
    基于OpenTelemetry实现Java微服务调用链跟踪
    谁拥有穿越周期的眼光?
    计算机毕设(附源码)JAVA-SSM基于的装修设计管理系统
    构建一个商业智能 BI 分析平台,公司CIO应该重点关注什么?
    socket实现简单聊天【linux】
  • 原文地址:https://blog.csdn.net/msllws/article/details/136631464