【SpringCloud】Eureka原理分析、搭建Eureka服务、服务注册、服务发现


在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


eureka

  • 一、Eureka原理分析
    • 1.1 服务调用出现的问题
    • 1.2 Eureka的作用
  • 二、 搭建Eureka
    • 2.1 创建项目
    • 2.2 编写启动类,添加@EnableEurekaServer注解
    • 2.3 添加application.yml的配置文件
    • 2.4 注册服务到Eureka
      • 2.4.1 在服务项目中引入eureka客户端依赖
      • 2.4.2 配置application.yml文件的信息
      • 2.4.3 模拟多实例部署
    • 2.5 服务发现
      • 2.5.1 在order-service完成服务拉取
      • 2.5.2 在order-service顶目的启动类Orderapplication中的RestTemplate添加负载均衡注解

一、Eureka原理分析

1.1 服务调用出现的问题

当有两个服务,第一个服务需要远程调用第二个服务,采用的方式是发起一次HTTP请求,在之前的代码中是将服务提供者的ip和端口号硬编码到服务发起者中,采用这种方式会出现一些问题,在开发时,会有开发环境、测试环境、生产环境等,每次环境的变更可能会使服务的地址发生改变,采用硬编码就需要在环境发生变化时修改硬编码,然后重新编译打包,这样会很麻烦,同时,为了处理并发等问题,服务提供者可能会是一个集群,集群中每个服务提供者都有自己的地址,这样由于服务消费者的硬编码,将无法准确的得到想要的服务。

1.2 Eureka的作用

  • 服务消费者该如何获取服务提供者的地址信息?
  • 如果有多个服务提供者,消费者该如何选择?
  • 消费者如何得知服务提供者的健康状态?

eureka中有一个eureka-server(注册中心)和作为eureka-client(eureka客户端)的服务消费者和服务提供者,其中服务提供者在启动时会把自己的信息注册给eureka-server,每一个服务启动时都会进行注册操作,此时,若有服务消费者想要获取一个服务,就可以从eureka注册中心中找,服务消费者将自己需要的服务发给注册中心,注册中心就会返回对应的服务信息,但服务提供者可能是一个集群,那么注册中心返回的结果可能是多个,这时可以采用负载均衡的算法挑出一个,然后发起远程调用的请求。
每个服务每隔30s都会向eureka-server(注册中心)发送一次心跳,表示当前服务正常运行,当eureka-server(注册中心)超过规定时间没有收到一个服务的心跳,会自动将这个服务移除,说明这个服务运行出现了问题。

二、 搭建Eureka

2.1 创建项目

在现有项目中创建名为eureka-server(可以自定义名称)的子模块


在这里插入图片描述


  • 选择Maven:

在这里插入图片描述


  • 在pom.xml中添加Eureka的依赖,添加SpringBoot的启动依赖
<dependencies><!--eureka服务端--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

2.2 编写启动类,添加@EnableEurekaServer注解

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class,args);}
}

2.3 添加application.yml的配置文件

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

2.4 注册服务到Eureka

  • 将一个服务注册到EurekaServer步骤如下:

2.4.1 在服务项目中引入eureka客户端依赖

<!--eureka客户端依赖-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.4.2 配置application.yml文件的信息

spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverapplication:name: userservice # user服务的服务名称
eureka:client:service-url: #eureka地址信息defaultZone: http://localhost:10086/eureka

2.4.3 模拟多实例部署

  • 在idea中选择一个部署好Eureka的模块,右键选择Copy Configuration

在这里插入图片描述

  • 自定义一个名字:
    在这里插入图片描述

  • 配置与原模块不同的端口号,点击Environment,在VM options中修改端口-Dserver.port=新端口号

在这里插入图片描述


2.5 服务发现

2.5.1 在order-service完成服务拉取

  • 服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
  • 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:
        //2.利用RestTemplate发起http请求,查询用户String url = "http://userservice/user/" + order.getUserId();

2.5.2 在order-service顶目的启动类Orderapplication中的RestTemplate添加负载均衡注解

    @Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka与zookeeper的集群

基础配置 systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/configvi /etc/hosts ip1 node1 ip2 node2 ip3 node3zookeeper介绍 zookeeper是一个分布式的协调服务&#xff0c;主要用…

基于YOLOv5、YOLOv8的火灾检测(超实用项目)

目录 1.简介 2.YOLO算法 3.基于YOLOv5、YOLOv8的火灾检测 视频已上传b站 YOLOv5/YOLOv8的火灾检测&#xff08;超实用项目&#xff09;_哔哩哔哩_bilibili 本文为系列专栏&#xff0c;包括各种YOLO检测算法项目、追踪算法项目、双目视觉、深度结构光相机测距测速三维测量项…

【yaml文件的编写】

yaml文件编写 YAML语法格式写一个yaml文件demo创建资源对象查看创建的pod资源创建service服务对外提供访问并测试创建资源对象查看创建的service在浏览器输入 nodeIP:nodePort 即可访问 详解k8s中的port&#xff1a;portnodePorttargetPortcontainerPortkubectl run --dry-runc…

数据库 explain 关键字解析

目录 1. explain 概述 2. explain 关键字的使用方式 3. explain 的版本迭代 4. explain 只分析SQL语句&#xff0c;不执行SQL语句 5. explain 输出结果中各个字段的含义 6. type 表示检索表数据的方式 7. key_len表示使用的索引的长度 8. rows 表示预估读取到的行数 9…

电子招标投标系统 —采购招投标管理一体化系统-

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

chromadb 0.4.0 后的改动

本文基于一篇上次写的博客&#xff1a;[开源项目推荐]privateGPT使用体验和修改 文章目录 一.上次改好的ingest.py用不了了&#xff0c;折腾了一会儿二.发现privateGPT官方更新了总结下变化效果 三.others 一.上次改好的ingest.py用不了了&#xff0c;折腾了一会儿 pydantic和c…

redis分布式秒杀锁

-- 获取锁标识&#xff0c;是否与当前线程一致&#xff1f; if(redis.call(get, KEYS[1]) ARGV[1]) then-- 一致&#xff0c;删除return redis.call(del, KEYS[1]) end -- 不一致&#xff0c;直接返回 return 0package com.platform.lock;public interface ILock {/*** 获取锁…

全网最新最全的软件测试面试题

一、前言 与开发工程师相比&#xff0c;软件测试工程师前期可能不会太深&#xff0c;但涉及面还是很广的。 在一年左右的实习生或岗位的早期面试中&#xff0c;主要是问一些基本的问题。 涉及到的知识主要包括MySQL数据库的使用、Linux操作系统的使用、软件测试框架问题、测试…

【three.js】坐标辅助器和轨道控制器

结合上一篇基本的3d页面代码&#xff0c;我们在里面添加坐标辅助器&#xff0c;也就是x y z轴坐标系&#xff0c;这样可以更直观的查看物体的位置 一、添加坐标辅助器 查看效果&#xff0c;z轴不显示是因为&#xff0c;z轴是正对我们脸部&#xff0c;从我们正面看就是一个点 …

整体网络架构p22

1. 两次卷积&#xff0c;一次池化。得到一个三维特征图&#xff0c;然后让三维的特征图&#xff0c;三个值进行相乘拉成特征向量&#xff0c;把得到的结果需要靠全连接层。 带参数计算才算一层 算conv的个数FC全连接层就得到卷积神经网络的层数 FC:全连接层 2. 3.reset网络&a…

Fastadmin 子级菜单展开合并,分类父级归纳

这里踩过一个坑&#xff0c;fastadmin默认的展开合并预定义处理的变量是pid。 所以建表时父级id需要是pid&#xff1b; 当然不是pid也没关系&#xff0c;这里以cat_id为例&#xff0c;多加一步处理一样能实现。 废话少说上代码&#xff1a; 首先在控制器&#xff0c; 引用…

【Linux基础】Linux的基本指令使用(超详细解析,小白必看系列)

&#x1f449;系列专栏&#xff1a;【Linux基础】 &#x1f648;个人主页&#xff1a;sunnyll 目录 &#x1f4a6; ls 指令 &#x1f4a6; pwd指令 &#x1f4a6;cd指令 &#x1f4a6;touch指令 &#x1f4a6;mkdir指令&#xff08;重要&#xff09; &#x1f4a6;rmdir指令…

openwrt rm500u ncm方式拨号步骤记录

1.进入设备页面 用户名&#xff1a;root 2.创建接口 3.配置接口 国内APN 信息 中国移动APN&#xff1a;CMNET 中国联通APN&#xff1a;3GNET 中国电信APN&#xff1a;CTNET 4.防火墙配置 5.点击Save&Apply 6.配置完成后重启设备。重新进入设备页面&#xff0c;可以看…

【轻松玩转MacOS】外部设备篇

引言 在开始之前&#xff0c;我们先来了解一下为什么要连接外部设备。想象一下&#xff0c;你正在享受MacOS带来的便捷和高效&#xff0c;突然需要打印一份文件&#xff0c;但你发现打印机无法连接&#xff1b;或者你需要将手机投屏到电脑上&#xff0c;却不知道该如何操作。这…

NFTScan | 10.02~10.08 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.10.02~ 2023.10.08 NFT Hot News 01/ 9 月 OpenSea 交易额为 7300 万美元&#xff0c;创两年新低 10 月 2 日&#xff0c;数据显示 9 月 NFT 平台 OpenSea 的交易总额为 73,141,407…

Unity实现设计模式——适配器模式

Unity实现设计模式——适配器模式 适配器模式又称为变压器模式、包装模式&#xff08;Wrapper&#xff09; 将一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 在一个在役的项目期望在原有接口的基础…

Lua系列文章(1)---Lua5.4参考手册学习总结

windows系统上安装lua,下载地址&#xff1a; Github 下载地址&#xff1a;https://github.com/rjpcomputing/luaforwindows/releases 可以有一个叫SciTE的IDE环境执行lua程序 1 – 简介 Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。 它支持过程编程&#xff0c; 面向对…

JavaSE的常用API学习——字符串相关

目录 一、什么是API 二、String字符串 (一)创建String对象的两种方式 1.直接赋值的内存模型 2.new的内存模型 (二)字符串之间的比较与equals 1.运算符 2.equls()方法 三、StringBuilder的用法 1.StringBuilder的构造方法 2.StringBuilder的常用成员方法 3.小练习&a…

超详细!Android Termux上如何安装MySQL,内网穿透实现公网远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

(四)激光线扫描-光平面标定

在上一章节,已经实现了对激光线条的中心线提取,并且在最开始已经实现了对相机的标定,那么相机标定的作用是什么呢? 就是将图像二维点和空间三维点之间进行互相转换。 1. 什么是光平面 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面,也叫光刀面,与物体相交…