详解Eureka服务注册和调用

news2024/11/30 14:43:34

目录

1.概述

2.环境

2.1.项目结构

2.2.项目架构

2.3.依赖

3.注册中心

3.1.配置使用

3.2.管理页

3.3.集群

4.服务注册

5.服务调用

5.2.Ribbon

5.3.Feign

5.4.OpenFeign


1.概述

我们把从外部进入到微服务集群里的流量称为“南北流量”、微服务集群节点间流转的流量称为“东西流量”。就“南北流量”而言微服务架构其实仍然是一个中心化的架构,这个中心是“目录”,因为需要一个“目录”来记录服务的相关信息(诸如部署在哪台服务器上),“南北流量”才能找得到服务。这个"目录"在微服务体系中被称为“注册中心”。注册中心是微服务体系中最重要的一个组件,在Netflix版本的spring cloud中,注册中心组件是——eureka。

服务提供者向注册中心(Eureka Server)中注册数据,消费者在注册中心(Eureka Server)中获取数据。系统中的微服务使用Eureka客户端链接到Eureka Server中,并且维持心跳(即固定时间向server发送信号,证明自己存活。)

3f010a2d57bc44c3929635624023fddf.png

以上整个流程中,有两个组件的参与:

  • 注册中心
  • 远程服务调用组件

在Netflix版的spring cloud中注册中心一直都是eureka,但是远程服务调用组件有好几个可选:

  • Ribbon
  • Feign
  • OpenFeign。

它们之间从上到下都是逐渐优化、取代的关系。

本文会首先讲使用eureka进行服务注册,然后顺序的讲以上几种远程服务调用组件的使用和其相较于前一个的优化点在哪里。

2.环境

2.1.项目结构

f77f7640556d4341a8bf7ff4a6d71a52.png

整个示例项目用标准的maven结构,分为三个子module:

  • eureka,注册中心
  • userService,服务提供者
  • consumer,服务调用者

整个项目的依赖的版本管理在最顶层的父级pom.xml中进行。

2.2.项目架构

整个示例项目之所以分为三部分是希望在服务调用者和服务之间使用通信组件来展示如何结合注册中心来进行服务间的通信:

57985a07acbd488c81204921c264f5e2.png

2.3.依赖

spring官网,进入spring cloud的项目,项目首页详细记录着Netflix版本的spring cloud和spring boot之间的版本对应关系:

327dc33e149b496dac0d19b5749d8fa4.png

本项目我们选取spring boot 2.6.Xspring cloud Netflix aka jubilee。

在最顶级的父pom中引入依赖:

 <properties>
        <spring-cloud.version>2021.0.7</spring-cloud.version>
        <spring-boot.version>2.6.10</spring-boot.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3.注册中心

3.1.配置使用

依赖:

0f066b4c876c42cc86f33b98bdd9643f.png

配置:

a9ae69d42d474828bd096b37daed03dd.png

启动:

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

3.2.管理页

通过IP+端口号的方式可以访问到eureka server的管理页:

整个管理页里面最重要的一部分是框起来的这部分,这部分显示的是注册在当前eureka server上的服务有哪些,目前还没有服务注册,所以没有显示任何东西。

0b584b7bd7dc4a628d6ea7730380b845.png

3.3.集群

eureka支持集群模式用于相互冗余容灾。eureka集群的配置很简单,没必要单独写了例子,以下是博主之前做的eureka的集群配置文件,看后会一目了然。

在每个eureka上关联其它eureka:

362efe9726a545588320a18d472450ba.png

 服务注册到所有eureka上:

32370aef2e5f469ebba21f6711dcdbf0.png

4.服务注册

注册中心已经准备好了,接下来我们要准备一个服务,将它注册到配置中心上。
依赖:

219da76711e8446185e49a32d368dfd5.png

配置:

0ecd5d6e60224e5b95b318561dbf453b.png

启动:

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

启动服务后,可以在eureka server上查看服务是否已经注册: 

6bb460a189634e888562a16acfda092f.png

5.服务调用

准备好注册中心、注册好服务后,接下来就是如何调用服务的问题了。也就是如何用以下几种组件来调用服务:

  • Ribbon
  • Feign
  • OpenFeign

5.2.Ribbon

ribbon只是一个负载均衡组件,需要依赖于其它HTTP通信组件来实现通信,一般用ribbon+spring boot自带的RestTemplate。

依赖:

eureka的以来里集成了ribbon,所以要使用ribbon来调服务的时候,直接引入eureka的依赖即可。

59975dff3e7e414098e545cd5d33a227.png

配置:

@LoadBalanced用来将RestTemplate托管给ribbon来管理。

2d3da4cd755f4dbc989e803402a1bb63.png

a3b3510bbc5d45df9acd2c4743fbaa03.png

服务调用:

ef71b7117e0249dda00285ed6dd08c52.png 结果:

f5cd5143680f43ec9216d7ee2f0e9e48.png

5.3.Feign

ribbon+restTemplate可以完成服务的调用以及负载均衡,但是存在一个很明显的地方就是服务名直接写死,不便于维护。srping体系中主体思想是依赖倒置,也就是面向接口编程,所以社区推出了Feign,其封装了ribbon和http请求工具,使得其除了能完成负载均衡和http请求以外,可以面向接口编程来完成服务调用。

依赖:

78a7b4f555464513b483707bca7b10d7.png

服务层:

7752a45e57484571a6178a5e3128924e.png 服务调用:

a794982e4c4e41669e065a9f6529873b.png 开启Feign:

e497bf6d566748a1901bbd155344a089.png

结果:

f5326f1139a6460ba07ef9b0ac4fb5cd.png

5.4.OpenFeign

feign面向接口的、声明式的服务调用组件,其封装了ribbon,目的是简化服务调用代码,使得服务调用具有rest风格。Openfeigin是feigin的升级版,增强了对springMVC注解的支持。

以上是博主写过的一个OpenFeign的示例。

依赖:

5bf7e8479d7b4da18a9f1220d13e9f56.png

 启动:

7a532e9362704fcd8c02bf8ced57b82d.png

服务层:

96dc16d710be49c79ee0f9f50edf9829.png

服务调用:

84655da40d274dc9a5bffa1f765e1640.png

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

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

相关文章

HTML type=“radio“ 不显示按钮

问题 HTML中type&#xff1d;"radio" 但是在界面中不显示按钮。 详细问题 HTML中type&#xff1d;"radio" 但是在界面中不显示按钮。 笔者html核心代码 <div>性别<input type"radio" id"male" name"gender" va…

chatgpt赋能python:Python中的中文分词神器——jieba

Python中的中文分词神器——jieba 介绍 如果你曾经在处理中文文本时&#xff0c;也许会遇到中文分词的需求&#xff0c;jieba就是一款不可错过的工具。 jieba 是目前最好的 Python 中文分词库&#xff0c;它具有高效、简单和可定制等优点&#xff0c;适合各种规模的文本分词…

Linux学习之vim四种模式初探

vim是一个多模式&#xff0c;有vim /所在目录/文件名&#xff0c;若是已经有了文件&#xff0c;可以打开文件进行编辑&#xff0c;若是没有文件&#xff0c;在vim中保存之后就会有一个文件&#xff0c;相当于记事本里边新建一个文件。我现在就使用vim新建一个文件&#xff0c;然…

C# .NET EF框架 webapi 安装使用sqlite

文章目录 Sqlite安装使用Sqlite特点环境安装EF 是什么&#xff1f;EF使用举例 Nuget控制台 Sqlite安装使用 Sqlite特点 Sqlite是轻量级数据库&#xff0c;不需要安装&#xff0c;跨平台使用。是用来做小软件&#xff0c;小项目&#xff0c;快速移植的最优解。不需要像mysql和…

Verilog基础:表达式中的整数常量(integer)

相关文章 Verilog基础&#xff1a;表达式位宽的确定&#xff08;位宽拓展&#xff09; Verilog基础&#xff1a;表达式符号的确定 Verilog基础&#xff1a;数据类型 Verilog基础&#xff1a;位宽拓展和有符号数运算的联系 Verilog基础&#xff1a;case、casex、ca…

chatgpt赋能python:Python如何Input一个字典:详细教程

Python 如何 Input 一个字典&#xff1a;详细教程 在 Python 中&#xff0c;字典是一种非常有用的数据结构。它可以存储键值对&#xff0c;让我们能够通过键访问值。Python 中没有固定的语法来创建字典&#xff0c;因此本文将教你如何输入一个字典。 什么是字典&#xff1f; …

chatgpt赋能python:Python语言中的Pandas库介绍

Python语言中的Pandas库介绍 Python语言是一种十分流行的编程语言&#xff0c;以其易读易写等特点而受到工程师和数据科学家的青睐。在Python语言中&#xff0c;有一款非常流行的数据处理和分析库&#xff0c;也就是Pandas库。Pandas库在数据处理和分析方面有着出色的表现&…

iOS开发最佳实践|集成声网SDK实现语音聊天室

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c; 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。&#x1f60a; 座右铭&#xff1a;不想当开发的测试&#xff0c;不是一个好…

初探Sharding-JDBC订单表分片实现

设计订单系统有两个数据库db_order_01和db_order_02。每个数据库分别有t_order_0和t_order_1两张订单表。 订单表设计有订单ID(order_id)&#xff0c;用户ID(user_id)&#xff0c;商户ID(merchant_id)。假设商户查看订单操作要比用户查看订单的操作更加频繁。避免商户查询订单时…

NLP学习笔记五-simple RNN

NLP学习笔记五-simple RNN 我这个学习笔记&#xff0c;感兴趣的小伙伴&#xff0c;看的时候尽量从头开始看&#xff0c;这样更好理解&#xff0c;也更有收获。 simple RNN的单元结构图如下&#xff1a; 其中A就是我们需要学习的参数矩阵&#xff0c; h t − 1 h_{t-1} ht−1​…

【MySQL数据库 | 第十五篇】事务

目录 前言&#xff1a; 介绍事务&#xff1a; 控制事务&#xff1a; 事务四大特性&#xff1a; 并发事务问题&#xff1a; 事务隔离级别&#xff1a; 总结: 前言&#xff1a; 这章我们将进入到MySQL基础篇的最后一章&#xff1a;事务&#xff0c;希望大家可以坚持下去&#xf…

车间如何做好“生产计划”,打造高效运营的智能工厂

新形势下&#xff0c;面对外部不断变化的市场需求、供应链下游企业管理升级需求以及持续上涨的人力成本&#xff0c;传统工厂模式必须要变革才能更好地发展。热潮之下&#xff0c;企业纷纷规划建设智能工厂。那么&#xff0c;新工厂规划如何避免投入浪费&#xff0c;少走弯路&a…

Linux——进程间通信,信号量的使用+小demo(C语言)

一.什么是信号量呢&#xff1f;用途又是什么呢&#xff1f; 信号量就是解决进程之间竞争资源的情况&#xff0c;比如&#xff1a;我们在宿舍用的公共洗衣机&#xff0c;我们只有当它空闲的时候&#xff0c;我们才可以去使用它&#xff0c;当别人看到洗衣机在使用的时候&#xf…

LVS负载均衡群集部署(DR模式)

一.DR模式 LVS负载均衡群集部署 ipvsadm 工具选项说明&#xff1a; 工具选项作用-A添加虚拟服务器-D删除整个虚拟服务器-s指定负载调度算法&#xff08;轮询&#xff1a;rr、加权轮询&#xff1a;wrr、最少连接&#xff1a;lc、加权最少连接&#xff1a;wlc&#xff09;-a表示…

clickhouse-MergeTree

创建建表语句 create table t_order_mt(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id); 插入测试数据 insert into t_order_mt(id,sku_id,total_…

chatgpt赋能python:Python数据分析必备工具:Pandas

Python数据分析必备工具&#xff1a;Pandas Python作为一门流行的编程语言&#xff0c;广泛应用于数据科学领域。而Pandas作为Python语言下的数据分析库&#xff0c;被广泛地应用于数据处理、数据分析、数据可视化等方面。本文将介绍如何快速地入门Pandas并进行数据分析。 什…

《统计学习方法》——逻辑斯谛回归与最大熵模型(下)

最大熵模型 极大似然估计 下面证明对偶函数的极大化等价于最大熵模型的极大似然估计。 极大似然估计的思想就是通过概率最大化来求出最符合的分类。对应的步骤为&#xff1a; 根据训练集&#xff0c;写出不同分类下的概率函数将不同分类下的概率函数进行汇总&#xff0c;写…

[hsctf 2023] crypto,pwn,rev部分

刚完了天津又来个衡水,这个大部分题比较简单,最后两天整了3个crypto有点意思. crypto double-trouble 给了密文 Hvwg gvcizr bch ps hcc vofr. Wb toqh, W kwzz uwjs wh hc mci fwuvh bck! Hvs tzou wg hvs tczzckwbu: OmqemdOubtqdeMdqOaax Vcksjsf, wh wg sbqcrsr gc mci …

刷脸登录(人工智能)

刷脸登录 理解刷脸登录的需求 理解刷脸登录的开发流程实现刷脸登录功能 浅谈人工智能 人工智能的概述 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门…

chatgpt赋能python:Python怎么下pip:简单又方便的工具

Python怎么下pip&#xff1a;简单又方便的工具 Python 是一门广泛应用的高级编程语言&#xff0c;它设计的初衷是让程序员更加愉悦地编写代码&#xff0c;同时提供了多种强大的库和框架。其中&#xff0c;pip 是最为常见的第三方包管理工具&#xff0c;本文将为你介绍如何下载…