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
@EnableEurekaServer
public class SpringbootEurekaServerApplication {public static void main(String[] args) {SpringApplication.run(SpringbootEurekaServerApplication.class, args);}@GetMapping("/helloworld")public BaseResponse helloWorld(){log.info(LogGenerator.trackLog()+ "msg="+ "I am busy to handle this request.");return BaseResponse.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=18084eureka.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
@EnableDiscoveryClient
public class SpringbootEurekaClientApplication {public static void main(String[] args) {SpringApplication.run(SpringbootEurekaClientApplication.class, args);}@GetMapping("/helloworld")public BaseResponse helloWorld(){log.info(LogGenerator.trackLog()+ "msg="+ "I am busy to handle this request.");return BaseResponse.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 Server
spring.application.name=springbootEurekaServer2
spring.aop.auto=true
spring.aop.proxy-target-class=true# log4j
logging.config=classpath:log4j2.xml
logging.level.root=INFO
logging.level.org.springframework.web=ERROR#restful Server
server.port=18083
server.compression.enabled=true
server.compression.mime-types=application/json,application/octet-stream#swagger
springdoc.api-docs.enabled=true
springdoc.api-docs.path=/api-schemaswagger-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
@EnableWebSecurity
public class WebSecurityConfig {//    @Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
//        Eureka客户端注册时并不会添加,所以需要配置/eureka/**路径不需要CSRF tokenhttp.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实现注册中心

源码运行方法:

  • 模块详细功能说明和运行测试方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3030958.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

我觉得POC应该贴近实际

今天我看到一位老师给我一份测试数据。 这是三个国产数据库。算是分布式的。其中有两个和我比较熟悉&#xff0c;但是这个数据看上去并不好。看上去第一个黄色的数据库数据是这里最好的了。但是即使如此&#xff0c;我相信大部分做数据库的人都知道。MySQL和PostgreSQL平时拿出…

栈和队列初级题目(包含四个题)

目录 一、原题链接&#xff1a; 二、有效的括号&#xff1a; ​编辑代码实现&#xff1a; 三、用队列实现栈&#xff1a; 四、用栈实现队列&#xff1a; 五、设计循环队列&#xff1a; 六、读书分享&#xff1a; 一、原题链接&#xff1a; 20. 有效的括号 225. 用队列实…

机器学习-12-sklearn案例03-flask对外提供服务

整体思路 训练一个模型&#xff0c;把模型保存 写一个基于flask的web服务&#xff0c;在web运行时加载模型&#xff0c;并在对应的接口调用模型进行预测并返回 使用curl进行测试&#xff0c;测试通过 再创建一个html页面&#xff0c;接受参数输入&#xff0c;并返回。 目录结…

西湖大学英语听力考试音频无线发射系统-英语听力发射系统浅析

西湖大学英语听力考试音频无线发射系统-英语听力发射系统浅析 由北京海特伟业科技任洪卓发布于2024年5月10日 西湖大学&#xff0c;这所矗立于时代前沿的高等学府&#xff0c;始终秉持着创新精神和追求卓越的坚定信念&#xff0c;不断致力于教学质量的提升与学术研究的深化。其…

Sql Server 2016数据库定时备份

一、 配置备份计划任务 选中“维护计划“--右键--“维护计划向导” 完成

详解Python测试框架Pytest的参数化

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 上篇博文介绍过&#xff0c;Pytest是目前比较成熟功能齐全的测试框架&#xff0c;使用率肯定也不…

一次完整的GC流程

Java堆中内存区分 Java的堆由新生代&#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;组成。新生代存放新分配的对象&#xff0c;老年代存放长期存在的对象。 新生代&#xff08;Young&#xff09;由年轻区&#xff08;Eden&a…

语义分割——脑肿瘤图像分割数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

2024年首季:AGV项目大盘点,有过1亿的项目

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 2024年第一季度&#xff0c;中国智慧物流行业迎来了一个重要的里程碑。 根据新战略移动机器人产业研究所的初步统计…

Numpy求最大、最小值、求累乘、累和

Numpy求最大、最小值 代码举例&#xff1a; ​ 输出结果为&#xff1a; ​ 在这个例子中&#xff0c;我们首先导入了NumPy库&#xff0c;然后创建了一个3x3的矩阵A。接着&#xff0c;我们使用np.max()函数来求矩阵A的最大值&#xff0c;并将结果存储在变量max_value中&#xff…

MyBatis——MyBatis入门程序

一、数据准备 二、开发步骤 1、引入依赖 <dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.15</version></dependency><dependency><groupId>c…

netty配置SSL、netty配置https(开发)

netty配置SSL、netty配置https&#xff08;开发&#xff09; 我们在开发下使用ssl&#xff0c;所用的证书将不被客户端信任。 转自&#xff1a;https://lingkang.top/archives/netty-pei-zhi-ssl 方案一 快速。使用netty提供的临时签发证书 private static SslContext sslC…

python实现背单词程序

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 背单词是学习英语的一个重要环节,它有很多好处,以下是其中一些主要的好处: 提高词汇量

未授权访问:Memcached 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章&#xff1a; 这里附上大…

如何访问远程MySQL数据库服务器?

访问远程MySQL数据库服务器是一项常见的任务&#xff0c;它允许我们在不同的地点通过网络连接到MySQL服务器&#xff0c;并进行数据库管理和数据处理操作。我们将重点介绍一种名为【天联】的组网技术&#xff0c;该技术提供了一系列优势&#xff0c;使远程访问MySQL数据库服务器…

【AI+换脸换装】从OpenAI 探索色情露骨内容领域浅聊AI换脸换装

5月9日消息&#xff0c;据外电报道&#xff0c;OpenAI 周三发布了文档草案&#xff0c;阐述了它希望 ChatGPT 及其其他人工智能技术如何运作。冗长的Model Spec 文件的一部分透露&#xff0c;该公司正在探索进军色情和其他露骨内容领域。 看完这个&#xff0c;心里有点惊讶&am…

HarmonyOS NEXT星河版之美团外卖点餐功能实战(下)

文章目录 一、购物车逻辑1.1 购物车及加减菜1.2 菜品的加减---方案一1.3 菜品的加减---方案二1.4 购物车View完善1.5 清空购物车1.5 购物车数量和价格 二、小结 一、购物车逻辑 1.1 购物车及加减菜 在utils目录下新建CartStore.ets文件&#xff0c;如下&#xff1a; import …

华为与达梦数据签署全面合作协议

4月26日&#xff0c;武汉达梦数据库股份有限公司&#xff08;简称“达梦数据”&#xff09;与华为技术有限公司&#xff08;简称“华为”&#xff09;在达梦数据武汉总部签署全面合作协议。 达梦数据总经理皮宇、华为湖北政企业务总经理吕晓龙出席并见证签约&#xff1b;华为湖…

Istio中的全局限流方案

Istio中的全局限流方案 在k8s网格&#xff08;istio&#xff09;环境中&#xff0c; 可以通过创建Envfoyfilter的方式来配置限流。 在istio官方文档中&#xff0c;提供了两种限流方式&#xff1a; 本地限流全局限流 本地限流的细节这里不再赘述, 主要讲解全局限流的配置方式…

解双曲型非线性方程的Harden-Yee算法(TVD格式)

解双曲型非线性方程的Harden-Yee算法 先贴代码&#xff0c;教程后面有空再写 import matplotlib import math matplotlib.use(TkAgg) import numpy as np import matplotlib.pyplot as plt def Phiy(yy,epsi):#phi(y)if abs(yy) > epsi:phiyy abs(yy)else:phiyy (yy*yy…