【微服务 SpringCloud】实用篇 · Eureka注册中心

这篇具有很好参考价值的文章主要介绍了【微服务 SpringCloud】实用篇 · Eureka注册中心。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微服务(3)

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

微服务(3)

假如我们的服务提供者user-service部署了多个实例(不同实例,端口号不一致),如图:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

大家思考几个问题:

  • 我们刚才的编程,是写死在程序里的,ip和端口都是写死的,这种硬编码的方式,之后改变ip和端口代码不就没法用了?
  • order-service在发起远程调用的时候,该如何得知user-service实例们的ip地址和端口,新增的实例怎么被访问到呢?
  • 有多个user-service实例地址,order-service调用时该如何选择?
  • order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?

问题忒多了,但是我们的SpringCloud的注册中心Eureka是可以解决的~

1. Eureka的结构和作用

这些问题都需要利用SpringCloud中的注册中心来解决,其中最广为人知的注册中心就是Eureka,其结构如下:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

  • 我们的各个微服务相对于Eureka而言,都是客户端
  • 而他本身就是客户端服务器的,他也是个微服务,因为他也会“注册自己到自己身上”
    • 这与注册中心集群有关,暂时不做讨论,了解即可…

回答之前的各个问题。

问题1:这种硬编码的方式,之后改变ip和端口代码不就没法用了?order-service如何得知user-service实例地址,新增的实例怎么被访问到呢?

获取地址信息的流程如下:

  • user-service服务实例启动后,将自己的信息注册到eureka-server(Eureka服务端)。这个叫==服务注册==
  • eureka-server保存服务名称到服务实例地址列表的映射关系
  • order-service根据服务名称,拉取实例地址列表。这个叫==服务发现服务拉取==

问题2:order-service如何从多个user-service实例中选择具体的实例?

  • order-service从实例列表中利用**负载均衡算法选中一个**实例地址(“均摊”实例之间的压力,后面会细说)
  • 向该实例地址发起远程调用

问题3:order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?

  • user-service会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己状态,称为心跳
  • 超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除
  • order-service拉取服务时,就能将故障实例排除了

注意:一个微服务,既可以是服务提供者(要注册),又可以是服务消费者(要服务拉取)

因此eureka将服务注册、服务发现等功能统一封装到了eureka-client端

而eureka-server端,即注册中心就要做以下两个工作:

  1. 记录服务信息
  2. 心跳监控

因此,接下来我们动手实践的步骤包括:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

2. 搭建eureka-server

首先大家注册中心服务端:eureka-server,这必须是一个独立的微服务

2.1 创建eureka-server服务

在cloud-demo父工程下,创建一个子模块:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

填写模块信息,然后填写服务信息:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

创建后

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

2.2 引入eureka依赖

引入SpringCloud为eureka提供的starter依赖:

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

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

(版本信息在父工程的pom.xml配好了,无需担心)

2.3 编写启动类

给eureka-server服务编写一个启动类,一定要添加一个 @EnableEurekaServer注解,开启eureka的注册中心功能:

package cn.itcast.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

(创建目录与文件后)

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

2.4 编写配置文件

编写一个application.yml文件,内容如下:

server:
  port: 10086
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka # 接口就是/eureka,在多个注册中心注册用逗号隔开								

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

2.5 启动服务

启动微服务,然后在浏览器访问:http://127.0.0.1:10086

看到下面结果应该是成功了:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

注册的服务(实例)信息列表:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

3. 服务注册

下面,我们将user-service注册到eureka-server中去

1)引入依赖

在user-service的pom文件中,引入下面的eureka-client依赖:

  • 这个就是客户端依赖,赋予其可以注册和拉取的功能~

如果这个设置在父工程pom里,就会作用于两个微服务的pom,但是我们希望两个微服务更加独立

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

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

2)配置文件

在user-service中,修改application.yml文件,添加服务名称、eureka地址:

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

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

3)启动多个user-service实例

为了演示一个服务有多个实例的场景,我们添加一个SpringBoot的启动配置,再启动一个user-service

首先,复制原来的user-service启动配置:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

然后,在弹出的窗口中,填写信息:

  • 添加变量:.properties格式的配置信息(在被复制者的配置信息的基础上,进行覆盖)

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

现在,SpringBoot窗口会出现两个user-service启动配置:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

不过,第一个是8081,第二个是8082

重新启动两个user-service实例(保证eureka在此之前启动):

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

查看eureka-server管理页面:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

停止就会被剔除:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

4. 服务发现

下面,我们将order-service的逻辑修改:向eureka-server拉取user-service的信息,实现服务发现。

1)引入依赖

之前说过,服务发现、服务注册统一都封装在eureka-client依赖,因此这一步与服务注册时一致。

在order-service的pom文件中,引入下面的eureka-client依赖:

  • 这个就是客户端依赖,赋予其可以注册和拉取的功能~
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2)配置文件

服务发现也需要知道eureka地址,因此第二步与服务注册一致,都是配置eureka信息:

在order-service中,修改application.yml文件,添加服务名称、eureka地址:

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

3)服务拉取和负载均衡

最后,我们要去eureka-server中拉取user-service服务的实例列表,并且实现负载均衡。

不过这些动作不用我们去做,只需要添加一些注解即可。

在order-service的OrderApplication中,给RestTemplate这个Bean添加一个@LoadBalanced注解:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法。修改访问的url路径,用服务名代替ip、端口:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

spring会自动帮助我们从eureka-server端(配置文件配置的)

  1. 根据userservice这个服务名称,获取实例列表
  2. 而后完成负载均衡(加了那个注解,让他有能力去负载均衡)

最后他就会发送到正确的那个地址,实现远程调用

在浏览器验证一下试试(注意重新启动):

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

…略…

查看user服务的两个实例里查看日志:

【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka
【微服务 SpringCloud】实用篇 · Eureka注册中心,微服务,微服务,spring cloud,eureka

好像确实负载均衡了(两个都有被访问到),具体怎么负载均衡的?

  • 这是接下来Ribbon负载均衡的内容啦😀

文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

代码:cloud-demo · 游离态/云服务 - 码云 - 开源中国 (gitee.com)文章来源地址https://www.toymoban.com/news/detail-713474.html


到了这里,关于【微服务 SpringCloud】实用篇 · Eureka注册中心的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

    单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点:架构简单;部署成本低(打jar包、部署、负载均衡就完成了) 缺点:耦合度高(维护困难、升级困难,不利于大项目开发) 分布式架构 根据业务功能对系统做拆分,每个业务功能模块作为独立

    2024年02月13日
    浏览(34)
  • Spring Cloud 之注册中心 Eureka 精讲

    🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝 🍓 更多文章请点击 Spring Cloud 官网:https://spring.io/proj

    2024年02月12日
    浏览(50)
  • SpringCloud:Eureka服务注册中心

    Eureka是一个服务治理组件,它主要包括服务注册和服务发现,主要用来搭建服务注册中心。 在搭建微服务项目时遇到的三个问题: 服务消费者该如何获取服务提供者的地址信息? 如果有多个服务提供者,消费者该如何选择? 消费者如何得知服务提供者的健康状态? Eureka的作

    2024年01月20日
    浏览(38)
  • 【SpringCloud微服务--Eureka服务注册中心】

    gitee仓库 内容:SpringCloud + SpringCloud alibaba 技术栈:Java8+maven+git,github+Nginx+RabbitMQ+SpringBoot2.0 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的 进程 中,服务与服务间采用

    2024年02月09日
    浏览(38)
  • SpringCloud之Eureka 服务注册中心

    5 Eureka 服务注册中心 5.1什么是 Eureka Netflix在涉及Eureka时,遵循的就是API原则. Eureka是Netflix的有个子模块,也是核心模块之一。Eureka是基于REST的服务,用于定位服务,以实现云端中间件层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务注册与发

    2024年02月04日
    浏览(44)
  • 【spring cloud学习】3、Eureka Server注册中心

    Eureka本身是Netflix开源的一款注册中心产品,并且Spring Cloud提供了相应的集成封装。选择Eureka作为注册中心实例来讲解是出于以下原因: (1)Eureka在业界的应用十分广泛,整个框架经受住了Netflix严酷生产环境的考验。 (2)除了Eureka注册中心外,Netflix的其他服务治理功能也十

    2024年02月11日
    浏览(52)
  • Springcloud笔记(2)-Eureka服务注册中心

    Eureka作为一个微服务的治理中心,它是一个服务应用,可以接收其他服务的注册,也可以发现和治理服务实例。 服务治理中心是微服务(分布式)架构中最基础和最核心的功能组件,它主要对各个服务实例进行管理,包括 服务注册和服务发现 等 本文参考:springcloud教程 --

    2024年02月05日
    浏览(43)
  • SpringCloud搭建Eureka服务注册中心(六)

    前面说过eureka是c/s模式的  server服务端就是服务注册中心,其他的都是client客户端,服务端用来管理所有服务,客户端通过注册中心,来调用具体的服务; 我们先来搭建下服务端,也就是服务注册中心; project xmlns=\\\"http://maven.apache.org/POM/4.0.0\\\" xmlns:xsi=\\\"http://www.w3.org/2001/XMLSche

    2024年02月10日
    浏览(60)
  • SpringCloud微服务技术栈的注册中心Eureka

    在微服务架构中,服务的数量庞大,而且每个服务可能会有多个实例。此时,需要一个中心化的地方来管理和维护各个服务的相关信息,这就是微服务治理中很重要的一环:服务注册与发现。其中,服务注册是指将提供服务的应用实例注册到注册中心,而服务发现则是指从注

    2023年04月09日
    浏览(51)
  • 客快物流大数据项目(一百一十三):注册中心 Spring Cloud Eureka

    文章目录 注册中心 Spring Cloud Eureka 一、Eureka 简介 二、架构图

    2023年04月25日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包