1.Spring Cloud构建微服务架构(一)服务注册与发现

深入理解Spring Cloud中的服务发现与注册 传统的单体应用程序可能使用硬编码的方式调用其他服务,但在微服务环境中,服务的地址和实例可能动态变化,因此需要一种机制来动态地管理和发现服务。在上述示例中,我们展示了一个简单的RestController,通过Spring Cloud的DiscoveryClient来获取所有注册的服务列表和特定服务的所有实例列表。上面的示例展示了如何使用RestTemplate结合@LoadBalanced注解来实现基于Ribbon的负载均衡客户端,调用注册在Eureka Server上的服务。 阅读详情

文中所有项目均使用:

IDEA编辑器基于java8进行构建Maven进行依赖管理Git进行版本管理

Spring Cloud版本:Hoxton.BUILD-SNAPSHOT

Spring Boot 版本:2.2.1.BUILD-SNAPSHOT

服务治理

服务治理是微服务架构中最为核心和基础的模块。它主要用来实现发现各个微服务实例的自动注册与发现。一个服务治理组件应该具有以下功能:

服务注册表:

服务治理组件的核心内容,用于记录微服务的各个信息(服务名称、ip、端口等)。并对外提供查询API和管理API,查询API用于查询可用的微服务实例,管理API用于注册和注销微服务实例。

服务注册发现:

服务注册是指微服务在启动时,将自己的信息注册到服务治理组件上的过程。

服务发现是指查询可用微服务列表及其网络地址的机制

服务检查:

服务治理组件使用一定的检查机制检测注册的微服务是否正常运行,若无法访问,就会从注册表移除该实例。

Eureka实践

什么是Eureka?

在开头的解释中提到,Eureka是发现、找到的意思,Eureka组件是NetFlix开源的服务发现组件,本身基于REST的服务。它包含Server和Client两部分。Spring Cloud将它集成在子项目Spring Cloud NetFlix中,从而实现微服务的注册和发现。

Eureka架构

从上图可以看出eureka分为三部分:

Server Provider: 微服务的提供者,可以是一个spring boot程序或者符合Eureka的通信机制的其他服务提供者

Server Consumer:微服务的消费者,从服务注册中心获取服务列表,从而发现要从何处调用要使用的服务

Eureka Server:服务注册中心和服务发现中心

 

从上图来看,可以这样简单理解:

服务消费者从服务注册中心获取到注册在线的服务列表,在获得服务信息之后通过调用服务提供者提供的服务进行业务处理,服务提供者在开启服务之后,会在服务注册中心注册(续约或者下线)自己提供的服务。服务注册中心来维护注册的服务状态,比如发送心跳检测验证健康状态,判断是否在线(宕机),同时记录服务的相关信息以供消费者进行查询。

创建一个Eureka服务端(注册发现中心)

创建一个eureka服务端非常简单,只需简单的几步即可完成

0.准备工作

作者将eureka作为springcloud项目的一个模块来进行创建,所以先建一个名为springcloud的空的spring boot项目。然后创建一个名为eurekaserver的module。

1.在pom文件中加入依赖

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

注意:请注意版本,不同版本写法可能不同

2.添加配置文件配置

eureka: 
    instance: 
        hostname: 127.0.0.1 # 实例的主机名称 
        client: 
            register-with-eureka: false  # 不要向注册中心注册自己(服务注册发现中心自己本身也是一个服务) 
            service-url: 
                defaultZone:  http://${eureka.instance.hostname}:${server.port}/eureka/ # 指定服务注册中心地址 本服务本身即使注册中心服务,所以指向自身
spring: 
    application: 
        name: eureka-service #服务名称
        server: 
            port: 38761 # 服务的端口(默认8761)

3.启动类添加@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
@Slf4j
public class EurekaserverApplication { 
    public static void main(String[] args) { 
        SpringApplication.run(EurekaserverApplication.class, args);
        log.info("EurekaserverApplication启动");
    }
}

启动类一共使用了3个注解

@SpringBootApplication: Spring Boot 入口类的启动注解

@EnableEurekaServer: 表示这个应用是一个Eureka的服务注册发现的一个应用,即该应用即为服务注册发现中心

@Slf4j: lombok 日志注解

在应用启动之后可以在控制台看到在程序中打印的日志

4.在应用启动成功之后,访问127.0.0.1:38761

 

至此,一个单机版的Eureka服务端就创建好了,基本就几行代码就完成了。但我们发现目前没有应用实例注册到我们刚创建的Eureka服务上。所以接下来,在创建一个客户端来演示应用服务如何注册到我们创建的Eureka服务端。

创建一个应用服务(Eureka 客户端)

同理在上面的项目上在创建一个名称为config(后续的配置文件中心服务)的module,作为Eureka的客户端(也就是服务提供者)注册到刚刚创建的Eureka服务端上。

1.pom文件引入依赖

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

2.配置文件添加配置

server: 
    port: 38762 #服务端口
spring: 
    application: 
        name: config-server #服务名称
    eureka: 
        client: 
            service-url: 
                defaultZone: http://localhost:38761/eureka/ #eureka服务端的地址

3.配置启动类

@SpringBootApplication
@EnableDiscoveryClient
@Slf4j
public class ConfigserverApplication { 
    public static void main(String[] args) {
        SpringApplication.run(ConfigserverApplication.class, args);
        log.info("ConfigserverApplication启动");
    }
}

待控制台打印信息出

 再去访问127.0.0.1:38761可以看到

 可以看到名为CONFIG-SERVER(对应配置文件中的server.name)已经注册到了Eureka服务上了

Eureka的自我保护模式

在开发阶段,可以经常在页面上看到

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,这就可能变得非常危险了,因为微服务本身是健康的,此时本不应该注销这个微服务。

Eureka Server通过“自我保护模式”来解决这个问题,当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。

 

手写RPC框架之服务注册与发现 从dubbo的服务架构可以看出, Registry主要提供服务的注册与发现功能:即服务的提供方将服务注册在Registry中,而服务的消费方可以从注册的服务里获取提供方的ip地址等信息,从而进行远程过程调用。 服务注册中心选型 Zookeeper 服务存储分层 Zookeeper数据存储方式类似于树的组织方式,一个节点下可以有多个子节点。 参考上面dubbo中zookeeper的分层方式,在该rpc框架中简化分为root、service和address三层,如下。root层主要就是标识框架的名字,无实. 阅读详情

相关推荐

用zookeeper实现分布式框架的服务注册与发现功能

本篇文章主要讲述怎么通过zookeeper作为注册中心实现分布式系统中服务注册与发现的具体实现(具体的细节可能因不同的框架而不同,但原理其实都是一样的)本文章设计的主要思路:利用zookeeper临时顺序节点的性质,为每个应用服务在zookeeper上创建临时顺序的节点就(这个节点成为服务节点),而实现注册功能;服务消费者去相应服务节点下取出服务节点的信息,从而实现服务发现功能。具体实现如下:zo...

qq_40197576的博客 4167

微服务之SpringCloud服务注册与发现

在分布式微服务架构中,一个应用可能由一组职责单一化的服务组成。这时候就需要一个注册服务的机制,注册某个服务或者某个节点是可用的,还需要一个发现服务的机制来找到哪些服务或者哪些节点还在提供服务。在实际应用中,通常还都需要一个配置文件告诉我们一些配置信息,比如数据连接的地址,redis 的地址等等。但很多时候,我们想要动态地在不修改代码的情况下得到这些信息,并且能很好地管理它们。 有了这些需求,于是发展出了一系列的开源框架,比如 ZooKeeper, Consul 等等。

Young_深情不及里子的博客 3890

如何写一个RPC框架(三):服务注册与服务发现

在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第三篇文章, 主要讲述了服务注册和服务发现这一块。 在系列的第一篇文章中提到,我们的RPC框架需要有一个服务注册中心。 通过这个中心,服务可以把自己的信息注册进来,也可以获取到别的服务的信息(例如ip、端口、版本信息等)。这一块有个统一的名称,叫服务发现。对于服务发现,现在有很多可供选择的工具,例如zookeeper, et

沈鸿斌的博客 3738

SpringCloud之服务发现

主要的可配置项配置项说明Level:日志级别有4中级别:NONE(不输出远程调用日志) BASIC(只输出请求URL和响应状态码及请求 时间) HEADERS(将BASIC信息和请求头信息输出), FULL(输出完成的请求)Decoder:响应结果解析器默认使用SpringDecoder解码器,会调用Spring MVC 中的消息转换器HttpMessageConverter进行解码。Encoder:请求参数编码器。

weixin_43054590的博客 1102

简单RPC框架-基于Consul的服务注册与发现

一般我们常见的RPC框架都包含如下三个部分: 注册中心,用于服务端注册远程服务以及客户端发现服务服务端,对外提供后台服务,将自己的服务信息注册到注册中心客户端,从注册中心获取远程服务的注册信息,然后进行远程过程调用 上面提到的注册中心其实属于服务治理,即使没有注册中心,RPC的功能也是完整的。之前我大多接触的是基于zookeeper的注册中心,这里基于consul来实现注册中心的基

p77ll9l53x的博客 4140

RPC框架的服务注册与发现机制

1. 背景介绍 1.1 分布式系统的挑战 随着互联网技术的快速发展,分布式系统已经成为了现代软件架构的主流。在分布式系统中,服务之间的通信和协作变得尤为重要。为了实现高效、可靠的服务间通信,远程过程调用(Remote Procedure Call,简称RPC)技术应运而生。然而,随着系统规模的不断扩

AI天才研究院 372

gradle 指定springcloud 版本_SpringCloud微服务架构开发实战:实现服务注册与发现

实现服务的注册与发现在前面分别用Eureka Server和Eureka Client来搭建了一台注册服务器,以及多个Eureka Client客户端。Eureka Client在启动后,就会将自己注册到EurekaServer中,这样,Eureka Server就能及时感知到注册上来的Eureka Client,以便其他服务通过应用的名称来调用这些服务。在理解了这些原理之后,我们就能非常简单地通...

weixin_39954569的博客 300

Java Spring 框架的服务发现与注册技术选型与实践

随着微服务架构的普及,服务发现与注册成为分布式系统的基础设施之一。本文旨在为Java开发者提供Spring框架下服务发现与注册的全面指南,涵盖技术选型、原理分析、实践案例和性能优化等方面。本文首先介绍服务发现的基本概念,然后深入分析Spring Cloud支持的主流服务发现组件,接着通过实际案例展示具体实现,最后讨论选型建议和未来趋势。服务注册(Service Registration): 服务实例启动时向服务注册中心注册自己的网络位置信息服务发现(Service Discovery)

AI开发架构师 771

「SpringCloud」01 Eureka服务注册与发现

SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理。在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。Eureka采用了CS的设计架构,EurekaServer作为服务注册功能的服务器,它是服务注册中心,而系统中的其他微服务,使用Eureka的客户端连接到EurekaServer并维持心跳连接。.....................

How many ten years in the life time? 270

保姆级教程:在Ubuntu 22.04上用VLLM+OpenWebUI部署DeepSeek-R1-14B(含Q8量化模型下载)

本文提供在Ubuntu 22.04上使用VLLM和OpenWebUI部署DeepSeek-R1-14B大语言模型的完整教程,包括环境配置、模型下载、VLLM参数调优及OpenWebUI集成。特别针对Q8量化模型优化部署流程,解决CUDA版本冲突等常见问题,适合开发者快速搭建本地AI对话系统。

weixin_26712075的博客 430

SUMO从入门到精通:手把手教你用开源工具完成智能网联车仿真(附Python接口教程)

本文提供了一份SUMO开源交通仿真工具的完整实战指南,从环境搭建、基础仿真到Python接口TraCI的深度应用。重点讲解了如何利用SUMO的高度可定制性进行智能网联车仿真,包括实现动态信号优先等核心算法,并介绍了与网络仿真器集成以构建高保真车联网通信环境的方法。

weixin_28327051的博客 537

分布式服务框架的服务注册与发现机制

1.背景介绍 分布式服务框架的服务注册与发现机制是分布式系统中的一个核心功能,它可以帮助系统中的不同服务之间进行通信和协同工作。在这篇文章中,我们将深入探讨这个机制的背景、核心概念、算法原理、最佳实践、应用场景、工具和资源推荐以及未来发展趋势。 1. 背景介绍 分布式服务框架的服务注册与发现机制起源于微服务架构的出现。微服务架构将应用程序拆分成多个小型服务,每个服务都可以独立部署和扩展。在这...

AI天才研究院 1395

Flowable任务节点动态预测:基于任务ID与参数获取下一节点及候选分配策略

本文深入探讨了Flowable工作流引擎中任务节点动态预测功能的实现。通过解析任务ID与运行时参数,模拟流程执行路径,精准预测下一节点及候选用户/组集合,从而提升用户体验与系统透明度。核心在于利用自定义命令实现表达式求值,并深度解析候选者分配策略,确保预测结果与实际流程执行一致。

nnn11的博客 737

Gone 框架的服务注册与发现:打造高效微服务架构

本文深入探讨Gone框架中服务注册与发现的实现机制,介绍其在微服务架构中解决动态通信、负载均衡和高可用等核心问题的方式。文章详细阐述了Gone如何优雅集成Nacos、Consul和Etcd等服务治理组件,提供了实战示例和原理解析,并说明了自定义组件的开发方法,为Go开发者提供完整的微服务治理解决方案。

大鹏的技术博客 736

ADC INL&DNL测试方法和实例

本文介绍了一种可操作的ADC INL和DNL的测试方法--直方图法(也称码密度法)。并实际使用该方法测试了两款芯片的ADC INL和DNL

APTCHIP的博客 1万+

Python 爬虫实战:豆瓣 / IMDB 电影数据抓取(评分 + 剧情 + 演员阵容结构化处理)

在数据为王的时代,电影数据是进行市场分析、推荐系统构建和学术研究的重要资源。豆瓣和 IMDB 作为国内外最具影响力的电影评分和资讯网站,包含了海量高质量的电影数据。本文将带领你从零开始,构建一个健壮的 Python 爬虫,用于抓取豆瓣和 IMDB 的电影信息,并将其中的非结构化数据(如剧情简介、演员列表)进行清洗和结构化处理,最终存储到便于分析的结构化文件(如 CSV)中。

yansideyucsdn的博客 954

服务发现:RPC框架中的服务发现与注册机制

1.背景介绍 在分布式系统中,服务之间需要相互通信以实现各种功能。为了实现高效、可靠的服务通信,需要一种机制来发现和注册服务。这就是所谓的服务发现与注册机制。 服务发现与注册机制在分布式系统中起着至关重要的作用。它可以帮助系统自动发现可用的服务,并在服务失效时自动重新发现新的服务。这种机制可以提高系统的可用性、可扩展性和可靠性。 在远程过程调用(RPC)框架中,服务发现与注册机制是非常重要的...

AI天才研究院 377

机器视觉框架源码——解读5(Dock和开源UI)

本文介绍了工业软件中Dock工具面板的使用方法,主要包括三个部分:添加avalonDock引用、修改属性配置(如显示样式和背景色),以及通过MVVM命令实现布局的加载和保存。加载布局通过XmlLayoutSerializer从XML文件恢复界面状态,保存布局则将当前DockManager的布局序列化为XML文件。文章提供了代码示例和截图说明,帮助开发者快速掌握Dock面板的核心功能。

Z's Palace 401

GoFrame框架集成Nacos服务注册与发现指南

Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。在微服务架构中,服务注册与发现是核心组件之一,它允许服务实例在启动时注册自己,并在需要时发现其他服务实例。 ## GoFrame集成Nacos的优势 GoFrame作为一款模块化、高性能的Go应用开发框架,通过`contrib/registry/nacos`组件提供了与Nacos的无缝集成能力。这种集成带...

gitblog_00187的博客 470

华为od机试|华为od机试真题2025|华为od题库|华为od机考|2025C卷B卷

华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|B卷C卷

u014481728的博客 10万+

python实现纵横向拉开档次法 (附完整源码)

python实现纵横向拉开档次法 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 778

Eureka——服务注册与发现框架

Eureka是开发的服务发现框架,Spring Cloud将Eureka集成到子项目Spring-Cloud-Netflix中实现服务注册与发现功能。本文关于Eureka的学习及eureka高可用搭建。

weixin_53333436的博客 527

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

终极指南:5分钟掌握Micro框架服务注册与自动发现

Micro是一个轻量级的异步HTTP微服务框架,专为构建高效、可扩展的微服务架构设计。本文将带你快速掌握Micro框架中服务注册与自动发现的核心概念和操作方法,让你在5分钟内从零开始构建具备服务治理能力的微服务应用。 ## 什么是服务注册与自动发现? 服务注册与自动发现是微服务架构中的关键组件,它们解决了分布式系统中服务位置动态变化的问题。服务注册允许服务在启动时将自己的网络位置信息注册到注册

gitblog_01175的博客 371

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RPC分布式服务框架的服务注册与发现

1. 背景介绍 随着互联网的快速发展,分布式系统已经成为了现代软件开发的重要组成部分。在分布式系统中,服务的注册与发现是一个非常重要的问题。RPC(Remote Procedure Call)分布式服务框架是一种常见的分布式系统架构,它可以帮助我们解决服务注册与发现的问题。 RPC分布式服务框架是一种基于远程过程调用的分布式系统架构,它可以让不同的进程或者不同的机器之间进行通信。在RPC分布式...

AI天才研究院 1088

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring Cloud 微服务框架之服务注册与发现

Spring Cloud 微服务框架之服务注册与发现

花季岁月 526

分布式服务框架中的服务注册与发现机制

1.背景介绍 1. 背景介绍 分布式系统是现代互联网应用中不可或缺的一部分,它允许多个计算节点在网络中协同工作。在分布式系统中,服务是独立运行的应用程序实例,它们可以在网络中发现和通信。为了实现高效的服务发现和调用,分布式服务框架需要提供一种机制来注册和发现服务。 在分布式服务框架中,服务注册与发现机制是一种基于协议的机制,它允许服务提供者在运行时向服务注册中心注册自身的信息,而服务消费者则...

AI天才研究院 930
上一篇: 3.Spring Cloud构建微服务架构(三)分布式配置中心(动态刷新)
下一篇: 2.Spring Cloud构建微服务架构(二)分布式配置中心
工程师小哥
博客等级 码龄10年 4粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值