【SpringCloud】Erauke的基本原理与使用

news2024/9/25 21:27:58

【SpringCloud】Erauke的基本原理与使用

一、Eureka-提供者与消费者

【问】如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?

二、Eureka的结构和作用

什么是Eureka?

Eureka 解决服务调用的问题

order-service 如何得知 user-service实例地址?

order-service如何从多个user-service实例中选择具体的实例?

order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?

三、Eureka 的使用

搭建步骤

1. 搭建注册中心EurekaServer

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

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

(3)添加 application.yml 配置文件

【注】自身就是Eureka,为什么要配置自身的地址信息呢???

访问 Eureka服务

2. 服务注册

(1)引入 spring-cloud-starter-netflix-eureka-client 依赖

(2)applicaiton.yml 配置文件

3. 服务发现

(1)修改 order-service 的代码,修改访问路径,用服务名代替IP、端口

(2)在 order-service 项目的启动类中的 RestTemplate添加负载均衡的注解

运行结果


【SpringCloud】Erauke的基本原理与使用

一、Eureka-提供者与消费者

在服务调用关系中,会有两个不同的角色

  • 服务提供者:一次业务中,其它微服务调用的服务。(提供接口给其它微服务)
  • 服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

【问】如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?

  • 对于A调用B的业务而言:A是服务消费者,B是服务提供者

  • 对于B调用C的业务而言:B是服务消费者,C是服务提供者

所以,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言。服务B既可以是服务提供者,也可以是服务消费者

二、Eureka的结构和作用

什么是Eureka?

Eureka是Spring Cloud Netflix 模块中的子模块。

Eureka 采用 CS(Client/Server,客户端/服务器) 架构,它包括以下两大组件:

  • Eureka Server:Eureka 服务注册中心,主要用于提供服务注册功能。当微服务启动时,会将自己的服务注册到 Eureka Server。Eureka Server 维护了一个可用服务列表,存储了所有注册到 Eureka Server 的可用服务的信息,这些可用服务可以在 Eureka Server 的管理界面中直观看到。
  • Eureka Client:Eureka 客户端,通常指的是微服务系统中各个微服务,主要用于和 Eureka Server 进行交互。在微服务应用启动后,Eureka Client 会向 Eureka Server 发送心跳(默认周期为 30 秒)。若 Eureka Server 在多个心跳周期内没有接收到某个 Eureka Client 的心跳,Eureka Server 将它从可用服务列表中移除默认 90 秒)。 

Eureka的作用

Eureka 解决服务调用的问题

order-service 如何得知 user-service实例地址?

  • user-service 服务实例启动后,将自己的信息注册到 eureka-server(Eureka服务端)。这个叫服务注册

  • eureka-server 保存服务名称服务实例地址列表的映射关系

  • order-service 根据服务名称,拉取实例地址列表。这个叫服务发现服务拉取

order-service如何从多个user-service实例中选择具体的实例?

  • order-service 从实例列表中利用负载均衡算法选中一个实例地址

  • 向该实例地址发起远程调用

order-service如何得知某个user-service实例是否依然健康,是不是已经宕机?

  • user-service 会每隔一段时间(默认30秒)向 eureka-server 发起请求,报告自己状态,称为心跳

  • 当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除

  • order-service 拉取服务时,就能将故障实例排除

三、Eureka 的使用

搭建步骤

  1. 搭建注册中心,搭建EurekaServer
  2. 服务注册,将user-service、order-service都注册到Eureka中
  3. 服务发现,在order-service中完成服务拉取,然后通过负载均衡挑选一个服务,实现远程调用!

1. 搭建注册中心EurekaServer

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

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

(2)编写启动类,添加 @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

配置文件中配置3个信息,服务端口号、服务名称、eureka的地址信息

【注】自身就是Eureka,为什么要配置自身的地址信息呢???

是这样子的!因为Eureka自身也是一个微服务,所以,在启动的时候,会将自己也注册到eureka上!这是为了之后Eureka集群通信,假如启动了多个eureka,那么这些 Eureka之间会相互做注册,这样子它们之间就可以做数据交互了!

访问 Eureka服务

地址:http://127.0.0.1:10086/eureka (我们刚刚在application.yml配置的)

服务每部署一份就是一个实例

2. 服务注册

我们这里是要将 user-service 注册到 eureka-server 中去

(1)引入 spring-cloud-starter-netflix-eureka-client 依赖

user-service模块 的 pom.xml 文件中,引入下面的 spring-cloud-starter-netflix-eureka-client 依赖:

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

(2)applicaiton.yml 配置文件

server:
  port: 8081

spring:
  application:
    name: userservice  # eureka的服务名称
  ...

eureka:
  client:
    service-url:  # eureka 的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

所以,我们可以总结一下,注册一个服务大致有如下2个步骤

(1)导入 eureka-client 依赖

(2)在applicaiton.yml 中配置 Erueka地址

3. 服务发现

我们将 order-service 的逻辑修改:向 eureka-server 拉取 user-service 的信息实现服务发现

(1)修改 order-service 的代码,修改访问路径,用服务名代替IP、端口

@Service
public class OrderService {

    @Resource
    private OrderMapper orderMapper;

    @Resource
    private RestTemplate restTemplate;

    /**
     * 使用restTemplate 方式进行远程调用
     * @param orderId
     * @return
     */
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);

        // 2.利用restTemplate发起http请求
        // 为了负载均衡使用服务名称
        String url = "http://userservice/user/" + order.getUserId();
        // 得到的结果是json风格,getForObject()可以将json反序列化!
        User user = restTemplate.getForObject(url, User.class);

        // 3.封装user到Order
        order.setUser(user);

        // 4.返回
        return order;
    }
}

(2)在 order-service 项目的启动类中的 RestTemplate添加负载均衡的注解

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * @LoadBalanced: 表示restTemplate发起的请求要被 Ribbon处理
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

运行结果

IDEA运行情况 

通过 OrderService 模块去调用 UserService 模块,获取 User信息

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

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

相关文章

计算机论文的参考文献,应该怎么引用? - 易智编译EaseEditing

参考文献的引用格式&#xff0c;要看期刊的要求&#xff0c;期刊会规定文章格式&#xff0c;这里面就包括参考文献的格式。 如果不是投稿到期刊&#xff0c;也会有相应的要求&#xff0c;按要求来就行。 不仅很参考文献的格式&#xff0c;还有很多细节也要注意&#xff1a; …

【Java多线程】创建多线程的方式二---实现Runnable接口(多窗口卖票)

题&#xff1a;创建三个窗口卖票&#xff0c;总票数为100张 1.继承Thread类的方式&#xff1a; 因为是三个窗口共卖100张所以我们在定义ticket时要用到static来修饰 private static int ticket 100; 代码如下&#xff1a; class Window extends Thread{private static in…

k8s在华为openeuler搭建

参考文献 Kubernetes1.26.0部署(Ubuntu/CentOS)未完待续https://blog.csdn.net/weixin_67405599/article/details/128466282 Kubeadm 快速搭建 k8s v1.24.1 集群&#xff08;openEuler 22.03 LTS&#xff09;https://huaweicloud.csdn.net/633119cbd3efff3090b52068.html op…

宽度优先搜索算法(BFS)详解(超级详细讲解,附有大图)

目录 一.宽度优先搜索&#xff08;BFS&#xff09;是什么&#xff1f; 二.图解宽搜&#xff08;BFS&#xff09; 三.对比与发现 四。工具——队列 五.模板 六.最后 一.宽度优先搜索&#xff08;BFS&#xff09;是什么&#xff1f; 百度百科这样说&#xff1a; 宽度优先搜索…

一文讲透:质量管理的历史

&#xff08;本文摘自《软件质量保证与管理&#xff08;第2版&#xff09;》&#xff0c;清华大学出版社&#xff0c;2020&#xff09;1875年泰勒制诞生&#xff0c;意味着科学管理的开始&#xff0c;最初的质量管理也就是将检验活动与其他职能分离&#xff0c;出现了专职的检验…

2022-2023年中国数字经济投融资及创新展望研究报告(附下载链接)

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年12月份热门报告盘点罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图清华大学256页…

AF647 DBCO荧光染料,AF647 DBCO,Alexa Fluor 647 DBCO,AF-647, 二苯并环辛

一、产品描述&#xff1a;Alexa Fluor 647是一种明亮且可感光的远红色染料&#xff0c;其激发非常适合633 nm激光线。Alexa Fluor 647染料用于在成像和流式细胞仪中产生稳定的信号&#xff0c;在pH 4到pH 10之间为水溶性且对pH不敏感。这种长波长Alexa Fluor 染料的荧光肉眼看不…

什么是元器件二筛,为何要二筛,如何二筛,二筛的要求与分级要点总结

&#x1f3e1;《电子元器件学习目录》 目录1&#xff0c;什么是二筛2&#xff0c;为何要二筛3&#xff0c;如何进行二筛4&#xff0c;二筛的要求5&#xff0c;二筛的分级6&#xff0c;总结1&#xff0c;什么是二筛 电子元器件测试筛选即元器件二次筛选&#xff0c;又被简称为二…

Spring @Autowired 用法

Spring Autowired 用法首先看下Component举例 1 :举例 2 :验证是否调用的是默认构造器如何&#xff0c;在启动的时候执行有参数的构造函数&#xff1f;&#xff1f;&#xff0c;这就要看Autowired注解了&#xff01;Autowired注解首先看下Component 在类级别上添加了Component…

Flask入门教程(视频教程笔记)

初始化flask项目 前面的python环境之类的就不说了。 该博客是看 Flask 入门 这个视频教程写的笔记&#xff0c;如果你想入门一下Flask&#xff0c;可以看看这个课&#xff0c;虽然简短&#xff0c;但是入门部分讲的很好&#xff0c;同时可以利用这篇博客复习复习。如果你想了解…

二、MES的生态链

1、MES功能模块图1、 符合MESA/ISA-95标准&#xff0c;基于SOA架构&#xff0c;技术架构与业务架构分离&#xff0c;实现多厂分布式部署具备标准化模型组件&#xff0c;可根据客户需求选取标准组件、或调整业务对象脚本&#xff0c;组合成全新的业务组件&#xff0c;实现企业ME…

电动汽车热管理方案

热管理技术作为汽车节能、提高经济性和保障安全性的重要措施&#xff0c;在汽车研发过程中具有重要作用。传统燃油汽车的热管理系统主要包括发动机、变速器散热系统和汽车空调&#xff0c;而电动汽车的热管理系统在燃油汽车热管理架构的基础之上&#xff0c;又增加了电机电控热…

【Python百日进阶-数据分析】Day228 - plotly的图表的变换

文章目录一、过滤二、分组三、聚合四、多重转换4.1 Filter and Group By4.2 Filter and Aggregate4.3 所有变换4.4 Dash中的应用一、过滤 如何通过 Plotly 在 Python 中使用过滤器。 注意 transforms在 v5 中已弃用&#xff0c;plotly将在未来版本中删除 import plotly.io as…

分享97个PHP源码,总有一款适合您

PHP源码 分享97个PHP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 97个PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1OUa-rpzDK6CG8oj6BLZSTw?pwdxdt2 提取码&#xff…

上传ipa到appstore的步骤说明

上传ipa到appstore&#xff0c;首先你要有苹果开发者账号&#xff0c;一定要使用你自己的苹果开发者账号的证书打包&#xff0c;才能将ipa上传到你自己的苹果账号&#xff0c;才能提交到app store里。假如你还没有苹果开发者账号&#xff0c;或者你有证书但不是你自己账号生成的…

ES6ES6

ES8-ES8 新特性 4.1.async 和 await async和await 两种语法结合可以让异步代码像同步代码一样 4.1.1.async函数 async函数的返回值为 promise 对象&#xff0c; 2.promise 对象的结果由 asynt函数执行的返回值决定 4.1.2await表达式awaity必须写在 async 函数中 2.await 右侧…

Rockchip开发系列 - 3.2.引脚配置默认上拉下拉

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 返回总目录:Rockchip开发系列 - 总目录 开发过程中发现rk3568-linux.dtsi中耳机监测应急一直是处于低电平状态: 这个gpio表格也说…

【MyBatis】| 在WEB中应⽤MyBatis(使⽤MVC架构模式)

目录 一&#xff1a;在WEB中应⽤MyBatis&#xff08;使⽤MVC架构模式&#xff09; 1. 前期准备 2. 核心代码实现 3. 事务控制 4. 三大对象的作用域 一&#xff1a;在WEB中应⽤MyBatis&#xff08;使⽤MVC架构模式&#xff09; 目标&#xff1a; ①掌握mybatis在web应⽤中怎…

【闪电侠学netty】第9章 实现客户端登录

【Netty】读书笔记 - 跟闪电侠学 1. 内容概要 1.1 总结 1.1.1 逻辑处理器 ChannelHandler&#xff08;详见 第11章 Pipeline与ChannelHandler&#xff09; 1.1.2 编程小技巧 public class PacketCodeC {...public static final PacketCodeC INSTANCE new PacketCodeC();.…

spring学习-第一讲-beanFactory与ApplicationContext

BeanFactory与ApplicationContext区别 创建一个springboot项目&#xff0c;对这个函数的main函数来进行执行。 ConfigurableApplicationContext context SpringApplication.run(BeanFactoryApplicationContextStudyApplication.class, args); 很明显&#xff0c;Configurabl…