zl程序教程

您现在的位置是:首页 >  后端

当前栏目

SpringCloud笔记:配置Eurake注册中心与高可用集群

2023-06-13 09:11:52 时间

大家好,又见面了,我是你们的朋友全栈君。

SpringCloud是目前非常流行的一个微服务框架,基于springboot,由多个独立模块集合而成。每个模块既可以是一个服务项目,比如会员服务,订单服务等,也可以是公用的API给其他模块使用。可以理解为把一个大的项目拆分成很多小的模块,这些模块通过httpclient+json的形式完成服务之间的通讯,而且每个模块都有自己独立的业务和部署,使得粒度更加精细。

五大组件如下:

服务注册与发现——Eureka 服务间通讯与负载——Ribbon 断路器——Hystrix 服务网关——Zuul 配置中心——Config

任何一个rpc远程框架都要有一个服务中心用来存储服务信息,SpringCloud支持eureka,consul,zookeeper三种,在idea中创建项目的时候也会看到它们,eureka从2.0以后不再开源(不开源并不是不让用),也可以使用consul和zookeeper。

服务注册与发现Eureka

服务注册中心作用是存储各个服务信息,通过查询服务列表知道哪些服务在线,隔一段时间(默认30秒)刷新一次,及时移除崩溃的服务。每个服务的信息以key/value的形式存储在服务中心,key是服务名字,即serviceid,value是服务所在的ip+端口号,服务之间进行通讯的时候,通过key服务名称找到要通讯服务的地址信息,进行通讯。

一,单个eurake注册中心

创建一个名为cloud的maven项目,新建三个模块,分别是eurake,order服务,user服务 如图所示:

eurake为服务注册中心,order和user是两个测试客户端

配置eurake:

引入eurake-server相关jar包

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

启动类开启注解 @EnableEurekaServer

application.properties中配置端口号,服务名称,以及注册中心相关

#项目端口号
server.port=8080
#服务名称,serverid
spring.application.name=eurake-server
#注册中心ip
eureka.instance.hostname=localhost
#是否需要向注册中心注册自己,单个的eurake-server不需要开启
eureka.client.register-with-eureka=false
#开启检索服务,单个的eurake不需要开启
eureka.client.fetch-registry=false
#注册中心地址,由注册中心ip和项目端口号拼接/eurake
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

完成启动eurake项目,访问localhost:8080

此界面就是eurake服务中心页面 Instances currently registered with Eureka 下面为服务列表,目前为空

配置客户端order和user 引入jar包

         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

启动类开启注解@EnableEurekaClient,这里也可以写@EnableDiscoveryClient,后者同时也支持consul和zk。 分别打开application.properties配置

#项目端口号
server.port=8082
#服务名称,serverid
spring.application.name=order-client
#注册中心地址,把自己注册到注册中心
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka
#项目端口号
server.port=8081
#服务名称,serverid
spring.application.name=user-client
#注册中心地址,把自己注册到注册中心
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka

启动order和user服务 刷新注册中心

列表中可以看到order和user两个服务已经注册进去。

二,多个eurake集群

各个服务通讯,包括zuul等部分都需要注册中心保持在正常状态,如果注册中心崩溃,就不能从注册列表读取到每个服务的地址信息,从而使得这些服务之间没有了通讯,造成崩溃。所以正常来说至少需要两到三个eurake同时运行来保证整个微服务系统正常。

集群思路很简单,多个eurake中心之间“你中有我,我中有你”,每个都是客户端,每个都是服务器,互相注册,这样就能互相检测;同时,把其他客户端如order和user在这些业务模块都注册到这些eurake中心中,这样一个挂了其他的还能服务它们。

新建并配置eurake2 eurake2作用与eurake一致,也是一个服务中心

引入jar包

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

添加注解@EnableEurekaClient和@EnableEurekaServer,它即为server也是client 配置文件application.properties

#项目端口号
server.port=8079
#服务名称,serverid
spring.application.name=eurake-server2
#注册中心ip
eureka.instance.hostname=localhost
#是否需要向注册中心注册自己,单个的eurake-server不需要开启,多个需要开启
eureka.client.register-with-eureka=true
#开启检索服务,单个的eurake不需要开启,多个需要开启
eureka.client.fetch-registry=true

#注册中心地址,由注册中心ip和项目端口号拼接/eurake
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka/

修改eurake 多引入jar包

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

启动类在原来基础添加注解@EnableEurekaClient

修改applicaition.properties配置

#项目端口号
server.port=8080
#服务名称,serverid
spring.application.name=eurake-server
#注册中心ip
eureka.instance.hostname=localhost
#是否需要向注册中心注册自己,单个的eurake-server不需要开启,多个需要
eureka.client.register-with-eureka=true
#开启检索服务,单个的eurake不需要开启,多个需要
eureka.client.fetch-registry=true
#注册中心地址,由注册中心ip和项目端口号拼接/eurake,这里它需要向8079即eurak2中注册
eureka.client.serviceUrl.defaultZone=http://localhost:8079

修改order和user 修改application.properties配置,在注册中心地址上加上8079即eurake2的地址,中间逗号

#注册中心地址,把自己注册到注册中心
eureka.client.serviceUrl.defaultZone=http://localhost:8080/eureka,http://localhost:8079/eureka/

分别启动eurake,eurake2,order和user

首先输入localhost:8080

看到列表中包含eurake(自己),order,user和eurake2四个个服务 然后打开eurake2地址 localhost:8079

发现只有eurake和eurake2(自己)两个注册上了,这时要注意:注册过程中,客户端只会保证有一台服务中心有对应服务列表,当前服务中心宕机后才会“转移”到其他服务注册中心 做个测试,关闭eurake,等待30秒(默认心跳时间),看order和user是否会转移到eurake2

发现order和user已经过来了,但是服务列表中还有eurake服务信息,明明已经把它关闭了,这是因为Eureka拥有自我保护机制,宕机的节点不会主动T除,而是等待它重连。 可以在application.properties中设置T除已经挂掉的节点。

服务端:

eureka.server.enable-self-preservation//(设为false,关闭自我保护)
eureka.server.eviction-interval-timer-in-ms//清理间隔(单位毫秒,默认是60秒)

客户端:

 #每间隔1s,向服务端发送一次心跳
 eureka.instance.lease-renewal-interval-in-seconds =1
 #2s之内没有心跳就踢出
 eureka.instance.lease-expiration-duration-in-seconds=2

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138868.html原文链接:https://javaforall.cn