0


Springboot集成Eureka实现注册中心-11

Spring Cloud Netflix Eureka是Spring Cloud Netflix子项目的核心组件之一,主要用于微服务架构中的服务治理。

什么是注册中心

在微服务架构中往往会有一个注册中心,每个微服务都会向注册中心去注册自己的地址及端口信息,注册中心维护着服务名称与服务实例的对应关系。每个微服务都会定时从注册中心获取服务列表,同时汇报自己的运行情况,这样当有的服务需要调用其他服务时,就可以从自己获取到的服务列表中获取实例地址进行调用,Eureka实现了这套服务注册与发现机制。

为什么要使用注册中心

传统RMI调用

在这里插入图片描述

这种调用方式如上图所示,通过在Consumer端直接配置服务端的ip+port来调用,这种方法有个缺陷就是一旦privder有修改就必须修改consumer。局限性比较大。

微服务RMI调用

在这里插入图片描述

注册中心相当于一个中间层,把传统调用方式分为三个阶段:

  • 启动:在提供和消费端启动时都会向注册中心注册自己,主要是用一个别名来代替ip+port。这个别名需要在注册中心范围内全局唯一,格式类似如下:
{providerID:"userProvider",services:["192.168.0.1:8080","192.168.0.2:8080","192.168.0.3:8081"]}
  • 监听:服务启动时Conusmer会从注册中心拉取Provider列表到本地然后缓存起来。Provider也会拉取一些信息到本地,但一般是一些控制信息。最后在服务运行过程中 注册中心和双端会保持实时的心跳和数据同步。
  • 调用:这里需要注意,微服务的调用方式和传统方式一样,是端和端直连的,注册中心并不参与调用过程。

总体来看,注册中心主要有两个作用,解耦双端和管理双端。

springcloud-eureka-server注册中心模块

在这里插入图片描述

pom.xml

依赖版本可参考 springbootSeries 模块中pom.xml文件中的版本定义
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>

application.properties配置

spring.profiles.active = dev
spring.application.name=springbootEurekaServer1
server.port=18082#本注册中心地址,在客户端会配置成:http://127.0.0.1:18082/eureka ,需要注意url后面的eureka不要忘记了eureka.instance.hostname=localhost
#定是否从注册中心获取服务(注册中心不需要开启)
eureka.client.fetch-registry=false
#指定是否将服务注册到注册中心(注册中心不需要开启)
eureka.client.register-with-eureka=false

SpringbootApplication启动类

添加

@EnableEurekaServer

注解

@Slf4j@SpringBootApplication(scanBasePackages ={"com.korgs","cn.hutool.extra.spring"})@Configuration@EnableConfigurationProperties@ServletComponentScan@RestController@EnableEurekaServerpublicclassSpringbootEurekaServerApplication{publicstaticvoidmain(String[] args){SpringApplication.run(SpringbootEurekaServerApplication.class, args);}@GetMapping("/helloworld")publicBaseResponsehelloWorld(){
        log.info(LogGenerator.trackLog()+"msg="+"I am busy to handle this request.");returnBaseResponse.success("hello world");}}

启动测试

启动应用,访问 :

http://127.0.0.1:18082/

,会显示如下界面。
在这里插入图片描述

springcloud-eureka-client 测试应用

在这里插入图片描述

pom.xml

依赖版本可参考 springbootSeries 模块中pom.xml文件中的版本定义
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

application.properties配置

配置

eureka.client.service-url.defaultZone

等相关配置。

spring.profiles.active = dev
spring.application.name=springbootEurekaClient
server.port=18084

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone = http://127.0.0.1:18082/eureka

SpringbootApplication启动类

添加

@EnableDiscoveryClient

注解

@Slf4j@SpringBootApplication(scanBasePackages ={"com.korgs","cn.hutool.extra.spring"})@Configuration@EnableConfigurationProperties@ServletComponentScan@RestController@EnableDiscoveryClientpublicclassSpringbootEurekaClientApplication{publicstaticvoidmain(String[] args){SpringApplication.run(SpringbootEurekaClientApplication.class, args);}@GetMapping("/helloworld")publicBaseResponsehelloWorld(){
        log.info(LogGenerator.trackLog()+"msg="+"I am busy to handle this request.");returnBaseResponse.success("hello world");}}

启动测试

启动应用,然后刷新

http://127.0.0.1:18082/

,应该可以看到应用会被注册到注册中心了。
在这里插入图片描述

实现注册中心集群

由于所有服务都会注册到注册中心去,服务之间的调用都是通过从注册中心获取的服务列表来调用,注册中心一旦宕机,所有服务调用都会出现问题。所以我们需要多个注册中心组成集群来提供服务,下面将搭建一个双节点的注册中心集群。

修改 springcloud-eureka-server 模块

这里我们会复用

springcloud-eureka-server

,添加另外一套配置。添加一个名为

application-serverBackup.properties

的配置文件。

  • 添加新文件application-serverBackup.properties,主要修改配置文件成如下内容,eureka.client.service-url.defaultZone = http://127.0.0.1:18082/eureka
#springboot Serverspring.application.name=springbootEurekaServer2
spring.aop.auto=true
spring.aop.proxy-target-class=true

# log4jlogging.config=classpath:log4j2.xml
logging.level.root=INFO
logging.level.org.springframework.web=ERROR

#restful Serverserver.port=18083server.compression.enabled=true
server.compression.mime-types=application/json,application/octet-stream

#swagger
springdoc.api-docs.enabled=true
springdoc.api-docs.path=/api-schema

swagger-config.group = default-group
swagger-config.description= The following is a restful-api list of {} application, and you can browse or test them to determine if they are working as you expect.
swagger-config.version=V1.0
swagger-config.urlPattern=/**
swagger-config.base-package=com.korgs
swagger-config.authorization-key-name=token
swagger-config.wiki = https://korgs.blog.csdn.net/

#本注册中心地址,在客户端会配置成:http://127.0.0.1:18084/eureka ,需要注意这晨的eureka不要忘记了eureka.instance.hostname=localhost
#定是否从注册中心获取服务(注册中心不需要开启)
eureka.client.fetch-registry=false
#指定是否将服务注册到注册中心(注册中心不需要开启)
eureka.client.register-with-eureka=false
#注册到哪一个Eureka注册中心形成全注册中心互备
eureka.client.service-url.defaultZone = http://127.0.0.1:18082/eureka
  • 修改 application.properties 添加eureka.client.service-url.defaultZone = http://127.0.0.1:18083/eureka,即18083服务做为备份。
spring.profiles.active = dev
spring.application.name=springbootEurekaServer1
server.port=18082#本注册中心地址,在客户端会配置成:http://127.0.0.1:18082/eureka ,需要注意这晨的eureka不要忘记了eureka.instance.hostname=localhost
#定是否从注册中心获取服务(注册中心不需要开启)
eureka.client.fetch-registry=false
#指定是否将服务注册到注册中心(注册中心不需要开启)
eureka.client.register-with-eureka=false

#注册到哪一个Eureka注册中心形成全注册中心互备
eureka.client.service-url.defaultZone = http://127.0.0.1:18083/eureka

修改 springcloud-eureka-client 模块

修改 application.properties文件添加第二个注册中心地址

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone = http://127.0.0.1:18082/eureka, http://127.0.0.1:18083/eureka

启动测试

在idea中添加一个类型为springboot的启动类,在Idea中可以在启动配置对话框中添加Springboot,然后在配置界面勾选程序实参,最后配置–spring.profiles.active=serverBackup,以指定不同springboot的profile配置文件
在这里插入图片描述

刷新

http://127.0.0.1:18082/

,会在DS Replicas下面看到一个备份的注册中心。
在这里插入图片描述

给注册中心添加登陆认证

此处会用到一个新的注册中心server模块,复制原

springcloud-eureka-server 

然后做如下更新,新模块命名为:

springcloud-eureka-server-with-security, 端口号为18085
  • client端可复用上一节的 springcloud-eureka-client ,注意修改注册中心地址

pom.xml

依赖版本可参考 springbootSeries 模块中pom.xml文件中的版本定义
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

修改 application.properties

配置用户名和密码

#配置spring security登录用户名和密码spring.security.user.name=root
spring.security.user.password=root

启动测试

填写用户名和密码
在这里插入图片描述

实现WebSecurityConfig

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

@Configuration@EnableWebSecuritypublicclassWebSecurityConfig{//    @BeanpublicSecurityFilterChainfilterChain(HttpSecurity http)throwsException{//        Eureka客户端注册时并不会添加,所以需要配置/eureka/**路径不需要CSRF token
        http.csrf().ignoringRequestMatchers("/eureka/**");return http.build();}}

如果想注册到带登陆认证的注册中心,则配置要修改成如下配置
比如

springcloud-eureka-client

模块想注册到一个带验证的注册中心,则需要修改

application.properties

eureka.client.service-url.defaultZone = http://root:root@localhost:18085/eureka/

Eureka 常用配置

eureka:client:#eureka客户端配置register-with-eureka:true#是否将自己注册到eureka服务端上去fetch-registry:true#是否获取eureka服务端上注册的服务列表service-url:defaultZone: http://localhost:8001/eureka/ # 指定注册中心地址enabled:true# 启用eureka客户端registry-fetch-interval-seconds:30#定义去eureka服务端获取服务列表的时间间隔instance:#eureka客户端实例配置lease-renewal-interval-in-seconds:30#定义服务多久去注册中心续约lease-expiration-duration-in-seconds:90#定义服务多久不去续约认为服务失效metadata-map:zone: guangdong #所在区域hostname: localhost #服务主机名称prefer-ip-address:false#是否优先使用ip来作为主机名server:#eureka服务端配置enable-self-preservation:false#关闭eureka服务端的保护机制

源码下载

涉及模块:

  • springcloud-eureka-server:注册中心,端口号: 18082, 18083
  • springcloud-eureka-client:需要被注册的服务,端口号:18084
  • springcloud-eureka-server-with-security, 带登陆功能的注册中心,端口号为18085

源码下载:

  • 基础框架源码下载
  • Springboot集成Eureka实现注册中心

源码运行方法:

  • 模块详细功能说明和运行测试方法
标签: spring boot eureka java

本文转载自: https://blog.csdn.net/liudonglovehemin/article/details/138486451
版权归原作者 korgs 所有, 如有侵权,请联系我们删除。

“Springboot集成Eureka实现注册中心-11”的评论:

还没有评论