当前位置:网站首页>【微服务】 微服务学习笔记二:Eureka注册中心的介绍及搭建
【微服务】 微服务学习笔记二:Eureka注册中心的介绍及搭建
2022-07-31 05:56:00 【m0_67394006】
个人简介:
> ??个人主页:
> ??学习方向:JAVA后端开发
> ??种一棵树最好的时间是十年前,其次是现在!
> 往期文章:SpringBoot项目整合微信支付
> ??喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。
前言:
1.前面基于Springboot的单体项目介绍已经完结了,至于项目中的其他功能实现我这里就不打算介绍了,因为涉及的知识点不难,而且都是简单的CRUD操作,假如有兴趣的话可以私信我我再看看要不要写几篇文章做个介绍。
2.完成上一阶段的学习,我就投入到了微服务的学习当中,所用教程为B站上面黑马的微服务教程。由于我的记性不是很好,所以对于新事物的学习我比较喜欢做笔记以加强理解,在这里我会将笔记的重点内容做个总结发布到“微服务学习”笔记栏目中。我是赵四,一名有追求的程序员,希望大家能多多支持,能给我点个关注就更好了。
目录
一:Eureka简介
1:问题引入
在介绍Eureka之前,我先讲两个概念,一是服务提供者,它指的是在一次业务中被其它微服务调用的服务(提供接口给其它微服务),也就是暴露接口给其它微服务调用;另一个是服务消费者,它是指再一次业务中调用其它服务的服务(调用其它服务提供的接口)。要注意的是,提供者与消费者之间的角色是相对的,就好比当你去买东西时候,相对于卖东西给你那个人你就是消费者;当你去卖东西时候相对于买你东西那个人你就是提供者。
在没有引入Eureka之前,我们可以通过RestTemplate指定URL路径来发送http请求,实现远程调用,举个例子:
// 2.利用RestTemplate发起Http请求,查询用户
//2.1 url路径
String url = "http://localhost:8081/user/" + order.getUserId();
//2.2 发送http请求,实现远程调用
User user = restTemplate.getForObject(url,User.class);
当我们需要调用8081端口提供的服务的时候,就可以通过上诉方法进行服务调用。上述方法是通过硬编码实现的,会存在很多的问题,比如我们需要调用大量不同的服务时候,就需要指定很多的URL,而且你还需要清楚地知道每个服务的IP和端口号,这样显然是很不友好的;此外,当一个服务提供很多实例时候,采用了上述硬编码方式消费者如何进行选择呢?就比如某一服务提供了三个实例,采用上述方式永远只能选定一个实例,另外两个实例永远不会被调用,除非你直接对代码进行更改。
最后还存在一个问题,消费者如何得知服务提供者的健康状态呢当请求的服务已经挂掉了,就算服务列表还有其他实例可以调用,由于采用的是硬编码形式,其他健康的服务提供者也无法被调用。那么有没有办法可以解决上述问题呢?答案是肯定的,Eureka的出现就解决了上面提到了问题。
2:Eureka的作用
在介绍Eureka的作用之前,我们首先来看一张图:

在Eureka架构中,微服务角色有两类:
EurekaServer:服务端,注册中心
记录服务信息
心跳监控
EurekaClient:客户端
Provider:服务提供者,例如上图的user-service
注册自己的信息到Eureka
每隔一定时间向EurekaServer发送心跳
consumer:服务消费者,例如上图的order-service
根据服务名称从EurekaServer拉取服务列表
基于服务列表做负载均衡,选中一个之后发起远程调用
每一个服务提供者启动时候都会向Eureka注册自己的信息(包括它自身),Eureka将会保存这些信息,这时候消费者就能通过服务名称向Eureka拉取提供者的信息。假如有多个服务提供者,比如user-service有8081、8082、8083这三个服务提供者,当消费者向EurekaServer注册中心拉取user-service信息的时候,注册中心就会返回user-service的服务列表,消费者再根据负载均衡算法进行选择。这样就能解除硬编码不能实现动态选择的问题,那么如何获取服务提供者的健康状态呢
每个服务提供者都会每隔一段时间向EurekaServer发送心跳请求以报告自己的健康状态,Eureka会更新记录服务列表的信息,以剔除心跳不正常的服务提供者,以保证向消费者提供的服务都是健康的。
二:Eureka的搭建
1:搭建EurekaServer
1).单独创建一个EurekaServer模块并引入相关依赖(整体项目架构如下)

<dependencies>
<!--eureka服务端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
2).编写启动类,添加@EnableEurekaServer注解
package cn.itcast.eureka;
?
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
?
@EnableEurekaServer
@SpringBootApplication
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的服务名称
eureka:
client:
? service-url: ?# eureka的地址信息
? ? defaultZone: http://127.0.0.1:10086/eureka
2:服务注册
引入eureka-client依赖
<!--eureka客户端依赖--> <dependency> ? ?<groupId>org.springframework.cloud</groupId> ? ?<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>在application.yml中配置eureka地址
eureka: client: ? service-url: ?# eureka的地址信息 ? ? defaultZone: http://127.0.0.1:10086/eureka
3:服务发现
引入eureka-client依赖
<!--eureka客户端依赖--> <dependency> ? ?<groupId>org.springframework.cloud</groupId> ? ?<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>在application.yml中配置eureka地址
eureka: client: ? service-url: ?# eureka的地址信息 ? ? defaultZone: http://127.0.0.1:10086/eureka给RestTemplate添加@LocalBalanced注解
/** * 创建RestTemplate并注入Spring容器 */ @Bean @LoadBalanced public RestTemplate restTemplate() { ? ?return new RestTemplate(); }用服务提供者的服务名称远程调用
// 2.利用RestTemplate发起Http请求,查询用户 //2.1 url路径 String url = "http://userServer/user/" + order.getUserId(); //2.2 发送http请求,实现远程调用 User user = restTemplate.getForObject(url,User.class);
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- Zotero | Zotero translator插件更新 | 解决百度学术文献无法获取问题
- mysql的下载及安装使用
- ls的用法
- Analysis of the implementation principle and detailed knowledge of v-model syntactic sugar and how to make the components you develop support v-model
- LeetCode:952. 按公因数计算最大组件大小【欧拉筛 + 并查集】
- 【云原生】-Docker容器迁移Oracle到MySQL
- DirectExchange switch simple introduction demo
- Zero-Shot Learning & Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
- 搭建zabbix监控及邮件报警(超详细教学)
- 第三方库-store
猜你喜欢

从入门到一位合格的爬虫师,这几点很重要

【编程题】【Scratch三级】2022.03 冬天下雪了

银河麒麟高级服务器v10 sp1 手动加载Raid卡驱动

Postgresql source code learning (34) - transaction log ⑩ - full page write mechanism

【Go语言入门教程】Go语言简介

银河麒麟V10 sp1服务器安装英伟达显卡驱动

shell之条件语句(test、if、case)

Core Tower Electronics won the championship in the Wuhu Division of the 11th China Innovation and Entrepreneurship Competition

剑指offer(一)

深度解析 z-index
随机推荐
Kubernetes scheduling
快速傅里叶变换(FFT)
树状数组(单点修改区间查询和区间修改单点查询)
【Star项目】小帽飞机大战(八)
2022.7.29 数组
Exam Questions Previous True Questions Wrong Bills [The Fourth Session] [Provincial Competition] [Group B]
在 ASP.NET Core 应用程序启动时运行代码的 3 种方法
外贸网站优化-外贸网站优化教程-外贸网站优化软件
Difficulty comparison between high concurrency and multithreading (easy to confuse)
小实战项目之——吃货联盟订餐系统
Run the NPM will pop up to ask "how are you going to open this file?"
使用powerDesigner反向工程生成Entity
Obtaining server and client information
银河麒麟V10 sp1服务器安装英伟达显卡驱动
【编程题】【Scratch三级】2022.03 冬天下雪了
Redux state management
测试 思维导图
【Go语言入门】一文搞懂Go语言的最新依赖管理:go mod的使用
cp 的用法
Bulk free text translation