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

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

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

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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号