服务注册Eureka

news2025/1/6 15:33:19

目录

一、背景

1、概念

2、CAP 理论

3、常见的注册中心

二、Eureka

三、搭建 Eureka Server

1、搭建注册中心

四、服务注册

五、服务发现

六、Eureka 和 Zooper 的区别


一、背景

1、概念

远程调用就类似于一种通信

例如:当游客与景区之间进行通信(电话的方式),此时游客需要得到景区的电话,例如通过景区官网或者 114 查号台进行查询

那么 114 平台又是如何知道景区和电话的关系的呢?

景区当创建和修改的时候告诉 114 平台,由 114 平台对信息进行维护,游客就可以通过 114 查询电话,再向景区进行通讯

上述的解决方案同样也适用于微服务中

在微服务中,有两个角色:服务消费者和服务提供者

当订单服务调用商品服务,从中获取到对应的商品信息,此时订单服务就是服务消费者,商品服务就是服务提供者

服务提供者在启动之初,向平台进行注册,告诉平台 应用 和 IP 的关系,服务消费者可以从平台中根据应用获取到 IP 地址,然后根据 IP 地址进行远程调用

服务提供者和注册中心的关系我们称之为服务注册,服务消费者和注册中心的关系称为服务发现

我们来看一下这三种角色分别的作用

注意:服务提供者和服务消费者是相对的概念!!!

服务注册和服务发现的解释:


2、CAP 理论

CAP 理论是分布式系统中最基础、最关键的理论

我们来看一下 CAP 理论的图:

C:Consistency 一致性(此处的一致性指的是强一致性)

A:Availability 可用性 (对所有请求都有响应,这个响应可能是错误的数据)

P:Partition tolerance 分区容错性(在网络分区的情况下,我们的系统依然可以对外提供服务)

例如:银行利率下调,这个通知需要下发到各个银行的工作人员,通知下发需要一定的时间

一致性:在相同的时间点,所有的工作人员对客户讲的利率都是一样的

可用性:不论何时,所有的银行工作人员对客户咨询利率都是有回复的(回复也有可能是旧利率)

分区容错性:如果其中一个工作人员请假了,银行仍然可以对外提供服务

在分布式系统中,P 必须要保证,所以 C 和 A 只能二选一,因此我们的架构就是 AP / CP 架构

CP架构: 为了保证分布式系统对外的数据⼀致性, 于是选择不返回任何数据

AP架构: 为了保证分布式系统的可⽤性, 节点2返回V0版本的数据(即使这个数据不正确)

什么是强一致性?

数据库集群分为主库和从库

客户端向数据库集群发送了一个数据修改的请求,数据库集群需要向客户端进行响应,响应的时机分为以下两种:

1、主库接收到请求,并处理成功,此时数据还未完全同步到从库,随着时间的推移,主库和从库的数据最终达到一致性

2、主库接收到请求,并且所有从库数据同步成功时,数据库集群才进行响应 

强一致性:主库和从库,无论何时对外提供的服务都是一致的【第二种情况】

弱一致性:随着时间的推移,最终达到了一致性【第一种情况】


3、常见的注册中心


二、Eureka

官方文档: https://github.com/Netflix/eureka/wiki
Eureka主要分为两个部分:
Eureka Server: 作为注册中心Server端, 向微服务应用程序提供服务注册, 发现, 健康检查等能力.
Eureka Client: 服务提供者, 服务启动时, 会向Eureka Server 注册自己的信息(IP,端口,服务信息
等),Eureka Server 会存储这些信息

三、搭建 Eureka Server

1、搭建注册中心

(1)创建项目

(2)pom 中加入 Eureka 的依赖

<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

(3)配置文件增加 Eureka 相关配置

# Eureka相关配置
# Eureka 服务
server:
  port: 10010
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false
    register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
    service-url:
      # 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

(4)启动类,开启 Eureka 功能

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


四、服务注册

服务注册分为以下几步:

1、加入 Eureka 的依赖

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

2、修改配置信息

#Eureka Client
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10010/eureka/
spring:
  application:
    name: product-service # 自定义名字

3、启动,测试


五、服务发现

服务发现分为以下几步:

1、加入 Eureka 依赖

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

2、修改配置信息

配置信息与上面的一样

3、修改远程调用代码

@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    public OrderInfo selectOrderById(Integer orderId){
        OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
        // String url = "http://127.0.0.1:9090/product/"+orderInfo.getProductId();
        List<ServiceInstance> instances = discoveryClient.getInstances("product-service");
        String uri = instances.get(0).getUri().toString();
        String url = uri + "/product/"+orderInfo.getProductId();
        ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
        orderInfo.setProductInfo(productInfo);
        return orderInfo;
    }
}

4、启动,测试


六、Eureka 和 Zooper 的区别

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

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

相关文章

代码随想录-Day51

115. 不同的子序列 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数&#xff0c;结果需要对 109 7 取模。 示例 1&#xff1a; 输入&#xff1a;s “rabbbit”, t “rabbit” 输出&#xff1a;3 解释&#xff1a; 如下所示, 有 3 种可以从 …

【SMPL简介】SMPL: A Skinned Multi-Person Linear Model【源码复现】

【SMPL简介】SMPL: A Skinned Multi-Person Linear Model【源码复现】 一、前言环境搭建运行demo.py 参考链接 一、前言 SMPL是一种3D人体建模方法.在数字人或者人物角色三维重建领域有着广泛应用 支持人体的各种形状及动作 可以简单理解为通过训练获取的人物模型 常用的模型有…

信息技术课堂纪律管理:从混乱到秩序的智慧转型

引言&#xff1a; 在信息爆炸的时代&#xff0c;信息技术课程如同一把开启未来世界大门的钥匙&#xff0c;为学生们搭建起探索科技奥秘的桥梁。然而&#xff0c;面对着屏幕背后的无限诱惑&#xff0c;维持课堂纪律&#xff0c;确保学生们专注于学习&#xff0c;成为了每位信息…

Flask项目搭建及部署 —— Python

flask搭建及部署 pip 19.2.3 python 3.7.5 Flask 1.1.1 Flask-SQLAlchemy 2.4.1 Pika 1.1.0 Redis 3.3.11 flask-wtf 0.14.2 1、创建flask项目&#xff1a; 创建完成后整个项目结构树&#xff1a; app.py: 项⽬管理⽂件&#xff0c;通过它管理项⽬。 static: 存放静态…

使用tcpdump抓取本本机的所有icmp包

1、抓取本机所有icmp包 tcpdump -i any icmp -vv 图中上半部分&#xff0c;是源主机tmp179无法ping通目标主机192.168.10.79&#xff08;因为把该主机关机了&#xff09;的状态&#xff0c;注意看&#xff0c;其中有unreachable 图中下半部分&#xff0c;是源主机tmp179可以p…

张量分解(2)——张量运算(内积、外积、直积、范数)

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

国内仅存的3个完美替代Google安卓商店的APP与网站

Google安卓商店在国内访问限制&#xff0c;部分谷歌商店镜像站点也相继受限&#xff0c;现分享目前仍可在国内顺畅使用的应用程序商店与网站资源&#xff0c;请大家且用且珍惜。 2024年7月8日国内验证有效的资源 F-Droid 简介&#xff1a;F-Droid&#xff0c;专注于开源软件的…

独立站爆款产品的选品思路及底层逻辑拆解

在这个竞争激烈的跨境电商市场&#xff0c;有一件事情比网站设计、营销策略、物流服务都更重要。那就是选品。跨境独立站选品是独立站成功的第一步&#xff0c;如果选错了产品&#xff0c;那么所有努力都可能白费。可能会面临库存积压、利润低迷、客户流失等问题。但是如果选对…

从数据到洞察:DataOps加速AI模型开发的秘密实践大公开!

作者 | 代立冬&#xff0c;白鲸开源科技联合创始人&CTO 引言 在AI驱动的商业世界中&#xff0c;DataOps作为连接数据与洞察的桥梁&#xff0c;正迅速成为企业数据战略的核心。 在WOT全球技术创新大会2024北京站&#xff0c;白鲸开源联合创始人&CTO 代立冬 在「大数据…

NFT 技术在艺术领域的应用

NFT (Non-Fungible Token) 技术在艺术领域有着广泛的应用&#xff0c;为艺术家和艺术品收藏家带来了新的机遇和挑战。以下是 NFT 技术在艺术领域的一些主要应用。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 数字艺术品确权和交…

【Spring Boot】Spring AOP动态代理,以及静态代理

目录 Spring AOP代理一. 代理的概念二. 静态代理三. JDK代理3.1 重写 invoke 方法进⾏功能增强3.2 通过Proxy类随机生成代理对象 四. CGLIB代理4.1 自定义类来重写intercept方法4.2 通过Enhancer类的create方法来创建代理类 五. AOP源码剖析 总结(重中之重&#xff0c;精华) Sp…

【人工智能】—基于成都市各区(市)县租房价格预测建模研究

引言 随着城市化进程的加速&#xff0c;人口流动日益频繁&#xff0c;租房市场作为城市生活的重要组成部分&#xff0c;其价格波动对居民生活质量和城市经济发展具有显著影响。成都市&#xff0c;作为中国西部地区的经济、文化、交通和科技中心&#xff0c;近年来吸引了大量人…

昇思25天学习打卡营第17天|linchenfengxue

RNN实现情感分类 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative 预测标签: Negative输入: This fil…

1.8.0-矩阵乘法的反向传播-简单推导

1相关资料 之前分享过一个博客里面写的&#xff0c;我们大致了解并记住结论的博客&#xff1a;【深度学习】7-矩阵乘法运算的反向传播求梯度_矩阵梯度公式-CSDN博客&#xff1b;这里再分享一下自然语言处理书上关于这部分的推导过程&#xff1a;3-矩阵相乘-梯度反向传播的计算…

开源模型应用落地-FastAPI-助力模型交互-进阶篇(一)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

上海慕尼黑电子展开展,启明智显携物联网前沿方案亮相

随着科技创新的浪潮不断涌来&#xff0c;上海慕尼黑电子展在万众瞩目中盛大开幕。本次展会汇聚了全球顶尖的电子产品与技术解决方案&#xff0c;成为业界瞩目的焦点。启明智显作为物联网彩屏显示领域的佼佼者携产品亮相展会&#xff0c;为参展者带来了RTOS、LINUX全系列方案及A…

【见刊通知】MVIPIT 2023机器视觉、图像处理与影像技术国际会议

MVIPIT 2023&#xff1a;https://ieeexplore.ieee.org/xpl/conhome/10578343/proceeding 入库Ei数据库需等20-50天左右 第二届会议征稿启动&#xff08;MVIPIT 2024&#xff09; The 2nd International Conference on Machine Vision, Image Processing & Imaging Techn…

java —— tomcat 部署项目

一、通过 war 包部署 1、将项目导出为 war 包&#xff1b; 2、将 war 包放置在 tomcat 目录下的 webapps 文件夹下&#xff0c;该 war 包稍时便自动解析为项目文件夹&#xff1b; 3、启动 tomcat 的 /bin 目录下的 startup.bat 文件&#xff0c;此时即可从浏览器访问项目首页…

3.Python学习:模块\包\yaml

1.模块与包–互相引用 &#xff08;1&#xff09;一个模块就是一个.py文件 &#xff08;2&#xff09;有模块的目录–文件夹 &#xff08;3&#xff09;包&#xff1a;文件夹包含__init__.py文件 &#xff08;4&#xff09;导入包时&#xff0c;init.py文件里的内容会执行一次 …

聚鼎装饰画:装饰画喊个与现在是什么情况

回眸历史长河&#xff0c;装饰画以其独特的魅力一直为人类生活环境添彩增趣。从古埃及的壁画到文艺复兴时期的油画&#xff0c;再到现代简约的线条画&#xff0c;装饰画如同时代的缩影&#xff0c;映射出不同历史阶段的文化特征与审美趣味。 在现代社会&#xff0c;装饰画的现状…