02-SpringCloud-Eureka注册中心

news2024/11/25 10:41:08

Eureka注册中心

假如我们的服务提供者user-service部署了多个实例,如图:

image-20210713214925388

大家思考几个问题:

  • order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?
  • 有多个user-service实例地址,order-service调用时该如何选择?
  • order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?

1.1.Eureka的结构和作用

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

image-20210713220104956

回答之前的各个问题。

问题1: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端

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

image-20210713220509769

1.2.搭建eureka-server

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

1.2.1.创建eureka-server服务

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

image-20210713220605881

填写模块信息:

image-20210713220857396

然后填写服务信息:

image-20210713221339022

1.2.2.引入eureka依赖

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

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

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

1.2.4.编写配置文件

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

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

1.2.5.启动服务

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

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

image-20210713222157190

1.3.服务注册

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

1)引入依赖

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

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

2)配置文件

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

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

3)启动多个user-service实例

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

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

image-20210713222656562

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

image-20210713222757702

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

image-20210713222841951

不过,第一个是8081端口,第二个是8082端口。

启动两个user-service实例:

image-20210713223041491

查看eureka-server管理页面:

image-20210713223150650

1.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注解:

image-20210713224049419

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

image-20210713224245731

spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡。

学习笔记,整理自黑马程序员教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1354935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣hot100 翻转二叉树 递归

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f60b; AC code /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNod…

CNN——AlexNet

1.AlexNet概述 论文原文&#xff1a;ImageNet Classification with Deep Convolutional Neural Networks 在LeNet提出后&#xff0c;卷积神经网络在计算机视觉和机器学习领域中很有名气。但卷积神经网络并没有主导这些领域。这是因为虽然LeNet在小数据集上取得了很好的效果&am…

jQuery常用的 四大基本选择器

文章目录 简介&#xff1a;基础选择器1. 通过 ID 选择器获取元素2. 通过 class 选择器获取元素3. 通过标签名选择器获取元素 层级选择器1. 通过直接子元素选取2. 通过后代元素选取 属性选择器1.[attributevalue]属性选择器2.[attribute!value] 属性选择器3.[attribute*value]属…

如何在Windows安装Wnmp服务并实现固定地址远程访问

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包&#xff0c;安装完成后即可得到一个Nginx MyS…

字符串处理-第11届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第26讲。 字符串处理&#…

Typescript---webpack和Babel的使用 03

webpack 通常情况下&#xff0c;实际开发中我们都需要使用构建工具对代码进行打包&#xff0c;TS同样也可以结合构建工具一起使用&#xff0c;下边以webpack为例介绍一下如何结合构建工具使用TS。 步骤&#xff1a; 初始化项目 进入项目根目录&#xff0c;执行命令 npm init -…

Dockerfile + harbor详解

Dockerfileharbor私服 一 docker工作流 1. docker管理流程 2. 镜像仓库阿里 (1) 阿里私有仓库 公司内部管理项目涉及到的所有docker镜像&#xff0c;会使用私有仓库的方式&#xff0c;集中管理。 (2) 创建阿里Docker仓库 登录阿里云创建私有仓库 网址&#xff1a;容器镜像服…

希亦、觉飞、小吉三款婴儿洗衣机大比拼!全方位对比测评

由于年龄幼小的婴儿的皮肤都非常的幼嫩&#xff0c;因此婴儿衣物材质的类型大部分都是采用为纯棉&#xff0c;并且婴儿的衣物不能够与大人的衣物一起进行混洗&#xff0c;容易把细菌感染到宝宝的衣物上&#xff0c;因此很多家庭为了保证宝宝衣服的有效清洁&#xff0c;避免交叉…

感恩客户·持续向上-契约锁电子签章

2023年&#xff0c;电子签章成为组织数字化建设中的刚性需求&#xff0c;市场机遇帮助契约锁实现了产品、伙伴、客户、应用场景等全方位的持续发展。 感恩客户和伙伴的支持&#xff0c;让契约锁在2023年不断成长和进步。 感恩客户相伴成长 2023年&#xff0c;契约锁为“政府机关…

IDEA 控制台中文乱码问题解决方法(UTF-8 编码)

设置 IDEA 编码格式 1&#xff1a;打开 IntelliJ IDEA>File>Setting>Editor>File Encodings&#xff0c;将 Global Encoding、Project Encoding、Default encodeing for properties files 这三项都设置成 UTF-8 2&#xff1a;将 vm option 参数改为&#xff1a; -…

os.path.join(a,b)末尾出现\问题

文章目录 问题描述解决 问题描述 config[save_path] dataset/data/output 并且 config[model_name] &#xff08;空字符串&#xff09; os.path.join() 函数在处理路径时会正确处理路径分隔符&#xff0c;并避免出现多余的斜杠。但是&#xff0c;如果 config[‘save_path’]…

Linux进程以及计划任务

一.程序和进程以及线程 内核功用&#xff1a;进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等 对于所有的操作系统&#xff0c;都有基本的功能 1.程序 保存在硬盘、光盘等介质中的可执行代码和数据&#xff08;硬盘上躺着&#xff09; 静态保存的代码 执行…

MongoDB—SQL到MongoDB映射图表

一、术语和概念 下表显示了各种 SQL 术语和概念 以及相应的 MongoDB 术语和概念。 SQL Terms/Concepts MongoDB Terms/Concepts database database table collection row document or BSON document column field index index table joins $lookup, embedded docu…

ssm基于echarts的基金交易网站的设计与实现论文

摘 要 计算机网络发展到现在已经好几十年了&#xff0c;在理论上面已经有了很丰富的基础&#xff0c;并且在现实生活中也到处都在使用&#xff0c;可以说&#xff0c;经过几十年的发展&#xff0c;互联网技术已经把地域信息的隔阂给消除了&#xff0c;让整个世界都可以即时通话…

C语言中指针变量如何使用

一、指针变量的定义与声明 1.1 定义 指针变量是用来存储另一个变量的内存地址的变量。在C语言中&#xff0c;指针变量的类型是指向某个类型的指针。例如&#xff0c;int *p; 表示一个整型指针变量p。 1.2 声明 指针变量的声明分为两种形式&#xff0c;一种是直接声明&#…

什么是数据同步?为什么它很重要?

您的员工经常在不同的应用程序中查看同一组数据。 营销人员可能会在营销自动化平台中查看潜在客户&#xff0c;销售可能会在 CRM 中查看它们&#xff1b; HR 团队可能会在人力资源信息系统中跟踪员工信息&#xff0c;而 IT 可能会在项目管理系统中跟踪信息&#xff1b;财务团队…

EDI 项目推进流程

EDI 需求确认 交易伙伴发来EDI对接邀请&#xff0c;企业应该如何应对&#xff1f; 首先需要确认EDI需求&#xff0c;通常包括传输协议和报文标准以及传输的业务单据类型。可以向交易伙伴发送以下内容&#xff1a; &#xff08;中文版&#xff09; 与贵司建立EDI连接需要使用…

数据分析求职-面试技巧

之前咱们已经分享了岗位介绍、求职准备思路、简历如何准备&#xff0c;今天咱俩聊一聊面试的技巧~ 1. 面试流程 咱们先聊聊面试的基本流程&#xff1a;简历/笔试筛选->技术初面->技术二面->技术三面->技术交叉面->HR面。 这个过程中有几个点值得重点说说&…

通信基础——带宽

随着信息社会的发展和数字化进程的加速&#xff0c;通信技术已经成为现代社会最为重要的基础设施之一。而在通信技术中&#xff0c;带宽作为一个重要的概念&#xff0c;对于我们理解和应用现代通信技术具有至关重要的意义。本文将以“通信基础——带宽”为主题&#xff0c;对带…

如何正确使用docker搭建靶场--pikachu

在Linux中搭建靶场——pikachu 1.开启docker systemctl start docker 2.查看docker状态 systemctl status docker 3.查看docker存在那些镜像 docker images 4.拉取镜像&#xff0c;这里是以pikachu为例因此需要一个php5的版本 &#xff08;1&#xff09;打开代理&#xff…