基础mysql笔试题及答案,eureka技术分享

本文介绍了如何在SpringCloud中启用EurekaServer,配置服务注册,包括商品和服务订单服务的注册。还详细讲解了Eureka中的自我保护机制、元数据管理、高可用集群搭建以及常见问题解决方法。
摘要由CSDN通过智能技术生成

EnableEurekaServer : 激活Eureka Server端配置

2、服务注册中心管理后台

打开浏览器访问http://localhost8761即可进入EurekaServer内置的管理控制台,显示效果如下

在这里插入图片描述


四、服务注册到Eureka注册中心


1、商品服务注册

(1) 商品模块中引入坐标

在 shop_service_product 的pom文件中添加eureka client的相关坐标

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

(2) 配置application.yml文件

在工程的 application.yml 中添加Eureka Server的主机地址

eureka:

client:

serviceUrl: # eureka server的路径

defaultZone: http://localhost:8761/eureka/

instance:

prefer-ip-address: true #使用ip注册

(3) 修改启动类添加服务注册注解

@SpringBootApplication

//@EnableDiscoveryClient

//@EnableEurekaClient

public class OrderApplication {

public static void main(String[] args) {

SpringApplication.run(OrderApplication.class, args);

}

}

从Spring Cloud Edgware版本开始, @EnableDiscoveryClient 或 @EnableEurekaClient 可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。

2、订单服务注册

和商品微服务一样,只需要引入坐标依赖,在工程的 application.yml 中添加Eureka Server的主机地址即可

(1) 订单模块中引入坐标

在 shop_service_product 的pom文件中添加eureka client的相关坐标

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

(2) 配置application.yml文件

在工程的 application.yml 中添加Eureka Server的主机地址

eureka:

client:

serviceUrl: # eureka server的路径

defaultZone: http://localhost:8761/eureka/

instance:

prefer-ip-address: true #使用ip注册

(3) 修改启动类添加服务注册注解

@SpringBootApplication

//@EnableDiscoveryClient

//@EnableEurekaClient

public class OrderApplication {

public static void main(String[] args) {

SpringApplication.run(OrderApplication.class, args);

}

}

从Spring Cloud Edgware版本开始, @EnableDiscoveryClient 或 @EnableEurekaClient 可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。

五、Eureka中的自我保护


微服务第一次注册成功之后,每30秒会发送一次心跳将服务的实例信息注册到注册中心。通知 Eureka Server 该实例仍然存在。如果超过90秒没有发送更新,则服务器将从注册信息中将此服务移除。

Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)验证完自我保护机制开启后,并不会马上呈现到web上,而是默认需等待 5 分钟(可以通eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分钟后你会看到下面的提示信息:

在这里插入图片描述

如果关闭自我保护

通过设置 eureka.enableSelfPreservation=false 来关闭自我保护功能。


六、Eureka中的元数据


Eureka的元数据有两种:标准元数据和自定义元数据。

  • 标准元数据:主机名、IP地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。

  • 自定义元数据:可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的存储格式。这些元数据可以在远程客户端中访问。

在程序中可以使用DiscoveryClient 获取指定微服务的所有元数据信息

@SpringBootTest

@RunWith(SpringJUnit4ClassRunner.class)

public class RestTemplateTest {

@Autowired

private DiscoveryClient discoveryClient;

@Test

public void test() {

//根据微服务名称从注册中心获取相关的元数据信息

List instances = discoveryClient.getInstances(“shop-service-product”);

for (ServiceInstance instance : instances) {

System.out.println(instance);

}

}

}

七、Eureka高可用集群


Eureka Client会定时连接Eureka Server,获取注册表中的信息并缓存到本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server发生宕机,也不会影响到服务之间的调用。但如果Eureka Server宕机时,某些微服务也出现了不可用的情况,Eureka Server中的缓存若不被刷新,就可能会影响到微服务的调用,甚至影响到整个应用系统的高可用。因此,在生成环境中,通常会部署一个高可用的Eureka Server集群。

Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点之间相互注册是Eureka Server的默认行为。

在这里插入图片描述

1、搭建 Eureka Server高可用集群

1、修改本机host属性

127.0.0.1 eureka1

127.0.0.1 eureka2

2、修改 shop_eureka_server 工程中的yml配置文件,添加如下配置属性

#指定应用名称

spring:

application:

name: shop-eureka-server


#执行peer1的配置信息

spring:

profiles: eureka1

server:

port: 8761

eureka:

instance:

hostname: eureka1

client:

service-url:

defaultZone: http://eureka2:8762/eureka


#执行peer2的配置信息

spring:

profiles: eureka2

server:

port: 8762

eureka:

instance:

hostname: eureka2

client:

service-url:

defaultZone: http://eureka1:8761/eureka

在配置文件中通过连字符(—)将文件分为三个部分,第一部分为应用名称,第二部分和第三部分是根据不同的profiles选项动态添加,可以在IDEA启动时进行激活配置

在这里插入图片描述

使用IDEA启动历次EurekaServerApplicaion分别激活eureka1和eureka2配置。访问http://eureka1:8761和http://eureka1:8762/。会发现注册中心 SHOP-EUREKA-SERVER 已经有两个节点,并且registered-replicas (相邻集群复制节点)中已经包含对方。

在这里插入图片描述

2、服务注册到Eureka Server集群

如果需要将微服务注册到Eureka Server集群只需要修改yml配置文件即可

eureka:

client:

serviceUrl:

defaultZone: http://eureka1:8761/eureka/,http://eureka1:8761/eureka/

以商品微服务为例,修改defaultZone配置添加多个Eureka Server的地址

八、Eureka中的常见问题


1、服务注册慢

默认情况下,服务注册到Eureka Server的过程较慢。SpringCloud官方文档中给出了详细的原因

在这里插入图片描述

大致含义:服务的注册涉及到心跳,默认心跳间隔为30s。在实例、服务器、客户端都在本地缓存中具有相同的元数据之前,服务不可用于客户端发现(所以可能需要3次心跳)。可以通过配置eureka.instance.leaseRenewalIntervalInSeconds (心跳频率)加快客户端连接到其他服务的过程。在生产中,最好坚持使用默认值,因为在服务器内部有一些计算,他们对续约做出假设。

2、服务节点剔除问题

默认情况下,由于Eureka Server剔除失效服务间隔时间为90s且存在自我保护的机制。所以不能有效而迅速的剔除失效节点,这对开发或测试会造成困扰。解决方案如下:

Eureka Server:

配置关闭自我保护,设置剔除无效节点的时间间隔

eureka:

instance:

hostname: eureka1

client:

service-url:

defaultZone: http://eureka2:8762/eureka

server:

enable-self-preservation: false #关闭自我保护

eviction-interval-timer-in-ms: 4000 #剔除时间间隔,单位:毫秒

Eureka Client:

配置开启健康检查,并设置续约时间

eureka:

client:

healthcheck: true #开启健康检查(依赖spring-boot-actuator)

serviceUrl:

defaultZone: http://eureka1:8761/eureka/,http://eureka1:8761/eureka/

instance:

preferIpAddress: true

lease-expiration-duration-in-seconds: 10 #eureka client发送心跳给server端后,续约到期时间(默认90秒)

lease-renewal-interval-in-seconds: 5 #发送心跳续约间隔

3、监控页面显示ip

在Eureka Server的管控台中,显示的服务实例名称默认情况下是微服务定义的名称和端口。为了更好的对所有服务进行定位,微服务注册到Eureka Server的时候可以手动配置示例ID。配置方式如下:

eureka:

instance:

instance-id: s p r i n g . c l o u d . c l i e n t . i p − a d d r e s s : {spring.cloud.client.ip-address}: spring.cloud.client.ipaddress:{server.port}

#spring.cloud.client.ip-address:获取ip地址

在这里插入图片描述

九、Eureka配置合集


1、Eureka Server常用配置

eureka:

server:

#服务端开启自我保护模式

enable-self-preservation: true

#扫描失效服务的间隔时间(单位毫秒,默认是60*1000)即60秒

eviction-interval-timer-in-ms: 60000

#间隔多长时间,清除过期的 delta 数据

delta-retention-timer-interval-in-ms: 0

#是否开启请求频率限制器

rate-limiter-enabled: false

#请求频率限制器

rate-limiter-burst-size: 10

#请求频率的平均值

rate-limiter-full-fetch-average-rate: 100

#是否对标准的client进行频率请求限制。如果是false,则只对非标准client进行限制

rate-limiter-throttle-standard-clients: false

#注册服务、拉取服务列表数据的请求频率的平均值

rate-limiter-registry-fetch-average-rate: 500

#设置信任的client list

rate-limiter-privileged-clients: Collections.emptySet()

#在设置的时间范围类,期望与client续约的百分比。

renewal-percent-threshold: 0.85

#多长时间更新续约的阈值

renewal-threshold-update-interval-ms: 900000

#对于缓存的注册数据,多长时间过期

response-cache-auto-expiration-in-seconds: 180

#多长时间更新一次缓存中的服务注册数据

response-cache-update-interval-ms: 30000

#缓存增量数据的时间,以便在检索的时候不丢失信息

retention-time-in-m-s-in-delta-queue: 180000

#当时间戳不一致的时候,是否进行同步

sync-when-timestamp-differs: true

#是否采用只读缓存策略,只读策略对于缓存的数据不会过期。

use-read-only-response-cache: true

#============== server node 与 node 之间关联的配置 ==============#

#发送复制数据是否在request中,总是压缩

enable-replicated-request-compression: false

#指示群集节点之间的复制是否应批处理以提高网络效率。

batch-replication: false

#允许备份到备份池的最大复制事件数量。而这个备份池负责除状态更新的其他事件。可以根据内存大小,超时和复制流量,来设置此值得大小

max-elements-in-peer-replication-pool: 10000

#允许备份到状态备份池的最大复制事件数量

max-elements-in-status-replication-pool: 10000

#多个服务中心相互同步信息线程的最大空闲时间

max-idle-thread-age-in-minutes-for-peer-replication: 15

#状态同步线程的最大空闲时间

max-idle-thread-in-minutes-age-for-status-replication: 15

#服务注册中心各个instance相互复制数据的最大线程数量

max-threads-for-peer-replication: 20

#服务注册中心各个instance相互复制状态数据的最大线程数量

max-threads-for-status-replication: 1

#instance之间复制数据的通信时长

max-time-for-replication: 30000

#正常的对等服务instance最小数量。-1表示服务中心为单节点。

min-available-instances-for-peer-replication: -1

#instance之间相互复制开启的最小线程数量

min-threads-for-peer-replication: 5

#instance之间用于状态复制,开启的最小线程数量

min-threads-for-status-replication: 1

#instance之间复制数据时可以重试的次数

number-of-replication-retries: 5

#eureka节点间间隔多长时间更新一次数据。默认10分钟。

peer-eureka-nodes-update-interval-ms: 600000

#eureka服务状态的相互更新的时间间隔。

peer-eureka-status-refresh-time-interval-ms: 0

#eureka对等节点间连接超时时间

peer-node-connect-timeout-ms: 200

#eureka对等节点连接后的空闲时间

peer-node-connection-idle-timeout-seconds: 30

#节点间的读数据连接超时时间

peer-node-read-timeout-ms: 200

#eureka server 节点间连接的总共最大数量

peer-node-total-connections: 1000

#eureka server 节点间连接的单机最大数量

peer-node-total-connections-per-host: 10

#在服务节点启动时,eureka尝试获取注册信息的次数

registry-sync-retries: 0

#在服务节点启动时,eureka多次尝试获取注册信息的间隔时间

registry-sync-retry-wait-ms:

#当eureka server启动的时候,不能从对等节点获取instance注册信息的情况,应等待多长时间。

wait-time-in-ms-when-sync-empty: 0

2、Eureka Client 常用配置

eureka:

client:

#该客户端是否可用

enabled: true

#实例是否在eureka服务器上注册自己的信息以供其他服务发现,默认为true

register-with-eureka: false

#此客户端是否获取eureka服务器注册表上的注册信息,默认为true

fetch-registry: false

#是否过滤掉,非UP的实例。默认为true

filter-only-up-instances: true

#与Eureka注册服务中心的通信zone和url地址

service-url:

defaultZone: http:// e u r e k a . i n s t a n c e . h o s t n a m e : {eureka.instance.hostname}: eureka.instance.hostname:{server.port}/eureka/

#client连接Eureka服务端后的空闲等待时间,默认为30 秒

eureka-connection-idle-timeout-seconds: 30

#client连接eureka服务端的连接超时时间,默认为5秒

eureka-server-connect-timeout-seconds: 5

#client对服务端的读超时时长

eureka-server-read-timeout-seconds: 8

#client连接all eureka服务端的总连接数,默认200

eureka-server-total-connections: 200

#client连接eureka服务端的单机连接数量,默认50

eureka-server-total-connections-per-host: 50

#执行程序指数回退刷新的相关属性,是重试延迟的最大倍数值,默认为10

cache-refresh-executor-exponential-back-off-bound: 10

#执行程序缓存刷新线程池的大小,默认为5

cache-refresh-executor-thread-pool-size: 2

#心跳执行程序回退相关的属性,是重试延迟的最大倍数值,默认为10

heartbeat-executor-exponential-back-off-bound: 10

#心跳执行程序线程池的大小,默认为5

heartbeat-executor-thread-pool-size: 5

询问Eureka服务url信息变化的频率(s),默认为300秒

eureka-service-url-poll-interval-seconds: 300

#最初复制实例信息到eureka服务器所需的时间(s),默认为40秒

initial-instance-info-replication-interval-seconds: 40

#间隔多长时间再次复制实例信息到eureka服务器,默认为30秒

instance-info-replication-interval-seconds: 30

#从eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒

registry-fetch-interval-seconds: 30

获取实例所在的地区。默认为us-east-1

region: us-east-1

#实例是否使用同一zone里的eureka服务器,默认为true,理想状态下,eureka客户端与服务端是在同一zone下

prefer-same-zone-eureka: true

获取实例所在的地区下可用性的区域列表,用逗号隔开。(AWS)

availability-zones:

china: defaultZone,defaultZone1,defaultZone2

#eureka服务注册表信息里的以逗号隔开的地区名单,如果不这样返回这些地区名单,则客户端启动将会出错。默认为null

fetch-remote-regions-registry:

#服务器是否能够重定向客户端请求到备份服务器。 如果设置为false,服务器将直接处理请求,如果设置为true,它可能发送HTTP重定向到客户端。默认为false

allow-redirects: false

#客户端数据接收

client-data-accept:

#增量信息是否可以提供给客户端看,默认为false

disable-delta: false

#eureka服务器序列化/反序列化的信息中获取“_”符号的的替换字符串。默认为“__“

escape-char-replacement: __

#eureka服务器序列化/反序列化的信息中获取“$”符号的替换字符串。默认为“_-”

dollar-replacement: “_-”

#当服务端支持压缩的情况下,是否支持从服务端获取的信息进行压缩。默认为true

g-zip-content: true

#是否记录eureka服务器和客户端之间在注册表的信息方面的差异,默认为false

log-delta-diff: false

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-P2bHjK0A-1713466980517)]

[外链图片转存中…(img-hPGjKzld-1713466980517)]

[外链图片转存中…(img-C7SRxzGN-1713466980518)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。

[外链图片转存中…(img-ESXdkA9R-1713466980518)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值