基于SpringCloud的微服务架构学习笔记(2)注册中心Eureka和负载均衡Ribbon

news2024/12/23 20:58:08

1. 7 Eureka注册中心

1.7.1 远程调用的问题

  1. 地址信息获取服务消费者如何获取服务提供者地址信息(不能每次都写死): URL:http://localhost:8081/user/"+order.getUserId()
  2. 多选一:如果有多个服务提供者,消费者如何进行选择
  3. 监测健康状态:消费者如何获知提供者的健康状态

1.7.2 eureka原理

  1. 地址信息获取:
    1)服务提供者启动时,向Eureka注册自己的信息
    2)Eureka保存这些信息
    3)消费者根据服务名向Erueka拉去提供者信息

  2. 多选一:
    1)使用负载均衡技术,从多个服务列表中,选择一个

  3. 监测健康状态
    1)服务提供者每隔30s会向Eureka发送自己的心跳数据,即是否正常工作
    2)如果不工作了会从保存的服务列表中剔除
    3)消费者根据最新的服务列表能够或者服务者健康状况

1.7.3 搭建EurekaServer

1)创建项目:引入spring-cloud-starter-netflix-eureka-server的依赖

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

2)编写启动类,添加@EnableEurekaServer注解

@EnableEurekaServer     //自动装配Eureka注解
@SpringBootApplication  //SpringBoot启动类注解
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

3)添加application.yml文件,并编写如下配置

server:
  port: 10086  #注册的端口

spring:
  application:
    name: eurekaserver  #服务注册名字
eureka:
  client:
    service-url:  #服务注册访问地址
    defaultZone: http://127.0.0.1:10086/eureka/

1.7.4 服务注册:注册user-service

  1. 引入依赖:在user-service项目引入spring-cloud-starter-netflix-eureka-client的依赖
//客户端依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  
</dependency>
  1. 添加配置:在application.yml文件,编写下面的配置
spring:
  application:
	name: userservice
eureka:
  client:
	service-url:
	  defaultZone: http://127.0.0.1:10086/eureka/
  1. 多服务注册(同一个服务,但是多端口,模拟多服务架构)
    1)如果直接复制一个服务,会发生冲突,故需要更改下VM选项:-Dserver.port=8082

1.7.4 服务注册:注册order-service

order-service虽然是消费者,但与user-service一样都是eureka的client端,同样可以实现服务注册:

  1. 引入依赖:在order-service项目引入spring-cloud-starter-netflix-eureka-client的依赖
//客户端依赖
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>  
</dependency>
  1. 添加配置:在application.yml文件,编写下面的配置
spring:
  application:
	name: orderservice
eureka:
  client:
	service-url:
	  defaultZone: http://127.0.0.1:10086/eureka/

1.7.6 order-service完成服务拉取(能够自助选择服务)

服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡

  1. 修改orderService中的代码,变更url路径
String url = "http://userservice/user/" + order.getUserId();
  1. 在orderService启动类中,添加的resttemplate远程调用上添加负载均衡注解;主要为了标记该调用发起的请求会被ribbon拦截并操作
@Bean
@LoadBalanced
public RestTemplate restTemplate() {    
	return new RestTemplate();
}

1.7.7 总结

## 1.8 Ribbon 在需要拦截的启动类上面添加注解:@LoadBalanced ### 1.8.1 负载均衡原理

1)order-serice发起请求:http://userservice/use/1
2)获取url中服务的id(userservice)
3)在Eureka中拉去userservice
4)返回服务列表(8081/8082)
5)服务负载均衡策略:IRule
6)选择某个服务:8081
7)修改原来的url,发起请求
8)请求服务8081

1.8.2 负载均衡策略

1)RoundRobinRule:简单轮询 2)ZoneAviodanceRule:使用Zone对服务器分配类,在做轮询 3)RandomRule:随机选择服务器 ### 1.8.3 负载均衡配置 总共有两种方式:代码方式和更改配置文件方式
  1. 代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:
@Bean
public IRulerandomRule(){
    return new RandomRule();
    }
  1. 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规则:
userservice:  
	ribbon:    
		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule#负载均衡规则

1.8.4 饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:  
	eager-load:    
		enabled: true # 开启饥饿加载    
		clients:userservice # 指定对userservice这个服务饥饿加载

1.8.5 总结

  1. Ribbon负载均衡规则
    1)规则接口是IRule
    2)默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询
  2. 负载均衡自定义方式
    1)代码方式:配置灵活,但修改时需要重新打包发布
    2)配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
  3. 饥饿加载
    1)开启饥饿加载
    2)指定饥饿加载的微服务名称

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

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

相关文章

HBase存储结构、基本架构和shell操作

文章目录一、HBase简介1.1、HBase定义1.2、HBase的存储结构1.3、HBase基本架构二、HBase Shell操作2.1、基本操作2.2、namespace2.3、DDL2.4、DML一、HBase简介 1.1、HBase定义 HBase是一个开源的分布式NoSQL数据库&#xff0c;它是Apache Hadoop项目的一部分&#xff0c;使用…

代码随想录算法训练营 day56 | 动态规划 647. 回文子串 516.最长回文子序列

day56647 回文子串1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3&#xff0c;dp数组如何初始化4.确定遍历顺序5.举例推导dp数组516 最长回文子序列1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化…

【H2实践】之 SpringBoot 整合

目标 本文紧接上篇【H2实践】之认识 H2&#xff0c;上篇简单介绍了 H2 及其使用&#xff0c;本文继上篇&#xff0c;探索 H2 与 SpringBoot 的整合。 主要实现目标&#xff1a; 1、SpringBoot 连接 H2 内存数据库&#xff0c;并对数据库进行管理。 2、访问 H2 Console 客户端…

Pytest 自动化测试框架

Pytest和Unittest测试框架的区别&#xff1f; 如何区分这两者&#xff0c;很简单unittest作为官方的测试框架&#xff0c;在测试方面更加基础&#xff0c;并且可以再次基础上进行二次开发&#xff0c;同时在用法上格式会更加复杂&#xff1b;而pytest框架作为第三方框架&#x…

52癫痫发作预测的有效双自注意力残差网络

Effective dual self-attentional residual networks for epileptic seizure prediction 摘要 癫痫发作预测作为慢性脑疾病中最具挑战性的数据分析任务之一&#xff0c;引起了众多研究者的广泛关注。癫痫发作预测&#xff0c;可以在许多方面大大提高患者的生活质量&#xff0…

springboot项目配置序列化,反序列化器

介绍本文介绍在项目中时间类型、枚举类型的序列化和反序列化自定义的处理类&#xff0c;也可以使用注解。建议枚举都实现一个统一的接口&#xff0c;方便处理。我这定义了一个Dict接口。枚举类型注解处理这种方式比较灵活&#xff0c;可以让枚举按照自己的方式序列化&#xff0…

三种通用方法——惠普电脑硬盘数据恢复

随着当今数字时代的到来&#xff0c;人们对于计算机硬盘上存储的数据越来越重视。然而&#xff0c;电脑硬盘也时常会发生数据丢失的情况&#xff0c;这时候就需要进行数据恢复。惠普电脑是市面上比较常见的品牌之一&#xff0c;因此本文将从惠普电脑硬盘数据恢复的角度出发&…

【你不知道的事】JavaScript 中用一种更先进的方式进行深拷贝:structuredClone

你是否知道&#xff0c;JavaScript中有一种原生的方法来做对象的深拷贝? 本文我们要介绍的是 structuredClone 函数&#xff0c;它是内置在 JavaScript 运行时中的: const calendarEvent {title: "Builder.io Conf",date: new Date(123),attendees: ["Steve…

EXCEL技能点3-常用技能1

1 引用格式 公式中引用单元格或者区域时,引用的类型可分为以下三种: 绝对引用 相对引用 混合引用 在Excel里&#xff0c;每个单元格都有一个编码&#xff0c;就像人的身份证一样&#xff0c;在Excel里是按照行列进行编码&#xff0c;例如A1就是第一列的第一行。 那么我们想要引…

QEMU启动x86-Linux内核

目录QEMU简介linux启动流程我的环境安装QEMU软件包安装源码安装编译linux内核编译busybox制作initramfs使用QEMU启动linux内核简化命令参考QEMU简介 QEMU&#xff08;quick emulator&#xff09;是一个通用的、开源的硬件模拟器&#xff0c;可以模拟不同硬件架构&#xff08;如…

Docker入门 第四部分

Docker 的优势 Docker 相比于传统虚拟化方式具有更多的优势&#xff1a; Docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动。 Docker 需要的资源更少。Docker 在操作系统级别进行虚拟化&#xff0c;Docker 容器和内核交互&#xff0c;几乎没有性能损耗&#xff0c;性能…

Windows安装Hadoop

当初搭建Hadoop、Hive、HBase、Flink等这些没有截图写文&#xff0c;今为分享特重装。下载Hadoop下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/以管理员身份运行cmd切换到所在目录执行start winrar x -y hadoop-3.3.4.tar.gz&#xff0c;解压。配置…

刚刚和ChatGPT聊了聊隐私计算

开放隐私计算ChatGPT最近太火了&#xff0c;作为一个背后有庞大数据支撑&#xff0c;而且还在不断进化的人工智能&#xff0c;每个人都想和它聊一聊。我们也不例外&#xff0c;于是刚刚和它聊了聊隐私计算那些事儿。先来几个行业问题&#xff0c;毕竟它背后有所有行业新闻、论文…

Python tkinter 如何实现网站下载工具?将所有数据一键获取

前言 铁汁们有没有想过&#xff0c;如何把几个代码的功能结合到一起呢&#xff1f; 有想过的话&#xff0c;有没有实现过呢&#xff1f; 其实很简单的啊&#xff0c;咱就写一个界面就好了&#xff0c;想要哪个代码运行&#xff0c;鼠标轻轻一点就行 开发环境 python 3.8: 解…

【分布式版本控制系统Git】| Git概述、Git安装、Git常用命令

目录 一&#xff1a;概述 1.1. 何为版本控制 1.2. 为什么需要版本控制 1.3. 版本控制工具 1.4. Git 简史 1.5. Git 工作机制 1.6. Git和代码托管中心 二&#xff1a;安装 2.1. Git安装 三&#xff1a;常用命令 3.1 设置用户签名 3.2 初始化本地库 3.3 查看本地库…

多节点部署一键启动脚本

1 背景 我们在实际项目开发的时候,往往一个大的项目需要很多人协同开发,大家都开发完成在一起联调的时候需要启动很多节点,如果每次都手动去启动所有节点效率非常低,所以我们可以写一个脚本一键启动所有进程,以下统称为节点。 根据节点依赖的环境,一键启动脚本分两种情…

电力电子中逐波限流控制以及dsp实现

逐波限流是指在电力系统运行中&#xff0c;对电力设备进行电流保护的一种措施。它的实现方式是通过对电力系统的电流进行逐波监测和控制&#xff0c;每一波电流都可以独立地进行限制&#xff0c;从而保护电力系统设备不受过载损坏或短路故障的影响。 逐波限流的作用是提高电力…

1. ELK Stack 理论篇之什么是ELK Stack?

ELK Stack 理论篇之什么是ELK Stack?1.1 什么是 ELK Stack&#xff1f;1.2 ELK Stack的发展史1.2.1 Elasticsearch1.2.2 引入 Logstash 和 Kibana&#xff0c;产品更强大1.2.3 社区越来越壮大&#xff0c;用例越来越丰富1.2.4 然后我们向 ELK 中加入了 Beats1.2.5 那么&#x…

es6模块

目录 一、语法说明 二、示例代码 三、运行测试 一.语法说明 JavaScript 现在有两种模块。一种是 ES6 模块&#xff0c;简称 ESM&#xff1b;另一种是 CommonJS 模块&#xff0c;简称 CJS。CommonJS 模块是 Node.js 专用的&#xff0c;与 ES6 模块不兼容。语法上面&#xff0…

XE开发Linux应用(二)-Webservice

新建一个工程。选择如图。继续输入服务名然后就生成对应的单元。增加linux 平台。完善对应的单元代码{ Invokable implementation File for Txaliontest which implements Ixaliontest }unit xaliontestImpl;interfaceuses Soap.InvokeRegistry, System.Types, Soap.XSBuiltIns…