Spring Cloud Eureka:服务注册与发现

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


Spring Cloud Eureka:服务注册与发现

Spring Cloud Eureka是Spring Cloud生态系统中的一个组件,它是用于实现服务注册与发现的服务治理组件。在微服务架构中,服务之间存在复杂的依赖关系,而Spring Cloud Eureka可以帮助解决服务之间相互查找和通信的问题

Eureka简介

Eureka是Netflix开源的服务发现组件,用于在分布式系统中实现服务注册与发现。它是Netflix公司在构建微服务架构时开发的核心组件之一,后来成为了Spring Cloud生态系统中的一部分

Eureka注册中心搭建

Eureka服务端搭建

  • eureka-server依赖导入
java 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  • 启动类添加注解@EnableEurekaServer
java 复制代码
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
  • 配置文件application.yml配置
java 复制代码
server:
  port: 8001 #指定运行端口
spring:
  application:
    name: eureka-server #指定服务名称
eureka:
  instance:
    hostname: localhost #指定主机地址
  client:
    fetch-registry: false #指定是否要从注册中心获取服务(注册中心不需要开启)
    register-with-eureka: false #指定是否要注册到注册中心(注册中心不需要开启)
  server:
    enable-self-preservation: false #关闭保护模式

Eureka客户端搭建

  • eureka-client依赖导入
java 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 启动类添加注解@EnableDiscoveryClient
java 复制代码
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}
  • 配置文件application.yml配置
java 复制代码
server:
  port: 8101 #运行端口号
spring:
  application:
    name: eureka-client #服务名称
eureka:
  client:
    register-with-eureka: true #注册到Eureka的注册中心
    fetch-registry: true #获取注册实例列表
    service-url:
      defaultZone: http://localhost:8001/eureka/ #配置注册中心地址

Eureka集群搭建

  • eureka-sever添加配置文件application-replica1.yml配置第一个注册中心
java 复制代码
server:
  port: 8002
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: replica1
  client:
    serviceUrl:
      defaultZone: http://replica2:8003/eureka/ #注册到另一个Eureka注册中心
    fetch-registry: true
    register-with-eureka: true
  • 给eureka-sever添加配置文件application-replica2.yml配置第二个注册中心
java 复制代码
server:
  port: 8003
spring:
  application:
    name: eureka-server
eureka:
  instance:
    hostname: replica2
  client:
    serviceUrl:
      defaultZone: http://replica1:8002/eureka/ #注册到另一个Eureka注册中心
    fetch-registry: true
    register-with-eureka: true
  • 修改Eureka-client,连接到集群
java 复制代码
server:
  port: 8102
spring:
  application:
    name: eureka-client
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://replica1:8002/eureka/,http://replica2:8003/eureka/ #同时注册到两个注册中心

Eureka添加认证

  • 添加SpringSecurity依赖
java 复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  • 添加application.yml配置文件(配置用户名、密码)
java 复制代码
server:
  port: 8004
spring:
  application:
    name: eureka-security-server
  security: #配置SpringSecurity登录用户名和密码
    user:
      name: macro
      password: 123456
eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false
    register-with-eureka: false

添加 Java 配置WebSecurityConfig

默认情况下,Spring Security会开启CSRF(Cross-Site Request Forgery)保护,这是一种用于防止跨站点请求伪造攻击的安全机制。当你添加了Spring Security依赖到应用程序中时,每个POST、PUT、DELETE等修改类请求都需要在请求头中包含CSRF token才能被服务器接受

默认情况下添加SpringSecurity依赖的应用每个请求都需要添加CSRF token才能访问,Eureka客户端注册时并不会添加,所以需要配置/eureka/**路径不需要CSRF token

java 复制代码
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().ignoringAntMatchers("/eureka/**");
        super.configure(http);
    }
}

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请------点赞👍收藏⭐️评论📝


相关推荐
SL_staff5 小时前
金融风控规则引擎的深度实践:JVS-Rules 四大原生能力解析
spring cloud·产品·全栈
萧瑟余晖6 小时前
Spring Cloud配置中心与动态刷新详解
spring cloud·面试
Doker 多克8 小时前
Spring Integration AMQP 和 Spring AMQP详解
java·后端·spring
code_slave(码畜)10 小时前
微服务架构落地:分库分表实战(下) —— 分布式主键、跨分片查询与分页聚合防坑
数据库·spring boot·分布式·spring cloud·微服务·架构·分库分表
雷一言说11 小时前
Spring AI 2.0 Agent Skills 接入
spring
萧瑟余晖12 小时前
Spring Cloud综合实战与架构选型详解
spring·spring cloud·架构
萧瑟余晖13 小时前
Spring Cloud Alibaba生态整合详解
spring·spring cloud·面试
一级新生14 小时前
Dify 日常使用手册(小白版)
人工智能·docker·云原生·eureka·dify·ai工具
专业程序开发源1 天前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
小溪学编程1 天前
将 Bean 放入 Spring 容器中的方式有哪些?
java·后端·spring