Eureka服务注册与发现

简介: 本章介绍Eureka注册中心的搭建与使用,完成user-service和order-service服务注册,并实现多实例部署。虽Eureka已被SpringCloud逐步淘汰,但其核心思想仍具参考价值,后续将用Nacos替代深入探讨。

因前面提到Netflix相关组件已逐步被SpringCloud剔除,Eureka作为其中的注册中心,在此关注功能性即可,本章节不深入阐述其底层原理。后续章节替换为Nacos后,针对Nacos再做细节讨论。
1.Eureka工程搭建启动
● 新建module,名称:eureka-server
● 引入pom依赖,如maven未刷新需手动刷新拉取



org.springframework.cloud
spring-cloud-starter-netflix-eureka-server


● 新建启动类:EurekaApplication
package cn.itcast.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**

  • Eureka启动类
    *
  • @author
  • @date 2022-12-22 16:20
    */
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaApplication {

    public static void main(String[] args) {

      SpringApplication.run(EurekaApplication.class, args);
      System.out.println("Eureka服务启动成功");
    

    }
    }

● 新建配置文件:application.yml
server:
port: 10086 # 服务端口
spring:
application:
name: eurekaserver # eureka的服务名称
eureka:
client:
serviceUrl: # eureka的地址信息
defaultZone: http://127.0.0.1:10086/eureka
register-with-eureka: false
fetch-registry: false
● 工程启动并访问:http://127.0.0.1:10086/

至此,eureka已完成创建、部署、访问。至此工程目录结构如下

打开Idea-Service控制台
稍后章节我们需工程多开部署(为后续Ribbon测试打好基础),需读者提前打开一下控制台窗口

2.user-service接入并启动
2.1 引入pom依赖


org.springframework.cloud
spring-cloud-starter-netflix-eureka-client

2.2 更新配置文件
以下配置文件注意缩进,其中application为spring下二级路径,主要为了区分多个注册在eureka上的服务。

application:
name: userservice
eureka:
client:
service-url: #eureka服务路径
defaultZone: http://127.0.0.1:10086/eureka/
2.3 启动并查看Eureka信息

2.3 复制模拟多实例部署
右键UserApplication,选择:Copy Configuration

设置应用信息,打开VM参数设置

VM参数设置如下:-Dserver.port=8082

启动应用并查看Eureka信息,此时变成两个活跃实例

3.order-service接入并启动
重复user-service操作,pom文件依赖操作完全一致,但配置文件中应用名称不同,在此单独贴出
application:
name: orderservice
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
启动后访问页面如下

至此我们的工程部署运行情况如下:

此时工程目录结构如下

4.常见问题及解决方案

  1. Eureka启动报错但页面访问正常
    确保Eureka信息配置中增加:register-with-eureka: false、fetch-registry: false,以避免因Eureka自身注册自身带来的启动异常
  2. 应用启动正常,访问Eureka发现注册失败
    a. 确保应用引入依赖:spring-cloud-starter-netflix-eureka-server
    b. 确保优先启动Eureka,而后启动user-service、order-service
  3. 如遇其他未知问题,为避免浪费时间可直接使用此工程导入

5.总结
本节读者带领大家完成SpringCloud集成组件Eureka的开发、部署,并完成业务应用在Eureka的注册、访问。基于此细心的读者朋友们可以发现:上一章节还写死的访问地址,已经变成动态从注册中心获取了,避免了接口提供方注册信息变更、导致消费方接口服务调用异常的场景。随着Eureka的剔除,Nacos又将如何优雅替换Eureka呢?待我们后续继续实操逐步发掘吧。

思考问题
● Eureka是什么?解决了什么问题?
● Eureka如何实现服务注册与服务发现?
● 还有哪些技术可以实现服务注册与服务发现?

相关文章
|
4月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
MyBatisPlus是MyBatis的增强框架,简化单表CRUD操作,内置分页、条件构造器、代码生成等功能,支持逻辑删除、枚举处理与JSON字段映射,提升开发效率。
|
Java 开发者 Spring
深入理解Spring Boot的@ComponentScan注解
【4月更文挑战第22天】在构建 Spring Boot 应用时,@ComponentScan 是一个不可或缺的工具,它使得组件发现变得自动化和高效。这篇博客将详细介绍 @ComponentScan 的基本概念、关键属性及其在实际开发中的应用。
1352 4
|
负载均衡 算法
ribbon的7种负载均衡算法和替换方法
ribbon的7种负载均衡算法和替换方法
510 0
ribbon的7种负载均衡算法和替换方法
|
消息中间件 Java Nacos
深入了解Spring Cloud Alibaba:微服务架构的新选择
Spring Cloud Alibaba是一组为构建基于微服务架构的应用程序而设计的开源工具和框架。它融合了Spring Cloud和Alibaba的技术栈,提供了一种强大的方式来开发、部署和管理分布式应用。本文将深入介绍Spring Cloud Alibaba的核心概念和功能,帮助您更好地理解这个引人注目的技术栈。
|
4月前
|
人工智能 搜索推荐 自动驾驶
FPGA 的回归:AI 时代,算力终于开始“量体裁衣”了
FPGA 的回归:AI 时代,算力终于开始“量体裁衣”了
298 0
|
7月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
2436 0
|
4月前
|
SQL 容灾 Nacos
Seata的部署和集成
本文介绍Seata分布式事务框架的部署与微服务集成。首先下载并解压Seata Server,修改配置文件application.yml,并在Nacos中配置seataServer.properties及数据库信息。创建seata数据库并运行SQL脚本初始化事务表。启动TC服务后,注册至Nacos。各微服务引入Seata依赖,配置application.yml连接TC。为实现高可用,搭建多节点TC集群,通过Nacos统一管理事务组映射,实现异地容灾与动态切换。微服务从Nacos读取client.properties,灵活绑定TC集群,提升系统稳定性与可维护性。(238字)
|
4月前
|
负载均衡 Java Nacos
Gateway服务网关
网关是微服务的统一入口,实现请求路由、权限控制与限流。基于Spring Cloud Gateway可快速搭建高性能网关,支持断言与过滤器灵活配置,并解决跨域问题,提升系统安全性和可维护性。
|
12月前
|
存储 安全 Java
ThreadLocal - 原理与应用场景详解
ThreadLocal是Java中用于实现线程隔离的重要工具,为每个线程提供独立的变量副本,避免多线程数据共享带来的安全问题。其核心原理是通过 ThreadLocalMap 实现键值对存储,每个线程维护自己的存储空间。ThreadLocal 广泛应用于线程隔离、跨层数据传递、复杂调用链路的全局参数传递及数据库连接管理等场景。此外,InheritableThreadLocal 支持子线程继承父线程的变量值,而 TransmittableThreadLocal 则解决了线程池中变量传递的问题,提升了多线程上下文管理的可靠性。深入理解这些机制,有助于开发者更好地解决多线程环境下的数据隔离与共享挑战。
2000 44
|
11月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
1335 8