鞍山天乙网络推广有限公司/资源网站快速优化排名
Eureka作为一个老牌经典的服务注册&发现技术,其设计和理念,也在影响后面的组件。目前主流的服务注册&发现的组件是Nacos
当前项目架构问题分析-引出Eureka
问题分析:
1.在企业级项目中,服务消费访问请求会存在高并发
2.如果只有一个会议中心-提供服务,可用性差
3.所以,会议中心提供服务往往是一个集群,也就是说会有多个会议中心-提供服务微服务模块
4.那么这个时候,就存在一个问题就是服务消费方,怎么去发现可以使用的服务
5.当服务消费方,发现了可以使用的服务后(可能是多个,又存在一个问题就是到底调用A服务,还是B服务的问题,这就引出了服务注册和负载均衡)
6.Eureka就可以解决上述问题
Eureka的使用
1.会员中心-提供服务的,在项目中,会做成集群,提供高可用
2.Eureka Server有必要的话,也可以做成集群
3.Eureka包含两个组件:reka Server和Eureka Client
4.Eureka Server提供注册服务,各个微服务节点通过配置启动后,会在EurekaServer中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观看到。
5.EurekaClient通过注册中心进行访问,是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(roud-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)
RPC: remote procedure call 远程(程序/过程)调用
服务注册与发现
Eureka采用了cS[client-server-java基础我们讲过一个多人聊天项目]的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。
系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接,通过Eureka Server来监控系统中各个微服务是否正常运行。
在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息比如服务地址通讯地址等以别名方式注册到注册中心上。
服务消费者或者服务提供者,以服务别名的方式去注册中心上获取到实际的服务提供者通讯地址,然后通过RPC调用服务
创建单机Eureka Server-注册中心
创建e-commerce-eureka-server-9001微服务模块【作为注册中心】
常规方式创建
修改e-commerce-eureka-server-9001的pom.xml,加入依赖
<dependencies><!--引入eureka-server场景启动器starter--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><!--使用版本仲裁.一个web服务,监听端口--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--说明:starter-actuator是springboot程序的监控系统,可实现系统的健康检测可以通过http://localhost:9001/actuator看到相关的连接和信息--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>com.stein.springcloud</groupId><artifactId>e-commerce-center-common-api</artifactId><version>${project.version}</version></dependency></dependencies>
创建resources/application.yml
配置Eureka
注意这儿的defaultZone,之前漏写了。
server:port: 9001
eureka:instance:hostname: localhostclient:#不向注册中心注册自己register-with-eureka: false#表示自己就是注册中心,作用就是维护注册服务实例,不需要去检索服务fetch-registry: falseservice-url:#设置与eureka server交互的模块,查询服务和注册服务都要依赖这个地址#静态写法:http://localhost:9001/eureka/ 下面改成了动态写法,更灵活defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
创建主启动类com/hspedu/springcloud/EurekaApplication.java
注意使用该注解@EnableEurekaServer。启动后在浏览器输入localhost:9001即可查看页面
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class,args);}
}
将member-service-provider-10000作为EurekaClient注册到e-commerce-eureka-server-9001成为服务提供者
1修改member-service-provider-10000的pom.xml
添加pom依赖
<!--引入Eureka-client 的starter,注意starter不要写漏了,很难排查:使用版本仲裁--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
2修改member-service-provider-10000的resources/application.yml
新增到application.yml
eureka:client:register-with-eureka: true #将自己注册到eureka-server。默认turefetch-registry: true #从eureka-server抓取注册信息。便于集群配合Ribbon使用负载均衡。默认tureservice-url:#表示将自己注册到哪个eureka-serverdefaultZone: http://localhost:9001/eureka
# instance:
# hostname:这儿是client端,不需要使用别名
3修改member-service-provider-10000的com/hspedu/springcloud/MemberApplication.java
添加注解@EnableEurekaClient。(注意区分Server端和Client端)
4完成测试
启动e-commerce-eureka-server-9001
启动member-service-provider-10000
查看浏览器:http://localhost:9001
微服务注册名配置说明:在yml中配置的(已经配置过了)
spring:application:name: member-service-provider-10000 #配置应用的名称。可以自定义,这儿保持一致了
配置member-service-consumer-80作为EurekaClient可以拉取/获取e-commerce-eureka-server-9001提供的服务信息
1修改pom.xml
<!--引入eureka-client--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
2修改application.yml
本次测试省略了 register-with-eureka/fetch-registry。因为默认值是true,依然正常。
很容易理解,毕竟client>service的数量,所以默认设置client的配置比较节省代码。
eureka:client:service-url:defaultZone: http://localhost:9001/eureka
3修改MemberConsumerApplication.jave
添加注解@EnableEurekaClient。(注意区分Server端和Client端)
4完成测试
启动e-commerce-eureka-server-9001
启动member-service-consumer-80
查看浏览器:http://localhost:9001。又多了一项
Eureka自我保护模式
通常为了健壮性,都不会禁用该模式。以下配置仅供参考,不常使用。
在服务端application.yml设置
eureka:server: #禁用自我保护模式enable-self-preservation: false
客户端application.yml设置
eureka:instance:#客户端向服务端发送心跳的时间间隔1s(默认是30s)lease-renewal-interval-in-seconds: 1#服务端最后一次收到心跳后的等待时间,超过将剔除服务(默认是90s)lease-expiration-duration-in-seconds: 2
测试:
启动server
启动provider
在server可以查看到provider
然后停止provider
2s后即可发现server里面已不显示该provider
相关文章:

SpringCloud-4_Eureka服务注册与发现
Eureka作为一个老牌经典的服务注册&发现技术,其设计和理念,也在影响后面的组件。目前主流的服务注册&发现的组件是Nacos当前项目架构问题分析-引出Eureka问题分析:1.在企业级项目中,服务消费访问请求会存在高并发2.如果只…...

【react全家桶】生命周期
文章目录04 【生命周期】1.简介2.初始化阶段2.1 constructor2.2 componentWillMount(即将废弃)2.3 static getDerivedStateFromProps(新钩子)2.4 render2.5 componentDidMount2.6 初始化阶段总结3.更新阶段3.1 componentWillRecei…...

虚拟机安装Windows 10
虚拟机安装Windows 10 镜像下载 方法一:下载我制作好的镜像文件->百度网盘链接 提取码:Chen 方法二:自己做一个 进入微软官网链接 下载"MediaCreationTool20H2" 运行该工具 点击下一步选择路径,等他下载好就欧克了…...

【CMU15-445数据库】bustub Project #2:B+ Tree(下)
Project 2 最后一篇,讲解 B 树并发控制的实现。说实话一开始博主以为这块内容不会很难(毕竟有 Project 1 一把大锁摆烂秒过的历史x),但实现起来才发现不用一把大锁真的极其痛苦,折腾了一周多才弄完。 本文分基础版算法…...

leetcode 困难 —— 外星文字典(拓扑排序)
题目: 现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同。 给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还原出此语言中已知的字…...

ubuntu server 18.04使用tensorflow进行ddqn训练全过程
0. 前言 需要使用ddqn完成某项任务,为了快速训练,使用带有GPU的服务器进行训练。记录下整个过程,以及遇到的坑。 1. 选择模板代码 参考代码来源 GitHub 该代码最后一次更新是Mar 24, 2020。 环境配置: python3.8 运行安装脚本…...

2023年全国最新二级建造师精选真题及答案14
百分百题库提供二级建造师考试试题、二建考试预测题、二级建造师考试真题、二建证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 二、多选题 61.已经取得下列资质的设计单位,可以直接申请相应类别施工总承包一级…...

mysql一条语句的写入原理
mysql写入原理 我们知道在mysql数据库最核心的大脑就是执行引擎; 其中的默认引擎Innodb在可靠执行和性能中做出来平衡; innodb支持在事务控制、读写效率,多用户并发,索引搜索方面都表现不俗; innodb如何进行数据写入…...

嵌入式Linux内核代码风格(二)
第九章:你已经把事情弄糟了 这没什么,我们都是这样。可能你的使用了很长时间Unix的朋友已经告诉你“GNU emacs”能 自动帮你格式化C源代码,而且你也注意到了,确实是这样,不过它所使用的默认值和我们 想要的相去甚远&a…...

Spring Boot @Aspect 切面编程实现访问请求日志记录
aop切面编程想必大家都不陌生了,aspect可以很方便开发人员对请求指定拦截层,一般是根据条件切入到controller控制层,做一些鉴权、分析注解、获取类名方法名参数、记录操作日志等。 在SpringBoot中使用aop首先是要导入依赖如下: …...

初学者的第一个Linux驱动
软件环境:Ubuntu20.04 Linux内核源码:3.4.39 硬件环境:GEC6818 什么是驱动?简单来说就是让硬件工作起来的程序代码。 Linux驱动模块加载有两种方式: 1、把写好的驱动代码直接编译进内核。 2、把写好的驱动代码编…...

7. 拼数
1 题目描述 拼数成绩10开启时间2021年09月24日 星期五 18:00折扣0.8折扣时间2021年11月15日 星期一 00:00允许迟交否关闭时间2021年11月23日 星期二 00:00 设有 n个正整数 a[1]…a[n],将它们联接成一排,相邻数字首尾相接,组成一个最大的整…...

Java每天15道面试题 | Redis
redis 和 和 memcached 什么区别?为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高? 区别: 1.mc 可缓存图片和视频。rd 支持除 k/v 更多的数据结构; 2.rd 可以使用虚拟内存,rd 可持久化和 aof 灾难恢复࿰…...

13_pinctrl子系统
总结 pinctrl作为驱动 iomuxc节点在设备树里面 存储全部所需的引脚配置信息 iomux节点匹配pinctrl子系统 控制硬件外设的时候 要知道有哪些gpio 再看gpio有哪些服用寄存器 接着在程序配置gpio相关寄存器 这样搞效率很低 所以用iomux节点保存所有的引脚组 pinctrl驱动起来的时…...

Linux系统对于实施人员的价值
Linux系统对于实施人员的价值 随着互联网的发展,linux系统越来越突显了巨大的作用,很多互联网公司,政府企业,只要用到服务器的地方几乎都能看到linux系统的身影,可以说服务是不是在linux系统跑的代表了企业的技术水平&…...

ForkJoin 和 Stream并行流
还在用 for 循环计算两个数之间所有数的和吗?下面提供两种新方法! 1. ForkJoin 1.1 背景 要知道,在一个方法中,如果没有做特殊的处理,那么在方法开始到结束使用的都是同一个线程,无论你的业务有多复杂 那…...

逻辑优化-cofactor
1. 简介 逻辑综合中的Cofactor优化方法是一种重要的逻辑优化技术。它通过提取逻辑电路中的共同部分,从而简化电路、减小面积和延迟。该方法广泛应用于电子设计自动化(EDA)领域中的逻辑综合、等价转换和优化等方面。 Cofactor优化方法最早由…...

车道线检测CondLaneNet论文和源码解读
CondLaneNet: a Top-to-down Lane Detection Framework Based on Conditional Convolution Paper:https://arxiv.org/pdf/2105.05003.pdf code:GitHub - aliyun/conditional-lane-detection 论文解读: 一、摘要 这项工作作为车道线检测任…...

vue3的插槽slots
文章目录普通插槽Test.vueFancyButton.vue具名插槽Test.vueBaseLayout.vue作用域插槽默认插槽Test.vueBaseLayout.vue具名作用域插槽Test.vueBaseLayout.vue普通插槽 父组件使用子组件时,在子组件闭合标签中提供内容模板,插入到子组件定义的出口的地方 …...

docker学校服务器管理
docker 学校服务器管理使用docker,docker使用go语言编写。对于docker的理解,需要知道几个关键字docker, scp,images, container。 docker-码头工人scp-传输命令images/repository-镜像container-容器 docker是码头工人,scp相当…...

pv和pvc
一、PV和PVC详解当前,存储的方式和种类有很多,并且各种存储的参数也需要非常专业的技术人员才能够了解。在Kubernetes集群中,放了方便我们的使用和管理,Kubernetes提出了PV和PVC的概念,这样Kubernetes集群的管理人员就…...

k8s篇之Pod 干预与 PDB
文章目录自愿干预和非自愿干预PDBPDB 示例分离集群所有者和应用程序所有者角色如何在集群上执行中断操作自愿干预和非自愿干预 Pod 不会消失,除非有人(用户或控制器)将其销毁,或者出现了不可避免的硬件或软件系统错误。 我们把这…...

Django学习17 -- ManytoManyField
1. ManyToManyField (参考:Django Documentation Release 4.1.4) 类定义 class ManyToManyField(to, **options)使用说明 A many-to-many relationship. Requires a positional argument: the class to which the model is related, which w…...

既然有MySQL了,为什么还要有Redis?
目录专栏导读一、同样是缓存,用map不行吗?二、Redis为什么是单线程的?三、Redis真的是单线程的吗?四、Redis优缺点1、优点2、缺点五、Redis常见业务场景六、Redis常见数据类型1、String2、List3、Hash4、Set5、Zset6、BitMap7、Bi…...

RSTP基础要点(上)
RSTP基础RSTP引入背景STP所存在的问题RSTP对于STP的改进端口角色重新划分端口状态重新划分快速收敛机制:PA机制端口快速切换边缘端口的引入RSTP引入背景 STP协议虽然能够解决环路问题,但是由于网络拓扑收敛较慢,影响了用户通信质量ÿ…...

Linux操作系统学习(信号处理)
文章目录进程信号信号的产生方式(信号产生前)1. 硬件产生2.调用系统函数向进程发信号3.软件产生4.定位进程崩溃的代码(进程异常退出产生信号)信号保存的方式(信号产生中)获取pending表&&修改block表…...

CopyOnWriteArrayList 源码解读
一、CopyOnWriteArrayList 源码解读 在 JUC 中,对于 ArrayList 的线程安全用法,比较推崇于使用 CopyOnWriteArrayList ,那 CopyOnWriteArrayList是怎么解决线程安全问题的呢,本文带领大家一起解读下 CopyOnWriteArrayList 的源码…...

方法
方法方法(函数)一、课前问答二、方法和函数三、方法的参数3.1 单个参数3.2 多个参数四、方法的返回值五、方法的多级调用六、递归方法(函数) 一、课前问答 1、break和continue的区别 2、嵌套循环的执行流程 3、二进制有哪些运算&…...

C/C++实现发送邮件功能(附源码)
C++常用功能源码系列 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实践。 专栏介绍:专栏讲本人近10年后端开发常用的案例,以高质量的代码提取出来,并对其进行了介绍。…...

Java虚拟机JVM-运行时数据区域说明
及时编译器 HotSpot虚拟机中含有两个即时编译器,分别是编译耗时短但输出代码优化程度较低的客户端编译器(简称为C1)以及编译耗时长但输出代码优化质量也更高的服务端编译器(简称为C2),通常它们会在分层编译…...