【微服务】 微服务学习笔记二:Eureka注册中心的介绍及搭建

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【微服务】 微服务学习笔记二:Eureka注册中心的介绍及搭建

 一:Eureka简介

1:问题引入

       在介绍Eureka之前,我先讲两个概念,一是服务提供者,它指的是在一次业务中被其它微服务调用的服务(提供接口给其它微服务),也就是暴露接口给其它微服务调用;另一个是服务消费者,它是指再一次业务中调用其它服务的服务(调用其它服务提供的接口)。要注意的是,提供者与消费者之间的角色是相对的,就好比当你去买东西时候,相对于卖东西给你那个人你就是消费者;当你去卖东西时候相对于买你东西那个人你就是提供者。

       在没有引入Eureka之前,我们可以通过RestTemplate指定URL路径来发送http请求,实现远程调用,举个例子:

// 2.利用RestTemplate发起Http请求,查询用户
//2.1 url路径
String url = "http://localhost:8081/user/" + order.getUserId();
//2.2 发送http请求,实现远程调用
User user = restTemplate.getForObject(url,User.class);

image.gif

       当我们需要调用8081端口提供的服务的时候,就可以通过上诉方法进行服务调用。上述方法是通过硬编码实现的,会存在很多的问题,比如我们需要调用大量不同的服务时候,就需要指定很多的URL,而且你还需要清楚地知道每个服务的IP和端口号,这样显然是很不友好的;此外,当一个服务提供很多实例时候,采用了上述硬编码方式消费者如何进行选择呢?就比如某一服务提供了三个实例,采用上述方式永远只能选定一个实例,另外两个实例永远不会被调用,除非你直接对代码进行更改。

       最后还存在一个问题,消费者如何得知服务提供者的健康状态呢?当请求的服务已经挂掉了,就算服务列表还有其他实例可以调用,由于采用的是硬编码形式,其他健康的服务提供者也无法被调用。那么有没有办法可以解决上述问题呢?答案是肯定的,Eureka的出现就解决了上面提到了问题。

2:Eureka的作用

       在介绍Eureka的作用之前,我们首先来看一张图:

image.gif编辑

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

    • EurekaServer:服务端,注册中心
      • 记录服务信息
      • 心跳监控
          • EurekaClient:客户端
            • Provider:服务提供者,例如上图的user-service
              • 注册自己的信息到Eureka
              • 每隔一定时间向EurekaServer发送心跳
                  • consumer:服务消费者,例如上图的order-service
                    • 根据服务名称从EurekaServer拉取服务列表
                    • 基于服务列表做负载均衡,选中一个之后发起远程调用

                               每一个服务提供者启动时候都会向Eureka注册自己的信息(包括它自身),Eureka将会保存这些信息,这时候消费者就能通过服务名称向Eureka拉取提供者的信息。假如有多个服务提供者,比如user-service有8081、8082、8083这三个服务提供者,当消费者向EurekaServer注册中心拉取user-service信息的时候,注册中心就会返回user-service的服务列表,消费者再根据负载均衡算法进行选择。这样就能解除硬编码不能实现动态选择的问题,那么如何获取服务提供者的健康状态呢?

                               每个服务提供者都会每隔一段时间向EurekaServer发送心跳请求以报告自己的健康状态,Eureka会更新记录服务列表的信息,以剔除心跳不正常的服务提供者,以保证向消费者提供的服务都是健康的。

                        二:Eureka的搭建

                        1:搭建EurekaServer

                        1).单独创建一个EurekaServer模块并引入相关依赖(整体项目架构如下)

                        image.gif编辑

                        <dependencies>
                            <!--eureka服务端-->
                            <dependency>
                                <groupId>org.springframework.cloud</groupId>
                                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
                            </dependency>
                        </dependencies>

                        image.gif

                        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);
                            }
                        }

                        image.gif

                        3).添加application.yml文件并编写配置信息

                        server:
                          port: 10086 # 服务端口
                        spring:
                          application:
                            name: eurekaServer # eureka的服务名称
                        eureka:
                          client:
                            service-url:  # eureka的地址信息
                              defaultZone: http://127.0.0.1:10086/eureka

                        image.gif

                        2:服务注册

                          1. 引入eureka-client依赖
                          <!--eureka客户端依赖-->
                          <dependency>
                              <groupId>org.springframework.cloud</groupId>
                              <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                          </dependency>
                          1. image.gif
                          2. 在application.yml中配置eureka地址
                          eureka:
                            client:
                              service-url:  # eureka的地址信息
                                defaultZone: http://127.0.0.1:10086/eureka
                          1. image.gif

                          3:服务发现

                            1. 引入eureka-client依赖
                            <!--eureka客户端依赖-->
                            <dependency>
                                <groupId>org.springframework.cloud</groupId>
                                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                            </dependency>
                            1. image.gif
                            2. 在application.yml中配置eureka地址
                            eureka:
                              client:
                                service-url:  # eureka的地址信息
                                  defaultZone: http://127.0.0.1:10086/eureka
                            1. image.gif
                              1. 给RestTemplate添加@LocalBalanced注解
                              /**
                               * 创建RestTemplate并注入Spring容器
                               */
                              @Bean
                              @LoadBalanced
                              public RestTemplate restTemplate() {
                                  return new RestTemplate();
                              }
                              1. image.gif
                              2. 用服务提供者的服务名称远程调用
                              // 2.利用RestTemplate发起Http请求,查询用户
                              //2.1 url路径
                              String url = "http://userServer/user/" + order.getUserId();
                              //2.2 发送http请求,实现远程调用
                              User user = restTemplate.getForObject(url,User.class);
                              1. image.gif


                              相关文章
                              |
                              4天前
                              |
                              SpringCloudAlibaba 负载均衡 Java
                              【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心
                              【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心
                              16 3
                              |
                              4天前
                              |
                              负载均衡 监控 算法
                              【微服务 SpringCloud】实用篇 · Eureka注册中心
                              【微服务 SpringCloud】实用篇 · Eureka注册中心
                              12 1
                              |
                              1天前
                              |
                              缓存 算法 Apache
                              微服务架构下的服务发现与注册机制
                              【5月更文挑战第18天】 随着现代软件系统向着分布式和微服务架构演进,服务发现与注册成为确保系统弹性和可伸缩性的关键因素。本文将探讨在微服务环境下实现服务发现与注册的模式,分析其必要性,并深入讨论常见的解决方案以及面临的挑战。文中不仅介绍了服务发现的基本原理和流程,还对流行的服务发现工具如Consul、Etcd和Zookeeper进行了比较,最后提出了一套优化策略以增强系统的鲁棒性和性能。
                              |
                              4天前
                              |
                              Nacos 微服务
                              【微服务系列笔记】Eureka
                              该文档介绍了微服务注册中心的重要性和流行选项,如Eureka、Nacos、Consul和Zookeeper,强调Eureka是唯一支持跨区域调用的AP系统。接着,它提供了一个Eureka入门案例,包括设置Eureka服务器和客户端的步骤,并展示了多实例部署的效果。最后,简要总结了学习Eureka的意义,并提出了几个思考问题,如Eureka的功能、工作原理以及其他服务发现技术。
                              29 5
                              |
                              4天前
                              |
                              SpringCloudAlibaba Java Nacos
                              SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
                              SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
                              |
                              4天前
                              |
                              Kubernetes Nacos 微服务
                              nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
                              Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
                              32 1
                              nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
                              |
                              4天前
                              |
                              SpringCloudAlibaba 负载均衡 Java
                              【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
                              【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
                              74 1
                              |
                              4天前
                              |
                              Java Nacos Sentinel
                              【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
                              【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
                              240 0
                              |
                              1天前
                              |
                              运维 监控 Docker
                              使用Docker进行微服务架构的部署
                              【5月更文挑战第18天】本文探讨了如何使用Docker进行微服务架构部署,介绍了Docker的基本概念,如容器化平台和核心组件,以及它与微服务的关系。通过Docker,每个微服务可独立运行在容器中,便于构建、测试和部署。文章详细阐述了使用Docker部署微服务的步骤,包括定义服务、编写Dockerfile、构建镜像、运行容器、配置服务通信、监控和日志管理以及扩展和更新。Docker为微服务提供了可移植、可扩展的解决方案,是现代微服务架构的理想选择。
                              |
                              1天前
                              |
                              敏捷开发 监控 API
                              构建高效微服务架构:从理论到实践
                              【5月更文挑战第18天】 在当今快速发展的软件开发领域,微服务架构已经成为一种流行的设计模式,它通过将大型应用程序分解为一系列小型、独立的服务来提高系统的可伸缩性、弹性和维护性。本文旨在探讨如何从理论走向实践,构建一个高效的微服务架构。文章首先介绍微服务的基本概念和优势,然后详细讨论了在设计和部署微服务时需要考虑的关键因素,包括服务划分、通信机制、数据一致性、容错处理和监控策略。最后,结合具体案例分析,展示如何在现实世界中应用这些原则,确保微服务架构的高效运行。