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

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


                              相关文章
                              |
                              2月前
                              |
                              Cloud Native Java Nacos
                              微服务注册中心-Nacos概述
                              该博客文章提供了对Nacos的全面概述,包括其基本介绍、与Spring Cloud集成的优势、主要功能以及如何在Spring Cloud Alibaba项目中作为服务注册中心使用Nacos。文章解释了Nacos是一个动态服务发现、配置管理和服务管理平台,支持服务发现、健康监测、动态配置、DNS服务和元数据管理。还介绍了如何下载和启动Nacos服务器,以及如何将微服务注册到Nacos中,包括修改pom.xml文件引入依赖、配置application.properties文件和使用@EnableDiscoveryClient注解开启服务注册发现功能。
                              微服务注册中心-Nacos概述
                              |
                              2月前
                              |
                              负载均衡 监控 Java
                              SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
                              SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
                              SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
                              |
                              2月前
                              |
                              负载均衡 Java Nacos
                              EureKa详解:微服务发现与注册的利器
                              EureKa详解:微服务发现与注册的利器
                              |
                              2月前
                              |
                              Kubernetes Nacos 微服务
                              微服务注册与发现的原理与实现
                              微服务注册与发现的原理与实现
                              |
                              3月前
                              |
                              存储 负载均衡 算法
                              深入理解微服务架构中的服务发现与注册机制
                              【7月更文挑战第28天】在现代软件开发的复杂性中,微服务架构以其灵活性和可扩展性受到青睐。本文将深入探讨微服务架构的核心组件之一——服务发现与注册机制,分析其工作原理、实现方式及面临的挑战,并结合实际案例,为读者提供全面的理解和应用指南。
                              |
                              3月前
                              |
                              存储 缓存 负载均衡
                              微服务架构中的服务发现与注册中心实践
                              【7月更文挑战第26天】在微服务的海洋里,每个服务都是一座孤岛。要让这些孤岛彼此发现、相互通讯,就需要一个高效的信使系统——服务发现与注册中心。本文将深入探讨如何搭建和维护这一核心组件,确保微服务间的顺畅交流。
                              |
                              2月前
                              |
                              存储 缓存 Java
                              Eureka原理与实践:深入探索微服务架构的核心组件
                              在微服务架构日益盛行的今天,服务之间的注册与发现成为了保证系统高可用性和灵活性的关键。Eureka,作为Netflix开源的服务注册与发现框架,凭借其简单、健壮的特性,在微服务领域占据了举足轻重的地位。本文将深入剖析Eureka的原理,并通过实践案例展示其在实际项目中的应用,以期为开发者提供一个高端、深入的视角。
                              |
                              2月前
                              |
                              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。通过系统排查,通常能有效解决此问题。
                              50 0
                              |
                              2月前
                              |
                              安全 Nacos 数据库
                              【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
                              【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
                              133 0
                              |
                              2月前
                              |
                              安全 Nacos 数据安全/隐私保护
                              【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
                              【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
                              130 0