wordpress做出影视网站/百度谷歌seo优化
文章目录
- Eureka注册中心
- 一、服务注册与发现
- 1.1 依赖导入
- ①父工程 SpringCloud 版本管理
- ②Eureka 服务端依赖
- ③Eureka 客户端依赖
- 1.2 服务注册
- ①创建 Eureka 服务端的主类
- ②设置 Eureka 服务端的配置文件
- ③设置 Eureka 客户端的配置文件
- ④关闭自我保护机制
- 1.3 服务发现
- ①远程调用
- ②负载均衡
- 二、注册中心高可用: 搭建 Eureka 集群
- ①服务端创建两个配置文件
- ②修改本地 hosts
- ③开启两个 EurekaServer 实例
- ④修改Eureka客户端的配置文件
提示:以下是本篇文章正文内容,SpringCloud 系列学习将会持续更新
Eureka注册中心
官方文档:https://docs.spring.io/spring-cloud-netflix/docs/current/reference/html/
前面我们了解了如何对单体应用进行拆分,并且也学习了如何进行服务之间的相互调用,但是存在一个问题,就是虽然服务拆分完成,但是没有一个比较合理的管理机制,如果单纯只是这样编写,在部署和维护起来,肯定是很麻烦的。
可以想象一下,如果某一天这些微服务的端口或是地址大规模地发生改变,我们就不得不将服务之间的调用路径大规模的同步进行修改,这是多么可怕的事情。我们需要削弱这种服务之间的强关联性,因此我们需要一个集中管理微服务的平台,这时就要借助我们这一部分的主角了。
Eureka 能够自动注册并发现微服务,然后对服务的状态、信息进行集中管理,这样当我们需要获取其他服务的信息时,我们只需要向 Eureka 进行查询就可以了。
像这样的话,服务之间的强关联性就会被进一步削弱。
一、服务注册与发现
1.1 依赖导入
①父工程 SpringCloud 版本管理
我们先在父工程中添加一下 SpringCloud 的依赖 进行版本管理,这里选用 2021.0.1 版本。
官网查看:https://spring.io/projects/spring-cloud#learn
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.1</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
②Eureka 服务端依赖
现在我们就来搭建一个 Eureka 服务器,只需要创建一个新的 Maven 项目即可(eureka-server
)
接着我们为Eureka服务端添加 Eureka 依赖:
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
</dependencies>
③Eureka 客户端依赖
我们的三个微服务客户端,首先还是需要导入 Eureka 依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
回到目录…
1.2 服务注册
①创建 Eureka 服务端的主类
需要使用@EnableEurekaServer
注解:
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {public static void main(String[] args) {SpringApplication.run(EurekaServerApplication.class, args);}
}
②设置 Eureka 服务端的配置文件
server:port: 8888
eureka:instance:hostname: localhost # eureka服务端的实例名称client:# 是否在服务中心注册自己, 默认为 trueregister-with-eureka: false# false表示自己就是注册中心,我的职责就是维护服务实例,并不需要去检索服务fetch-registry: falseservice-url:# 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
好了,现在差不多可以启动了,启动完成后,直接localhost:8888
即可访问 Eureka 的管理后台:
③设置 Eureka 客户端的配置文件
spring:application:name: userservice
eureka:client:service-url:defaultZone: http://localhost:8888/eureka
OK,无需在启动类添加注解,直接启动就可以了,然后打开 Eureka 的服务管理页面,可以看到我们刚刚开启的服务:
当我们的服务启动之后,会每隔一段时间跟 Eureka 发送一次心跳包,这样 Eureka 就能够感知到我们的服务是否处于正常运行状态。
④关闭自我保护机制
Eureka 的自我保护机制指的是,当网络发生问题导致服务访问失败时,eureka 注册中心不会马上把应用剔除,继续保留一段时间。但这样对我们实际开发来说,需要频繁重启应用的时候,不方便测试,需要将自我保护机制关闭。
Ⅰ 修改 eureka 服务端:
eureka:server:# 关闭自我保护机制,保证不可用服务被及时剔除enable-self-preservation: false# 心跳检测时间,设置成2秒eviction-interval-timer-in-ms: 2000
Ⅱ 修改 eureka 客户端:
eureka:instance:# eureka客户端向服务端发送心跳的时间间隔,单位是秒(默认30秒)lease-renewal-interval-in-seconds: 1# eureka服务端在收到最后一次心跳后等待时间的上限,单位为秒(默认90秒),超时将会剔除服务lease-expiration-duration-in-seconds: 2
配置完成之后,经测试可体验到在服务关闭后非常快速地剔除应用。
回到目录…
1.3 服务发现
①远程调用
那么,现在我们怎么实现服务发现呢?
原本的微服务远程调用,那么就必须要知道其他服务的地址:
RestTemplate template = new RestTemplate();
User user = template.getForObject("http://localhost:8082/user/"+uid, User.class);
修改后的微服务远程调用:
a. 我们手动将 RestTemplate 声明为一个 Bean 注册到 Ioc 容器中,然后添加@LoadBalanced
注解,这样 Eureka 就会对服务的调用进行自动发现,并提供负载均衡:
@Configuration
public class BeanConfiguration {@Bean@LoadBalanced // 负载均衡public RestTemplate getRestTemplate() {return new RestTemplate();}
}
b. 而现在有了 Eureka 之后,我们只需要用服务名称
对其查询:
@Service
public class BorrowServiceImpl implements BorrowService {@Resourceprivate BorrowMapper borrowMapper;@Resource// RestTemplate 支持多种方式的远程调用private RestTemplate template;@Overridepublic UserBorrowView getBorrowViewByUid(int uid) {// 现在拿到借阅关联信息了,怎么调用其他服务获取信息呢?List<Borrow> borrowList = borrowMapper.getBorrowsByUid(uid);// 这里不用再写IP,直接写服务名称 userserviceUser user = this.template.getForObject("http://userservice/user/"+uid, User.class);// 这里通过调用 getForObject 来请求其他服务,并将结果自动进行封装List<Book> bookList = borrowList.stream().map(b -> template.getForObject("http://bookservice/book/"+b.getBid(), Book.class)).collect(Collectors.toList());return new UserBorrowView(user, bookList);}
}
现在我们就可以正常调用了:
回到目录…
②负载均衡
🐳同一个服务器多开实例,设置不同的端口:
a. Edit Configuration… -> 选中 UserApplication -> 新建目录 Move into new folder -> 在该目录下新建 Spring Boot -> 进行如下配置
b. 启动所有实例:
c. 此时,我们在 Eureka 后台也可以看到新增的实例:
🐳如何观察 Eureka 对我们多实例的负载均衡:
a. 我们有2个 UserApplication 的实例,可以在控制层的某个服务调用代码中添加日志打印:当前实例的IP:PORT
@RestController
@Slf4j
public class UserController {@Resourceprivate UserService userService;@ResourceEnvironment environment; // org.springframework.core.env.Environment@GetMapping("/user/{uid}")public User findUserById(@PathVariable("uid") int uid) throws UnknownHostException {String hostIp = InetAddress.getLocalHost().getHostAddress();String port = environment.getProperty("server.port");log.info(hostIp + ":" + port + " 的findUserById()被访问了!");return userService.getUserById(uid);}
}
b. 然后重新启动。我们多次访问http://localhost:8082/borrow/3
,其中 BorrowService 就会进行远程调用 UserService,这时我们通过查看 UserApplication-1 和 UserApplication-2 的控制台日志,就可以发现它们是被轮循调用的。
这样,服务自动发现以及简单的负载均衡就实现完成了,并且,如果某个微服务挂掉了,只要存在其他同样的微服务实例在运行,那么就不会导致整个微服务不可用,极大地保证了安全性。
回到目录…
二、注册中心高可用: 搭建 Eureka 集群
各位可否想过这样的一个问题?虽然Eureka能够实现服务注册和发现,但是如果Eureka服务器崩溃了,岂不是所有需要用到服务发现的微服务就GG了?
为了避免,这种问题,我们也可以像上面那样,搭建Eureka集群,存在多个Eureka服务器,这样就算挂掉其中一个,其他的也还在正常运行,就不会使得服务注册与发现不可用。当然,要是物理黑客直接炸了整个机房,那还是算了吧。
我们来看看如何搭建Eureka集群,这里由于机器配置不高,就搭建两个Eureka服务器组成集群。
①服务端创建两个配置文件
application-1.yml
server:port: 8801
spring:application:name: eurekaserver # 所有eureak的这个值要设置为同一个
eureka:instance:# 由于不支持多个localhost的Eureka服务器,但是又只有本地测试环境,所以就只能自定义主机名称了# 如果报错主机名称改为 eureka01hostname: eureka01client:# false表示自己就是注册中心fetch-registry: falseservice-url:# 注意这里填写其他 Eureka 服务器的地址,不用写自己的defaultZone: http://eureka02:8802/eureka
application-2.yml
server:port: 8802
spring:application:name: eurekaserver
eureka:instance:hostname: eureka02client:fetch-registry: falseservice-url:defaultZone: http://eureka01:8801/eureka
②修改本地 hosts
这里由于我们修改成自定义的地址,需要在 hosts 文件中将其解析到 127.0.0.1 才能回到 localhost。
Linux 下文件路径为 /etc/hosts
Windows 下文件路径为 C:\Windows\system32\drivers\etc\hosts
,需要获取权限比较麻烦,可以利用火绒安全软件直接修改
Windows系统修改hosts后需要刷新DNS缓存使之生效,在cmd命令行中执行命令:ipconfig/flushdns
回到目录…
③开启两个 EurekaServer 实例
对创建的两个配置文件分别添加启动配置,直接使用-Dspring.profiles.active
指定启用的配置文件即可:
接着启动这两个注册中心,这两个 Eureka 管理页面都可以被访问,我们访问其中一个:
可以看到下方replicas中已经包含了另一个Eureka服务器的地址,并且是可用状态。
回到目录…
④修改Eureka客户端的配置文件
eureka:client:service-url:# 将两个Eureka的地址都加入,这样就算有一个Eureka挂掉,也能完成注册defaultZone: http://localhost:8801/eureka, http://localhost:8802/eureka
可以看到,服务全部成功注册,并且两个 Eureka 服务端都显示为已注册:
接着我们模拟一下,将其中一个Eureka服务器关闭掉,可以看到它会直接变成不可用状态:
当然,如果这个时候我们重启刚刚关闭的Eureka服务器,会自动同步其他Eureka服务器的数据。
回到目录…
总结:
提示:这里对文章进行总结:
本文是对SpringCloud的学习,学习了它的组件Eureka注册中心,包括服务的注册与发现,高可用(Eureka集群的搭建)。之后的学习内容将持续更新!!!
相关文章:

SpringCloud之 Eureka注册中心
文章目录Eureka注册中心一、服务注册与发现1.1 依赖导入①父工程 SpringCloud 版本管理②Eureka 服务端依赖③Eureka 客户端依赖1.2 服务注册①创建 Eureka 服务端的主类②设置 Eureka 服务端的配置文件③设置 Eureka 客户端的配置文件④关闭自我保护机制1.3 服务发现①远程调用…...

Linux入门篇-用户管理
简介 linux基本的用户管理。 ⽤户的管理(切换到root) ⽤户的添加(useradd) ⽤户的删除(userdel) ⽤户的修改(usermod) ⽤户的查看(查看/etc/passwd) id⽤户组的管理(切换到root) …...

G. Special Permutation(构造)
1、题目 G. Special Permutation 这道题的意思是给我们从111到nnn的排列,然后我们对这个排列的顺序上进行调换,需要满足的条件是任意两个相邻元素的绝对值的差满足条件:2≤∣pi−pi1∣≤42\leq |p_i-p_{i 1}|\leq 42≤∣pi−pi1∣≤4 …...

QML动态对象管理
QML中有多种方式来动态创建和管理QML对象: Loader (加载器)Repeater(复制器)ListView,GridWiew,PethView(视图) (之后会介绍)使用加载器ÿ…...

cmake入门03 -自定义find外部库
自定义检测外部库使用pkg-config查找库搜索.pc配置文件cmake函数链接到库自定义find库检测外部库的便捷方法:使用CMake自带的find-module使用<package>Config.cmake, <package>ConfigVersion.cmake和<package>Targets.cmake。这些文件由软件商提供…...

Dubbo源码解析-——服务导出
前言 在之前我们讲过Spring和Dubbo的集成,我们在服务上标注了DubboService的注解,然后最终Dubbo会调用到ServiceBean#export方法中,本次我们就来剖析下服务导出的全流程。 一、前置回顾 由于ServiceBean实现了ApplicationListener接口&…...

vue+django+neo4j 基于知识图谱红楼梦问答系统
vuedjangoneo4j 基于知识图谱红楼梦问答系统 项目背景 知识图谱是一种以图谱形式描述客观世界中存在的各种实体、概念及其关系的技术, 广泛应用于智能搜索、自动问答和决策支持等领域. 可视分析技术可以将抽象的知识图谱映射为图形元素, 帮助用户直观地感知和分析数据, 从而提…...

2023年全国最新食品安全管理员精选真题及答案13
百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 121.关于食品召回的说法,以下表述不正确的是(&am…...

Keychron K7 Pro 轻薄矮轴机械键盘开箱体验
文章目录1. 拆箱2. 零件3. 外观4. 声音5. 特点5.1 有线 / 无线5.2 RGB背光5.3 轻薄5.4 mac / win / iphone 切换5.5 人体工程学支持5.6 扁平双射PBT键帽5.7 重新设计的稳定器5.8 扁平Gateron(佳达隆)轴体5.9 热插拔5.10 支持 QMK / VIA 改键6. 对比6.1 K7 与 K7 Pro 参数对比6.…...

加油站ai视觉识别系统 yolov7
加油站ai视觉识别系统通过yolov7网络模型深度学习,加油站ai视觉识别算法对现场画面中人员打电话抽烟等违规行为,还有现场出现明火烟雾等危险状态。除此之外,模型算法还可以对卸油时灭火器未正确摆放、人员离岗不在现场、卸油过程静电释放时间…...

【电子学会】2022年12月图形化二级 -- 绘制风车
绘制风车 1. 准备工作 (1)隐藏默认的小猫角色; (2)选择背景:“Xy-grid”。 2. 功能实现 (1)小猫角色的初始位置为(x:0,y:0); (2)线条粗细为…...

【golang/go语言】Go语言代码实践——高复用、易扩展性代码训练
某个项目里有一段老代码写的不是很好,想着能否通过自己掌握的知识,将其改善一下。感兴趣的小伙伴可以通过了解背景和需求,自己试想下该如何实现,如果有更好的方案也欢迎留言讨论。 1. 背景及需求 (1) 背景 假设我们的下游提供了…...

[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(学习复习笔记)
1.1 数据结构的研究内容 计算机解决问题的步骤 从具体问题抽象出数学模型设计一个解此数学模型的算法编写程序,进行测试、调试,直到解决问题 计算机解决问题的过程中寻求数学模型的实质是 分析问题,从中提取操作的对象,并找出这些…...

05_Pulsar的主要组件介绍与命令使用、名称空间、Pulsar的topic相关操作、Pulsar Topic(主题)相关操作_高级操作、
1.5.Apache Pulsar的主要组件介绍与命令使用 1.5.1.多租户模式 1.5.1.1. 什么是多租户 1.5.1.2.Pulsar多租户的相关特征_安全性(认证和授权) 1.5.1.3.Pulsar多租户的相关特性_隔离性 1.5.1.4.Pulsar多租户的相关操作 1-获取租户列表 2-创建租户 3-获取配…...

我的终端怎么莫名卡死了?shell下ctrl+s的含义
在终端下面一不小心按下了ctrl s,整个终端就锁住了,不知道原油的同学可能会以为终端卡死了,找不到原因只好关闭终端重新打开,然后下意识还不忘吐槽一句,垃圾ubuntu,动不动卡死。 事实上ctrl s在终端下是…...

【Vue】Vue的简单介绍与基本使用
一、什么是VueVue是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。1.构建用户界面传统方…...

网络知识篇
网络知识篇 局域网 当多台计算机或设备通过同一物理或逻辑连接(例如以太网或Wi-Fi网络)连接在一起,并且它们可以相互通信时,就构成了一个局域网(Local Area Network,LAN)。 子网划分 为了更…...

python 连接数据库
文章目录同步操作同步连Mysql同步连redis同步连mongodb异步操作异步连mysql异步连redis异步连mongodb同步操作 同步连Mysql python 连接mysql可以使用pymysql、mysqlclient等。 安装: # win pip install pymysql 连接mysql: # __author__ "laufing"…...

一文讲明白一致性hash算法
一致性Hash算法常用来解决数据分片时的数据扩容/缩容的性能问题。 一、业内数据分片用的Hash算法,将节点的hash值对节点数取余。 存取通过key / value的方式对节点取余。 二、数据分片使用hash算法的优缺点: 优点:简单,方便。 缺…...

Java分布式解决方案(一)
随着互联网的不断发展,互联网企业的业务在飞速变化,推动着系统架构也在不断地发生变化。 如今微服务技术越来越成熟,很多企业都采用微服务架构来支撑内部及对外的业务,尤其是在高 并发大流量的电商业务场景下,微服务…...

设备树系统学习(二)设备树的节点和属性
一、节点 1.节点命名格式 格式:<name>[@<unit-address>] name:是一个简单的 ASCII 字符串,长度最多为 31 个字符,节节点是根据它所代表的设备类型来命名的,比如 “gpu” 就表示这个节点是 gpu外设。 unit-address:一般表示设备的地址或寄存器首地址,可以为…...

【数据结构】二叉树的基本操作中的一些易错点
文章目录前言一、求二叉树节点个数二、求树的叶子结点个数三、求树的高度四、二叉树查找值为x的结点总结前言 笔者整理出了一些关于萌新在入门二叉树时容易犯的一些错误,你也来试试自己会不会掉到这些坑里把~ 一、求二叉树节点个数 错误示例: int Tre…...

在线图书借阅网站( Python +Vue 实现)
功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、图书详情页、用户中心模块。后台功能包括:总览、借阅管理、图书管理、分类…...

不平衡数据集的建模的技巧和策略
不平衡数据集是指一个类中的示例数量与另一类中的示例数量显著不同的情况。 例如在一个二元分类问题中,一个类只占总样本的一小部分,这被称为不平衡数据集。类不平衡会在构建机器学习模型时导致很多问题。不平衡数据集的主要问题之一是模型可能会偏向多数…...

3. 算法效率
同一个问题的不同算法在性能上的比较,现在的方法主要是算法时间复杂度。算法效率是算法操作(operate)或处理(treat)数据的重复次数最小。 例题选自《编程珠玑》第8章,算法设计技术。 这个问题是一维模式识别(人工智能)中的一个问题。 输入有n个元素的向量,输出连续子向…...

仪表放大器放大倍数分析-运算放大器
仪表放大器是一种非常特殊的精密差分电压放大器,它的主要特点是采用差分输入、具有很高的输入阻抗和共模抑制比,能够有效放大在共模电压干扰下的信号。本文简单分析一下三运放仪表放大器的放大倍数。 一、放大倍数理论分析 三运放仪表放大器的电路结构…...

laravel8多模块、多应用和多应用路由
1、安装多应用模块 composer require nwidart/laravel-modules2、执行命令,config文件夹下生成一个modules.php配置文件 php artisan vendor:publish --provider"Nwidart\Modules\LaravelModulesServiceProvider"3、修改config文件夹下的modules.php&am…...

【Java学习笔记】6.Java 变量类型
Java 变量类型 在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: type identifier [ value][, identifier [ value] ...] ;格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。 …...

Promise对象状态属性 工作流程 Promise对象的几个属性
Promise 对象状态属性介绍 实例对象中的一个属性 PromiseState pending 1、pending 变为 resolved / fullfilled 成功 2、pending 变为 rejected 失败 说明:只有这2种,且一个promise对象只能改变一次 无论变为成功还是失败,都会有一个结果…...

webgpu思考obj携带属性
今天在搞dbbh.js的时候,想到一个问题,啥问题呢,先看看情况 画2个材质不相同的box的时候 首先开始createCommandEncoder,然后beginRenderPass,分歧就在这里了 第一个box,他有自己的pipeline,第二个也有,那么…...