springcloud微服务二:Eureka服务治理之服务注册中心

本文涉及的产品
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

当初步的学习了spring boot,了解了spring boot的基本实现过程后,我就正式开始学习spring cloud,首先就从Eureka服务治理开始。

服务治理包含三个核心的角色:服务注册中心、服务提供者和服务消费者,他们相对独立,新的服务要向服务注册中心注册,新的消费者会向服务注册中心索引服务列表。

一番了解之后,让我想到了人才招聘。在我看来,现在普遍存在的招聘形式也是分为了三个部分:招聘网站或者人才市场、发布招聘需求的企业、需要找工作的人。当然了,也可以把企业和人换一下位置,那就是:招聘网站或者人才市场、找工作的人发布的简历、需要招聘的企业。

那么这里的招聘网站或者人才市场就如同Eureka服务治理中的服务注册中心,不管是企业的招聘需求还是人的简历,都可以看做一种需求的同时看成一种服务。当有了一个这种新的服务或者需求后会发布在网站上或者人才市场,实际上就相当于Eureka服务治理中,新的服务通知注册到服务注册中心。而我们企业查找相关简历,或者找工作的人查找相关的招聘需求,就是客户端向注册中心索引服务。

在这个过程中,招聘网站、企业和找工作的人是各自独立的,由招聘网站把企业和人联系起来,前提就是企业和人知道网站的地址,这就如同在Eureka服务治理的服务提供者和服务消费者的application.properties文件中配置eureka.client.serviceUrl.defaultZone来指定服务注册中心。

有了一点简单的理解之后,就是实际的项目构建,首先需要构建一个基础的spring boot项目作为服务注册中心,勾选web选项,这样会创建一个上一篇结构的项目。然后在pom.xml文件中加入Eureka的以来配置:

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

以及如下的dependencyManagement,指定spring cloud的版本:

<dependencyManagement>
        <dependencies>
            <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>Brixton.RELEASE</version>
               <type>pom</type>
               <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

这里需要注意的是,spring cloud的版本号是以英国伦敦地铁站的名字命名的,按首字母A-Z的顺序排,不同的spring cloud版本相对应的spring boot的版本是有限制的,否则无法使用。
具体的对应需要参考官网说明,目前比较新的spring boot版本是1.5.2,而对应的spring cloud的版本是Dalston,我这里例子中用的是1.3.8的spring boot,因此spring cloud版本是Brixton。

配置好依赖之后,下一步就是在创建项目时自动生成的那个类中加入@EnableEurekaServer注解,来启动一个服务注册中心,如下:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServer1Application {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServer1Application.class, args);
    }
}

然后便是在基本的配置文件application.properties中进行一些必要的配置:

#应用名,服务名,如果不指定就是unkown
spring.application.name=eureka-server
#服务端口,实际上就是tomcat端口,浏览器访问或者其他地方调用时需要用的端口
server.port=1000
#实例的主机名
eureka.instance.hostname=server1
#设置是否向注册中心注册,默认是true
eureka.client.register-with-eureka=false
#是否需要去检索寻找服务,默认是true
eureka.client.fetch-registry=false
#指定注册中心
eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/

就这样,一个简单的Eureka服务注册中心就完成了,除了引入依赖包的配置、properties的基本配置外,就是在代码中加了一个@EnableEurekaServer,非常的简单。
然后浏览其访问localhost:1000或者server1:1000(这里使用主机名需要配置ip和主机的映射)就可以看到如下界面:
1

如果有新的服务注册到服务注册中心,那么在上图中红框标注的地方就会有所显示,就比如如果我修改application.properties文件,去掉这一段配置:

#设置是否向注册中心注册,默认是true
eureka.client.register-with-eureka=false
#是否需要去检索寻找服务,默认是true
eureka.client.fetch-registry=false

那么该服务注册中心就会把自己也当做一个服务注册到这个注册中心中,那么就会如下图所示:
2

上边所实现的是单机版的服务注册中心,而微服务架构的九大特征之一就是高可用性,也就是需要注册中心从单机模式变为集群模式,使其中某个注册中心出现故障的情况下不影响整个业务系统的运行。
在spring cloud中,这个实现过程就十分的简单,简单到我们只需要在上述的过程中仅仅做一个很小的配置修改就可以了。
一是去掉eureka.client.register-with-eureka=false和eureka.client.fetch-registry=false的配置,使得注册中心可以自己把自己注册为服务,二是在指定注册中心的时候指定所有的注册中心,三是修改端口和主机实例名,修改后的配置如下:

spring.application.name=eureka-server
server.port=1000
eureka.instance.hostname=server1
eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/,http://server2:2000/eureka/

同样的,我们需要在另一个注册中心中把配置文件改为类似下边的样子:

spring.application.name=eureka-server
server.port=2000
eureka.instance.hostname=server2
eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/,http://server2:2000/eureka/

然后我们启动其中一个注册中心后再访问各自的页面,会看到如下所示:
3

这时候会看到我们的服务注册中心已经成为了集群模式,但是server2是unavailable的,并不可用,而当我们把另一个注册中心server2启动后,就会看到有些内容有了变化,server2也是可用的了,同样的,如果访问server2的页面,会看到这里列出server1的状态。
4

正常情况来说,两个注册中心是应该在不同的服务器中运行的,这样才能更好的实现高可用,所以就是两套代码。
但是在学习的过程中由于环境的限制,也为了方便,实际上就可以用一套代码,然后弄两个分别代表server1和server2的配置文件就可以了,文件命名需要遵循spring boot的约定规则,然后再application.properties文件中使用spring.profiles.active属性来指定运行的时候需要具体启用的篇配置就可以了,如图:
5

目录
相关文章
|
3月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
184 17
|
2月前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
108 0
|
3月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
155 7
|
3月前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
199 1
|
2月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
563 1
|
1月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
7月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
8月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
227 1
|
4月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
3月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
314 4