【SpringCloud】探索Eureka注册中心

news2024/12/25 9:13:22

在这里插入图片描述

🏡浩泽学编程:个人主页

 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》
              《RabbitMQ》《Spring》《SpringMVC》《项目实战》

🛸学无止境,不骄不躁,知行合一

文章目录

  • 前言
  • 一、前景引入
    • 简诉微服务
    • 问题
  • 二、使用Eureka
    • 未使用Eureka前
    • 使用Eureka后
    • 测试
    • 总结
  • 总结


前言

废话不多说,一文直接快速入门实用Eureka注册中心,讲述如何搭建EurekaServer,并注册服务,探索远程调用问题。


一、前景引入

简诉微服务

  • 单体架构:首先我们需要知道,我们大多数做一个SpringBoot的项目都是所有业务功能都在一个项目中开发,然后打包部署。
    • 缺点:耦合度高,后面如果在某些业务商添加功能,面临着不小的编辑修改;例如我在会员功能中,加入获取积分功能和积分兑换功能等。
  • 微服务出现分布式架构,根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,成为一个服务。
    • 优点:降低服务耦合、有利于服务升级扩展。
    • 微服务特征:
      • 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发
      • 面向服务:微服务对外暴露业务接口
      • 自治:团队独立、技术独立、数据独立、部署独立
      • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

问题

分布式实现服务拆分:

  • 服务集群地址如何维护?
  • 服务之间如何实现远程调用?
  • 服务健康状态如何感知?

本篇文章讲诉的Eureka将会简单解决上诉问题,让你豁然开朗。

二、使用Eureka

案例实现原则

  • 单一职责:不同微服务,不要重复开发相同业务
  • 数据独立:不要访问其它微服务的数据库
  • 面向服务:将自己的业务暴露为接口,供其它微服务调用

案例:现在有两个服务:根据id查询订单,根据id查询用户。
需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回
在这里插入图片描述
两个服务端口不一样,连接的数据库不一样:
在这里插入图片描述
在这里插入图片描述
每个单独服务的运行:
http://localhost:8080/order/101:
在这里插入图片描述
http://localhost:8081/user/1:
在这里插入图片描述

未使用Eureka前

正常我们实现远程调用思路:在订单查询的模块实现远程调用用户查询,再将获取的结果放到订单结果中。
微服务调用方式:

  • 基于RestTemplate发起的http请求实现远程调用
  • http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。

注入RestTemplate:
在这里插入图片描述
原来订单业务层:

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 查询订单
        Order order = orderMapper.findById(orderId);
        // 返回
        return order;
    }
}

现在加入远程调用:

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 查询订单
        Order order = orderMapper.findById(orderId);
        //发送用户请求
        String url = "http://127.0.0.1:8080/user/"+order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        order.setUser(user);
        // 返回
        return order;
    }
}

实现需求了(http://localhost:8080/order/101):
在这里插入图片描述
思考:

  • 服务消费者该如何获取服务提供者的地址信息?(上诉固定了请求地址,发生改变怎么办)
  • 如果有多个服务提供者,消费者该如何选择?
  • 消费者如何得知服务提供者的健康状态?(如果调用的服务器挂掉了,怎么知道)

使用Eureka后

Eureka的作用

  • 消费者该如何获取服务提供者具体信息?
    • 服务提供者启动时向eureka注册自己的信息
    • eureka保存这些信息
    • 消费者根据服务名称向eureka拉取提供者信息
  • 如果有多个服务提供者,消费者该如何选择?
    • 服务消费者利用负载均衡算法,从服务列表中挑选一个消费者
  • 如何感知服务提供者健康状态?
    • 服务提供者会每隔30秒向EurekaServer发送心跳请求报告健康状态
    • eureka会更新记录服务列表信息,心跳不正常会被剔除
    • 消费者就可以拉取到最新的信息

添加eureka-server模块:
在这里插入图片描述
eureka-server模块的配置文件:

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eureka-server # eureka服务名称
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka # eureka地址信息

eureka-server模块添加依赖(这是服务端):

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

编写eureka-server模块启动类,添加@EnableEurekaServer注解:

/**
 * @version 1.0.0
 * @Author: dragon_王
 * @Date: 2024/3/24 15:26:28
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

现在将需要注册的服务注册到EurekaService,步骤如下:
引入依赖
在user-service项目引入spring-cloud-starter-netflix-eureka-client的依赖

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

在user-service项目中application.yml文件配置
注意userservice就是我给这个user服务起的服务器名称,这就是前面说的——消费者该如何获取服务提供者具体信息?消费者根据服务名称向Eureka中拉取

spring:
  application:
    name: userservice # user服务的服务器名称
eureka:
  client:
    service-url: # eureka地址信息
      defaultZone: http://127.0.0.1:10086/eureka

order-server注册到Eureka中,步骤亦是如此,不再重复。

这样就将服务注册到EurekaServer中,现在运行order-server、user-server、eureka-server这三个服务,打开http://127.0.0.1:10086,就可以看到Eureka可视化管理界面:
在这里插入图片描述
可以看到注册的服务都在其中。

测试

  • 现在还有俩问题还没解决:
    • 如果有多个服务提供者,消费者该如何选择?
    • 如何感知服务提供者健康状态?
  • 如何感知服务提供者健康状态这个问题我不再演示,大家只需要知道:服务提供者会每隔30秒向EurekaServer发送心跳请求报告健康状态,eureka会更新记录服务列表信息,心跳不正常会被剔除。
  • 下面简单测试多个服务提供,会选择哪个。

右键UserApplication,点击Copy Configuration
在这里插入图片描述
弹出弹窗:
在这里插入图片描述
得到相同配置不同端口的user-server服务:
在这里插入图片描述
运行后,我们请求http://localhost:8080/order/101两次,看控制台打印:
在这里插入图片描述在这里插入图片描述
可以发现,请求第一次时,8081端口的服务响应的,第二次请求时,8082端口服务响应的,这也就解决了我们的疑问,当多个服务提供者时,spring会自动帮助我们从eureka-server端,根据userservice这个服务名称,获取实例列表,而后完成负载均衡(这里访问两次给均衡给不同端口的服务了)。

总结

总结一下搭建EureKa的步骤和服务注册的步骤,很简单:

搭建EurekaServer:

  • 引入eureka-server依赖
  • 添加@EnableEurekaServer注解
  • 在application.yml中配置eureka地址

服务注册:

  • 引入eureka-client依赖
  • 在application.yml中配置eureka地址

在这里插入图片描述

无论是消费者还是提供者,引入eureka-client依赖知道eureka地址后,都可以完成服务注册。


总结

以上就是Eureka的快速讲解,相信你已经会用了吧。

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

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

相关文章

AISD智能安全配电装置--智能监测、远程监控

安科瑞薛瑶瑶18701709087 AISD100单相、AISD300三相智能安全配电装置是安科瑞专为低压配电侧开发的一款智能安全配电产品。主要针对低压配电系统人身触电、线路老化、短路、漏电等原因引起电气安全问题而设计。 产品主要应用于学校、加油站、医院、银行、疗养院、康复中心、敬…

Douyin视频详情数据API接口(视频详情,评论)

抖音官方并没有直接提供公开的视频详情数据采集API接口给普通用户或第三方开发者。抖音的数据采集通常受到严格的限制&#xff0c;以保护用户隐私和平台安全。 请求示例&#xff0c;API接口接入Anzexi58 如果您需要获取抖音视频详情数据&#xff0c;包括评论、点赞等&#xff…

Java中 List 集合,通过 Stream 流进行排序总结

一、数据准备 public class OrderTest {private String channelCode;private BigDecimal rate;// 省略 getter、setter、toString()、constructor }List<OrderTest> orderTestList new ArrayList<>();OrderTest z09 new OrderTest("Z09", new BigDeci…

EasyCVR在银河麒麟V10系统中启动异常及解决方法

安防监控视频平台EasyCVR具备较强的兼容性&#xff0c;它可以支持国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议与SDK&#xff0c;如&#xff1a;海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。平台兼容性强&#xff0c;支持Windows系…

抖音视频关键词爬虫批量采集软件|视频提取下载工具

视频关键词批量采集软件 — 助力您快速获取所需视频 主要功能&#xff1a; 关键词批量提取视频和单独视频提取&#xff0c;提取后下载功能。 功能解析&#xff1a; 1. 关键词批量提取视频的解析 通过输入关键词进行视频搜索和提取。例如&#xff0c;输入“汽车配件”&#x…

抓取京东/淘宝类数据#Javascript#商品详情图片

提出问题 如何在京东商城爬取出各个商品的相关信息(价格、名称、评价、店铺名等等)&#xff0c;比如&#xff0c;打开web京东网站&#xff0c;那么商品展示列表的所有商品的信息&#xff0c;怎么爬下来&#xff0c;怎么保存到表格中&#xff1f; 我们来看看怎么实现这个功能。…

嵌入式系统调研报告

嵌入式系统调研报告 一、发展历程与趋势二、行业现状三、嵌入式工程师对职业生涯的看法 一、发展历程与趋势 嵌入式系统的发展历程可以分为四段&#xff1a; 20世纪60年代。当时&#xff0c;计算机技术还处于早期阶段&#xff0c;主要应用于科研和军事领域&#xff0c;比如&am…

【快速解决】解决谷歌自动更新的问题,禁止谷歌自动更新,如何防止chrome自动升级 chrome浏览器禁止自动升级设置方法

目录 问题描述 解决方法 1、搜索栏搜索控制面板 2、搜索&#xff1a;服务 ​编辑 3、点击Windows工具 4、点击服务 ​5、禁止谷歌更新 问题描述 由于我现在需要装一个谷歌的驱动系统&#xff0c;但是目前的谷歌驱动系统的版本都太旧了&#xff0c;谷歌自身的版本又太新了…

【scala】使用gradle和scala构建springboot程序

零、版本说明: springboot: 2.7.18 使用log4j2&#xff0c;不使用springboot自带的logback scala版本&#xff1a;2.11 jackson版本&#xff1a;2.16.0 一、依赖&#xff1a; buildscript {dependencies {// using spring-boot-maven-plugin as package toolclasspath("…

Docker实战指南:编辑Dockerfile、编译镜像、启动容器,一网打尽

万能dockerfile编写模板文件 FROM openjdk:11.0 as builder WORKDIR application ARG JAR_FILEtarget/*.jar COPY ${JAR_FILE} application.jar RUN java -Djarmodelayertools -jar application.jar extractFROM openjdk:11.0 WORKDIR application COPY --frombuilder applica…

【浏览器渲染-输入Url到页面渲染全流程】

概述 在面试题中有一道经典面试题就是浏览器输入url之后发送了什么&#xff0c;看了下网上的大多数文章都感觉不太全&#xff0c;所以这里梳理了比较全的流程&#xff0c;如果有误&#xff0c;欢迎评论指正。本文大致是从以下内容概览入手&#xff0c;有需要的可以跳转到感兴趣…

【C语言】函数atoi的详解与实现~

一、atoi函数的讲解 函数声明&#xff1a;int atoi( const char *string );头 文 件 &#xff1a;<stdlib.h>函数功能&#xff1a;对指针string所指向的字符串&#xff0c;将其中的一段连续的(0~9)数字按照( int )返回&#xff1b;函数特点&#xff1a;&#xff08;这里…

ElasTool v3.0 程序:材料弹性和机械性能的高效计算和可视化工具包

分享一个材料弹性和机械性能的高效计算和可视化工具包&#xff1a; ElasTool v3.0。 感谢论文的原作者&#xff01; 主要内容 “弹性和机械性能的高效计算和可视化对于材料的选择和新材料的设计至关重要。该工具包标志着材料弹性和机械性能计算分析和可视化方面的重大进步…

C++语言学习(二)—— C++语言的基本知识

目录 一、面向对象的三个核心概念 二、C语言中的I/O口 三、C语言中的数据类型​​​​​​​ 3.1 逻辑类型 3.2 引用类型 3.2.1 引用作为函数参数 3.2.2 引用作为函数返回值 3.2.3 引用作为类成员 3.3 类类型 四、 C语言中的内联函数 五、 函数重载 六、 带默认形参…

【项目】均衡代码评测

TOC 目录 项目介绍 开发环境 主要技术 项目实现 公共模块 日志 工具类 编译运行模块 介绍 编译 运行 编译和运行结合起来 业务逻辑模块 介绍 MVC模式框架 模型&#xff08;Model&#xff09; 视图&#xff08;View) 控制器&#xff08;Controller&#xff09…

【包远程运行安装】SpringBoot+Mysql实现的在线音乐播放系统源码+运行教程+开发文档(参考论文)

今天发布的是由【猿来入此】的优秀学员独立做的一个基于springboot脚手架的千千在线音乐播放系统&#xff0c;主要实现了在线音乐的播放和下载&#xff08;支持付费和开通VIP功能&#xff09; 除脚手架功能以外下面是系统的功能&#xff1a; 前台普通用户&#xff1a;注册、登录…

Java笔记(一)基础、流程控制、数组、面向对象基础

堆&#xff08;Heap&#xff09; &#xff1a;此内存区域的唯一目的就是存放对象实例&#xff0c;几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是&#xff1a;所有的对象实例以及数组都要在堆上分配。栈&#xff08;Stack&#xff09; &#xff1a;是指…

住宅IP是什么?与机房IP有哪些区别?

随着互联网的普及和发展&#xff0c;不同类型的IP地址在网络世界中扮演着重要角色。在网络架构中&#xff0c;机房IP和住宅IP是两种常见的IP类型&#xff0c;它们各有优劣&#xff0c;适用于不同的场景和需求。本文将对机房IP和住宅IP进行技术对比&#xff0c;并给出选择合适IP…

视频汇聚平台EasyCVR启用图形验证码之后调用login接口的操作方法

视频综合管理平台EasyCVR视频监控系统支持多协议接入、兼容多类型设备&#xff0c;平台可以将区域内所有部署的监控设备进行统一接入与集中汇聚管理&#xff0c;实现对监控区域的实时高清视频监控、录像与存储、设备管理、云台控制、语音对讲、级联共享等&#xff0c;在监控中心…

2020-Structure Aware Negative Sampling in Knowledge Graphs

摘要 使用对比估计学习知识图中实体和关系的低维表示是一种可扩展且有效的推断连接模式的方法。对比学习方法的一个关键方面是选择产生硬负样本的腐败分布&#xff0c;这迫使嵌入模型学习判别表示并找到观察数据的关键特征。虽然早期的方法要么采用过于简单的腐败分布&#xf…