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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 【微服务】 微服务学习笔记二: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


                              相关文章
                              |
                              16天前
                              |
                              Java 网络安全 Nacos
                              Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
                              Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
                              40 5
                              |
                              1月前
                              |
                              网络安全 Nacos 开发者
                              Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
                              Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
                              35 4
                              |
                              1月前
                              |
                              Java 网络安全 Nacos
                              Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
                              Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
                              48 3
                              |
                              1月前
                              |
                              安全 Nacos 数据库
                              Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
                              Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
                              42 3
                              |
                              2月前
                              |
                              负载均衡 算法 Nacos
                              SpringCloud 微服务nacos和eureka
                              SpringCloud 微服务nacos和eureka
                              67 0
                              |
                              4月前
                              |
                              Cloud Native Java Nacos
                              微服务注册中心-Nacos概述
                              该博客文章提供了对Nacos的全面概述,包括其基本介绍、与Spring Cloud集成的优势、主要功能以及如何在Spring Cloud Alibaba项目中作为服务注册中心使用Nacos。文章解释了Nacos是一个动态服务发现、配置管理和服务管理平台,支持服务发现、健康监测、动态配置、DNS服务和元数据管理。还介绍了如何下载和启动Nacos服务器,以及如何将微服务注册到Nacos中,包括修改pom.xml文件引入依赖、配置application.properties文件和使用@EnableDiscoveryClient注解开启服务注册发现功能。
                              微服务注册中心-Nacos概述
                              |
                              4月前
                              |
                              负载均衡 Java Nacos
                              EureKa详解:微服务发现与注册的利器
                              EureKa详解:微服务发现与注册的利器
                              |
                              4月前
                              |
                              Kubernetes Nacos 微服务
                              微服务注册与发现的原理与实现
                              微服务注册与发现的原理与实现
                              |
                              4月前
                              |
                              存储 缓存 Java
                              Eureka原理与实践:深入探索微服务架构的核心组件
                              在微服务架构日益盛行的今天,服务之间的注册与发现成为了保证系统高可用性和灵活性的关键。Eureka,作为Netflix开源的服务注册与发现框架,凭借其简单、健壮的特性,在微服务领域占据了举足轻重的地位。本文将深入剖析Eureka的原理,并通过实践案例展示其在实际项目中的应用,以期为开发者提供一个高端、深入的视角。
                              |
                              4月前
                              |
                              Kubernetes Nacos 微服务
                              【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
                              【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
                              84 0